diff --git a/sqlx-data.json b/sqlx-data.json index afeaa8a26..ac3cbb576 100644 --- a/sqlx-data.json +++ b/sqlx-data.json @@ -875,6 +875,19 @@ "nullable": [] } }, + "3f2f05653552ce8c1be95ce0a922ab41f52f40f8ff6c91c6621481102c8f35e3": { + "query": "\n INSERT INTO game_versions_versions (game_version_id, joining_version_id)\n VALUES ($1, $2)\n ", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Int4", + "Int8" + ] + }, + "nullable": [] + } + }, "42e072309779598d0c213280dd8052d1b4889cb24ef5204ca13b74f693b94328": { "query": "\n SELECT user_id FROM team_members tm\n INNER JOIN mods ON mods.team_id = tm.team_id\n WHERE mods.id = $1\n ", "describe": { @@ -1254,6 +1267,18 @@ "nullable": [] } }, + "507314fdcacaa3c7751738c9d0baee2b90aec719b6b203f922824eced5ea8369": { + "query": "\n DELETE FROM game_versions_versions WHERE joining_version_id = $1\n ", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Int8" + ] + }, + "nullable": [] + } + }, "50a15c443b01cefc478a3b5ca03bb9b279782d74bcf42ee4e7c06581457c130d": { "query": "\n INSERT INTO versions (\n id, mod_id, author_id, name, version_number,\n changelog_url, date_published,\n downloads, release_channel, accepted, featured\n )\n VALUES (\n $1, $2, $3, $4, $5,\n $6, $7,\n $8, $9,\n $10, $11\n )\n ", "describe": { @@ -3826,6 +3851,18 @@ ] } }, + "fa911efc808e726c13659d3ce6baf61dc562e6f1e73fd65537a4ab1dad17120e": { + "query": "\n DELETE FROM downloads\n WHERE downloads.version_id = $1\n ", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Int8" + ] + }, + "nullable": [] + } + }, "fb6178b27856ff583039a974173efe5d6be4e347b6cc1d4904cf750a40d1b77f": { "query": "\n SELECT dependency_id id FROM dependencies\n WHERE dependent_id = $1\n ", "describe": { diff --git a/src/database/models/version_item.rs b/src/database/models/version_item.rs index d335b1db8..b3723ffdd 100644 --- a/src/database/models/version_item.rs +++ b/src/database/models/version_item.rs @@ -235,6 +235,16 @@ impl Version { .execute(exec) .await?; + sqlx::query!( + " + DELETE FROM downloads + WHERE downloads.version_id = $1 + ", + id as VersionId, + ) + .execute(exec) + .await?; + use futures::TryStreamExt; let files = sqlx::query!( diff --git a/src/models/teams.rs b/src/models/teams.rs index a2306cb63..c2586eb87 100644 --- a/src/models/teams.rs +++ b/src/models/teams.rs @@ -45,6 +45,8 @@ impl Default for Permissions { /// A member of a team #[derive(Serialize, Deserialize, Clone)] pub struct TeamMember { + /// The ID of the team this team member is a member of + pub team_id: TeamId, /// The ID of the user associated with the member pub user_id: UserId, /// The role of the user in the team diff --git a/src/routes/teams.rs b/src/routes/teams.rs index b488ea385..075854819 100644 --- a/src/routes/teams.rs +++ b/src/routes/teams.rs @@ -27,6 +27,7 @@ pub async fn team_members_get( let team_members: Vec = members_data .into_iter() .map(|data| crate::models::teams::TeamMember { + team_id: id, user_id: data.user_id.into(), role: data.role, permissions: Some(data.permissions), @@ -42,14 +43,13 @@ pub async fn team_members_get( for team_member in members_data { if team_member.accepted { - team_members.push( - crate::models::teams::TeamMember { - user_id: team_member.user_id.into(), - role: team_member.role, - permissions: None, - accepted: team_member.accepted - } - ) + team_members.push(crate::models::teams::TeamMember { + team_id: id, + user_id: team_member.user_id.into(), + role: team_member.role, + permissions: None, + accepted: team_member.accepted, + }) } } @@ -298,7 +298,7 @@ pub async fn remove_team_member( } }; - let delete_member = TeamMember::get_from_user_id(id, user_id, &**pool).await?; + let delete_member = TeamMember::get_from_user_id_pending(id, user_id, &**pool).await?; if let Some(delete_member) = delete_member { if delete_member.role == crate::models::teams::OWNER_ROLE { diff --git a/src/routes/users.rs b/src/routes/users.rs index a3a90c949..f699f6091 100644 --- a/src/routes/users.rs +++ b/src/routes/users.rs @@ -175,6 +175,7 @@ pub async fn teams( let team_members: Vec = results .into_iter() .map(|data| crate::models::teams::TeamMember { + team_id: data.team_id.into(), user_id: data.user_id.into(), role: data.role, permissions: if same_user { @@ -182,7 +183,7 @@ pub async fn teams( } else { None }, - accepted: data.accepted + accepted: data.accepted, }) .collect(); diff --git a/src/routes/versions.rs b/src/routes/versions.rs index 239d580e2..c0ac26779 100644 --- a/src/routes/versions.rs +++ b/src/routes/versions.rs @@ -361,6 +361,43 @@ pub async fn version_edit( } } + if let Some(game_versions) = &new_version.game_versions { + sqlx::query!( + " + DELETE FROM game_versions_versions WHERE joining_version_id = $1 + ", + id as database::models::ids::VersionId, + ) + .execute(&mut *transaction) + .await + .map_err(|e| ApiError::DatabaseError(e.into()))?; + + for game_version in game_versions { + let game_version_id = database::models::categories::GameVersion::get_id( + &game_version.0, + &mut *transaction, + ) + .await? + .ok_or_else(|| { + ApiError::InvalidInputError( + "No database entry for game version provided.".to_string(), + ) + })?; + + sqlx::query!( + " + INSERT INTO game_versions_versions (game_version_id, joining_version_id) + VALUES ($1, $2) + ", + game_version_id as database::models::ids::GameVersionId, + id as database::models::ids::VersionId, + ) + .execute(&mut *transaction) + .await + .map_err(|e| ApiError::DatabaseError(e.into()))?; + } + } + if let Some(loaders) = &new_version.loaders { sqlx::query!( "