2020-07-23 22:46:33 +02:00
|
|
|
use super::ids::*;
|
|
|
|
|
|
|
|
|
|
pub struct TeamBuilder {
|
|
|
|
|
pub members: Vec<TeamMemberBuilder>,
|
|
|
|
|
}
|
|
|
|
|
pub struct TeamMemberBuilder {
|
|
|
|
|
pub user_id: UserId,
|
|
|
|
|
pub name: String,
|
|
|
|
|
pub role: String,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
impl TeamBuilder {
|
|
|
|
|
pub async fn insert(
|
|
|
|
|
self,
|
|
|
|
|
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
|
|
|
|
|
) -> Result<TeamId, super::DatabaseError> {
|
|
|
|
|
let team_id = generate_team_id(&mut *transaction).await?;
|
|
|
|
|
|
|
|
|
|
let team = Team { id: team_id };
|
|
|
|
|
|
|
|
|
|
sqlx::query(
|
|
|
|
|
"
|
|
|
|
|
INSERT INTO teams (id)
|
|
|
|
|
VALUES ($1)
|
|
|
|
|
",
|
|
|
|
|
)
|
|
|
|
|
.bind(team.id)
|
|
|
|
|
.execute(&mut *transaction)
|
|
|
|
|
.await?;
|
|
|
|
|
|
|
|
|
|
for member in self.members {
|
|
|
|
|
let team_member_id = generate_team_member_id(&mut *transaction).await?;
|
|
|
|
|
let team_member = TeamMember {
|
|
|
|
|
id: team_member_id,
|
|
|
|
|
team_id,
|
|
|
|
|
user_id: member.user_id,
|
|
|
|
|
name: member.name,
|
|
|
|
|
role: member.role,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
sqlx::query(
|
|
|
|
|
"
|
|
|
|
|
INSERT INTO team_members (id, team_id, user_id, name, role)
|
|
|
|
|
VALUES ($1, $2)
|
|
|
|
|
",
|
|
|
|
|
)
|
|
|
|
|
.bind(team_member.id)
|
|
|
|
|
.bind(team_member.team_id)
|
|
|
|
|
.bind(team_member.user_id)
|
|
|
|
|
.bind(team_member.name)
|
|
|
|
|
.bind(team_member.role)
|
|
|
|
|
.execute(&mut *transaction)
|
|
|
|
|
.await?;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Ok(team_id)
|
|
|
|
|
}
|
|
|
|
|
}
|
2020-07-16 10:16:35 -07:00
|
|
|
|
|
|
|
|
/// A team of users who control a mod
|
|
|
|
|
pub struct Team {
|
|
|
|
|
/// The id of the team
|
2020-07-23 22:46:33 +02:00
|
|
|
pub id: TeamId,
|
2020-07-16 10:16:35 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// A member of a team
|
|
|
|
|
pub struct TeamMember {
|
2020-07-23 22:46:33 +02:00
|
|
|
pub id: TeamMemberId,
|
|
|
|
|
pub team_id: TeamId,
|
2020-07-16 10:16:35 -07:00
|
|
|
/// The ID of the user associated with the member
|
2020-07-23 22:46:33 +02:00
|
|
|
pub user_id: UserId,
|
2020-07-16 10:16:35 -07:00
|
|
|
/// The name of the user
|
|
|
|
|
pub name: String,
|
|
|
|
|
pub role: String,
|
|
|
|
|
}
|