forked from didirus/AstralRinth
Minor fixes to orderings and permission serialization (#102)
* Fix latest_version in search results * Handle users with invalid permissions instead of skipping them * Specify order of some queries, fix serialization of permissions * Run sqlx prepare
This commit is contained in:
@@ -107,7 +107,7 @@ impl TeamMember {
|
||||
if let Some(m) = e.right() {
|
||||
let permissions = Permissions::from_bits(m.permissions as u64);
|
||||
if let Some(perms) = permissions {
|
||||
Ok(Some(TeamMember {
|
||||
Ok(Some(Ok(TeamMember {
|
||||
id: TeamMemberId(m.id),
|
||||
team_id: id,
|
||||
user_id: UserId(m.user_id),
|
||||
@@ -115,17 +115,21 @@ impl TeamMember {
|
||||
role: m.role,
|
||||
permissions: perms,
|
||||
accepted: m.accepted,
|
||||
}))
|
||||
})))
|
||||
} else {
|
||||
Ok(None)
|
||||
Ok(Some(Err(super::DatabaseError::BitflagError)))
|
||||
}
|
||||
} else {
|
||||
Ok(None)
|
||||
}
|
||||
})
|
||||
.try_collect::<Vec<TeamMember>>()
|
||||
.try_collect::<Vec<Result<TeamMember, super::DatabaseError>>>()
|
||||
.await?;
|
||||
|
||||
let team_members = team_members
|
||||
.into_iter()
|
||||
.collect::<Result<Vec<TeamMember>, super::DatabaseError>>()?;
|
||||
|
||||
Ok(team_members)
|
||||
}
|
||||
|
||||
@@ -152,7 +156,7 @@ impl TeamMember {
|
||||
if let Some(m) = e.right() {
|
||||
let permissions = Permissions::from_bits(m.permissions as u64);
|
||||
if let Some(perms) = permissions {
|
||||
Ok(Some(TeamMember {
|
||||
Ok(Some(Ok(TeamMember {
|
||||
id: TeamMemberId(m.id),
|
||||
team_id: TeamId(m.team_id),
|
||||
user_id: id,
|
||||
@@ -160,17 +164,21 @@ impl TeamMember {
|
||||
role: m.role,
|
||||
permissions: perms,
|
||||
accepted: m.accepted,
|
||||
}))
|
||||
})))
|
||||
} else {
|
||||
Ok(None)
|
||||
Ok(Some(Err(super::DatabaseError::BitflagError)))
|
||||
}
|
||||
} else {
|
||||
Ok(None)
|
||||
}
|
||||
})
|
||||
.try_collect::<Vec<TeamMember>>()
|
||||
.try_collect::<Vec<Result<TeamMember, super::DatabaseError>>>()
|
||||
.await?;
|
||||
|
||||
let team_members = team_members
|
||||
.into_iter()
|
||||
.collect::<Result<Vec<TeamMember>, super::DatabaseError>>()?;
|
||||
|
||||
Ok(team_members)
|
||||
}
|
||||
|
||||
|
||||
@@ -331,6 +331,7 @@ impl Version {
|
||||
"
|
||||
SELECT id FROM versions
|
||||
WHERE mod_id = $1
|
||||
ORDER BY date_published ASC
|
||||
",
|
||||
mod_id as ModId,
|
||||
)
|
||||
|
||||
@@ -22,6 +22,7 @@ pub struct Team {
|
||||
|
||||
bitflags::bitflags! {
|
||||
#[derive(Serialize, Deserialize)]
|
||||
#[serde(transparent)]
|
||||
pub struct Permissions: u64 {
|
||||
const UPLOAD_VERSION = 1 << 0;
|
||||
const DELETE_VERSION = 1 << 1;
|
||||
@@ -51,5 +52,5 @@ pub struct TeamMember {
|
||||
/// The role of the user in the team
|
||||
pub role: String,
|
||||
/// A bitset containing the user's permissions in this team
|
||||
pub permissions: Permissions,
|
||||
pub permissions: Option<Permissions>,
|
||||
}
|
||||
|
||||
@@ -30,7 +30,7 @@ pub async fn team_members_get(
|
||||
user_id: data.user_id.into(),
|
||||
name: data.name,
|
||||
role: data.role,
|
||||
permissions: data.permissions,
|
||||
permissions: Some(data.permissions),
|
||||
})
|
||||
.collect();
|
||||
|
||||
@@ -44,7 +44,7 @@ pub async fn team_members_get(
|
||||
user_id: data.user_id.into(),
|
||||
name: data.name,
|
||||
role: data.role,
|
||||
permissions: Permissions::default(),
|
||||
permissions: None,
|
||||
})
|
||||
.collect();
|
||||
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
use crate::auth::{check_is_moderator_from_headers, get_user_from_headers};
|
||||
use crate::database::models::{TeamMember, User};
|
||||
use crate::models::teams::Permissions;
|
||||
use crate::models::users::{Role, UserId};
|
||||
use crate::routes::ApiError;
|
||||
use actix_web::{delete, get, web, HttpRequest, HttpResponse};
|
||||
@@ -152,9 +151,9 @@ pub async fn teams(
|
||||
name: data.name,
|
||||
role: data.role,
|
||||
permissions: if same_user {
|
||||
data.permissions
|
||||
Some(data.permissions)
|
||||
} else {
|
||||
Permissions::default()
|
||||
None
|
||||
},
|
||||
})
|
||||
.collect();
|
||||
|
||||
@@ -22,7 +22,7 @@ pub async fn index_local(pool: PgPool) -> Result<Vec<UploadSearchMod>, IndexingE
|
||||
if let Ok(mod_data) = result {
|
||||
let versions = sqlx::query!(
|
||||
"
|
||||
SELECT gv.version FROM versions
|
||||
SELECT DISTINCT gv.version, gv.created FROM versions
|
||||
INNER JOIN game_versions_versions gvv ON gvv.joining_version_id=versions.id
|
||||
INNER JOIN game_versions gv ON gvv.game_version_id=gv.id
|
||||
WHERE versions.mod_id = $1
|
||||
@@ -90,7 +90,7 @@ pub async fn index_local(pool: PgPool) -> Result<Vec<UploadSearchMod>, IndexingE
|
||||
// minecraft that this mod has a version that supports; it doesn't
|
||||
// take betas or other info into account.
|
||||
let latest_version = versions
|
||||
.get(0)
|
||||
.last()
|
||||
.cloned()
|
||||
.map(Cow::Owned)
|
||||
.unwrap_or_else(|| Cow::Borrowed(""));
|
||||
@@ -134,7 +134,7 @@ pub async fn query_one(
|
||||
|
||||
let versions = sqlx::query!(
|
||||
"
|
||||
SELECT gv.version FROM versions
|
||||
SELECT DISTINCT gv.version, gv.created FROM versions
|
||||
INNER JOIN game_versions_versions gvv ON gvv.joining_version_id=versions.id
|
||||
INNER JOIN game_versions gv ON gvv.game_version_id=gv.id
|
||||
WHERE versions.mod_id = $1
|
||||
@@ -202,7 +202,7 @@ pub async fn query_one(
|
||||
// minecraft that this mod has a version that supports; it doesn't
|
||||
// take betas or other info into account.
|
||||
let latest_version = versions
|
||||
.get(0)
|
||||
.last()
|
||||
.cloned()
|
||||
.map(Cow::Owned)
|
||||
.unwrap_or_else(|| Cow::Borrowed(""));
|
||||
|
||||
Reference in New Issue
Block a user