You've already forked AstralRinth
forked from didirus/AstralRinth
Commonize and distinguish a lot of struct names in labrinth::database::models (#3691)
This commit is contained in:
@@ -1,9 +1,9 @@
|
||||
use crate::auth::checks::is_visible_project;
|
||||
use crate::auth::get_user_from_headers;
|
||||
use crate::database::Project;
|
||||
use crate::database::DBProject;
|
||||
use crate::database::models::notification_item::NotificationBuilder;
|
||||
use crate::database::models::team_item::TeamAssociationId;
|
||||
use crate::database::models::{Organization, Team, TeamMember, User};
|
||||
use crate::database::models::{DBOrganization, DBTeam, DBTeamMember, DBUser};
|
||||
use crate::database::redis::RedisPool;
|
||||
use crate::models::ids::TeamId;
|
||||
use crate::models::notifications::NotificationBody;
|
||||
@@ -48,7 +48,8 @@ pub async fn team_members_get_project(
|
||||
) -> Result<HttpResponse, ApiError> {
|
||||
let string = info.into_inner().0;
|
||||
let project_data =
|
||||
crate::database::models::Project::get(&string, &**pool, &redis).await?;
|
||||
crate::database::models::DBProject::get(&string, &**pool, &redis)
|
||||
.await?;
|
||||
|
||||
if let Some(project) = project_data {
|
||||
let current_user = get_user_from_headers(
|
||||
@@ -67,13 +68,13 @@ pub async fn team_members_get_project(
|
||||
{
|
||||
return Err(ApiError::NotFound);
|
||||
}
|
||||
let members_data = TeamMember::get_from_team_full(
|
||||
let members_data = DBTeamMember::get_from_team_full(
|
||||
project.inner.team_id,
|
||||
&**pool,
|
||||
&redis,
|
||||
)
|
||||
.await?;
|
||||
let users = User::get_many_ids(
|
||||
let users = DBUser::get_many_ids(
|
||||
&members_data.iter().map(|x| x.user_id).collect::<Vec<_>>(),
|
||||
&**pool,
|
||||
&redis,
|
||||
@@ -83,7 +84,7 @@ pub async fn team_members_get_project(
|
||||
let user_id = current_user.as_ref().map(|x| x.id.into());
|
||||
let logged_in = if let Some(user_id) = user_id {
|
||||
let (team_member, organization_team_member) =
|
||||
TeamMember::get_for_project_permissions(
|
||||
DBTeamMember::get_for_project_permissions(
|
||||
&project.inner,
|
||||
user_id,
|
||||
&**pool,
|
||||
@@ -132,7 +133,7 @@ pub async fn team_members_get_organization(
|
||||
) -> Result<HttpResponse, ApiError> {
|
||||
let string = info.into_inner().0;
|
||||
let organization_data =
|
||||
crate::database::models::Organization::get(&string, &**pool, &redis)
|
||||
crate::database::models::DBOrganization::get(&string, &**pool, &redis)
|
||||
.await?;
|
||||
|
||||
if let Some(organization) = organization_data {
|
||||
@@ -147,13 +148,13 @@ pub async fn team_members_get_organization(
|
||||
.map(|x| x.1)
|
||||
.ok();
|
||||
|
||||
let members_data = TeamMember::get_from_team_full(
|
||||
let members_data = DBTeamMember::get_from_team_full(
|
||||
organization.team_id,
|
||||
&**pool,
|
||||
&redis,
|
||||
)
|
||||
.await?;
|
||||
let users = crate::database::models::User::get_many_ids(
|
||||
let users = crate::database::models::DBUser::get_many_ids(
|
||||
&members_data.iter().map(|x| x.user_id).collect::<Vec<_>>(),
|
||||
&**pool,
|
||||
&redis,
|
||||
@@ -208,8 +209,8 @@ pub async fn team_members_get(
|
||||
) -> Result<HttpResponse, ApiError> {
|
||||
let id = info.into_inner().0;
|
||||
let members_data =
|
||||
TeamMember::get_from_team_full(id.into(), &**pool, &redis).await?;
|
||||
let users = crate::database::models::User::get_many_ids(
|
||||
DBTeamMember::get_from_team_full(id.into(), &**pool, &redis).await?;
|
||||
let users = crate::database::models::DBUser::get_many_ids(
|
||||
&members_data.iter().map(|x| x.user_id).collect::<Vec<_>>(),
|
||||
&**pool,
|
||||
&redis,
|
||||
@@ -279,8 +280,9 @@ pub async fn teams_get(
|
||||
.collect::<Vec<crate::database::models::ids::DBTeamId>>();
|
||||
|
||||
let teams_data =
|
||||
TeamMember::get_from_team_full_many(&team_ids, &**pool, &redis).await?;
|
||||
let users = crate::database::models::User::get_many_ids(
|
||||
DBTeamMember::get_from_team_full_many(&team_ids, &**pool, &redis)
|
||||
.await?;
|
||||
let users = crate::database::models::DBUser::get_many_ids(
|
||||
&teams_data.iter().map(|x| x.user_id).collect::<Vec<_>>(),
|
||||
&**pool,
|
||||
&redis,
|
||||
@@ -351,7 +353,7 @@ pub async fn join_team(
|
||||
.await?
|
||||
.1;
|
||||
|
||||
let member = TeamMember::get_from_user_id_pending(
|
||||
let member = DBTeamMember::get_from_user_id_pending(
|
||||
team_id,
|
||||
current_user.id.into(),
|
||||
&**pool,
|
||||
@@ -367,7 +369,7 @@ pub async fn join_team(
|
||||
let mut transaction = pool.begin().await?;
|
||||
|
||||
// Edit Team Member to set Accepted to True
|
||||
TeamMember::edit_team_member(
|
||||
DBTeamMember::edit_team_member(
|
||||
team_id,
|
||||
current_user.id.into(),
|
||||
None,
|
||||
@@ -383,8 +385,8 @@ pub async fn join_team(
|
||||
|
||||
transaction.commit().await?;
|
||||
|
||||
User::clear_project_cache(&[current_user.id.into()], &redis).await?;
|
||||
TeamMember::clear_cache(team_id, &redis).await?;
|
||||
DBUser::clear_project_cache(&[current_user.id.into()], &redis).await?;
|
||||
DBTeamMember::clear_cache(team_id, &redis).await?;
|
||||
} else {
|
||||
return Err(ApiError::InvalidInput(
|
||||
"There is no pending request from this team".to_string(),
|
||||
@@ -439,27 +441,30 @@ pub async fn add_team_member(
|
||||
)
|
||||
.await?
|
||||
.1;
|
||||
let team_association = Team::get_association(team_id, &**pool)
|
||||
let team_association = DBTeam::get_association(team_id, &**pool)
|
||||
.await?
|
||||
.ok_or_else(|| {
|
||||
ApiError::InvalidInput(
|
||||
"The team specified does not exist".to_string(),
|
||||
)
|
||||
})?;
|
||||
let member =
|
||||
TeamMember::get_from_user_id(team_id, current_user.id.into(), &**pool)
|
||||
.await?;
|
||||
let member = DBTeamMember::get_from_user_id(
|
||||
team_id,
|
||||
current_user.id.into(),
|
||||
&**pool,
|
||||
)
|
||||
.await?;
|
||||
match team_association {
|
||||
// If team is associated with a project, check if they have permissions to invite users to that project
|
||||
TeamAssociationId::Project(pid) => {
|
||||
let organization =
|
||||
Organization::get_associated_organization_project_id(
|
||||
DBOrganization::get_associated_organization_project_id(
|
||||
pid, &**pool,
|
||||
)
|
||||
.await?;
|
||||
let organization_team_member =
|
||||
if let Some(organization) = &organization {
|
||||
TeamMember::get_from_user_id(
|
||||
DBTeamMember::get_from_user_id(
|
||||
organization.team_id,
|
||||
current_user.id.into(),
|
||||
&**pool,
|
||||
@@ -537,7 +542,7 @@ pub async fn add_team_member(
|
||||
));
|
||||
}
|
||||
|
||||
let request = TeamMember::get_from_user_id_pending(
|
||||
let request = DBTeamMember::get_from_user_id_pending(
|
||||
team_id,
|
||||
new_member.user_id.into(),
|
||||
&**pool,
|
||||
@@ -556,7 +561,7 @@ pub async fn add_team_member(
|
||||
));
|
||||
}
|
||||
}
|
||||
let new_user = crate::database::models::User::get_id(
|
||||
let new_user = crate::database::models::DBUser::get_id(
|
||||
new_member.user_id.into(),
|
||||
&**pool,
|
||||
&redis,
|
||||
@@ -570,11 +575,13 @@ pub async fn add_team_member(
|
||||
if let TeamAssociationId::Project(pid) = team_association {
|
||||
// We cannot add the owner to a project team in their own org
|
||||
let organization =
|
||||
Organization::get_associated_organization_project_id(pid, &**pool)
|
||||
.await?;
|
||||
DBOrganization::get_associated_organization_project_id(
|
||||
pid, &**pool,
|
||||
)
|
||||
.await?;
|
||||
let new_user_organization_team_member =
|
||||
if let Some(organization) = &organization {
|
||||
TeamMember::get_from_user_id(
|
||||
DBTeamMember::get_from_user_id(
|
||||
organization.team_id,
|
||||
new_user.id,
|
||||
&**pool,
|
||||
@@ -607,7 +614,7 @@ pub async fn add_team_member(
|
||||
let new_id =
|
||||
crate::database::models::ids::generate_team_member_id(&mut transaction)
|
||||
.await?;
|
||||
TeamMember {
|
||||
DBTeamMember {
|
||||
id: new_id,
|
||||
team_id,
|
||||
user_id: new_member.user_id.into(),
|
||||
@@ -653,8 +660,8 @@ pub async fn add_team_member(
|
||||
}
|
||||
|
||||
transaction.commit().await?;
|
||||
TeamMember::clear_cache(team_id, &redis).await?;
|
||||
User::clear_project_cache(&[new_member.user_id.into()], &redis).await?;
|
||||
DBTeamMember::clear_cache(team_id, &redis).await?;
|
||||
DBUser::clear_project_cache(&[new_member.user_id.into()], &redis).await?;
|
||||
|
||||
Ok(HttpResponse::NoContent().body(""))
|
||||
}
|
||||
@@ -691,16 +698,16 @@ pub async fn edit_team_member(
|
||||
.1;
|
||||
|
||||
let team_association =
|
||||
Team::get_association(id, &**pool).await?.ok_or_else(|| {
|
||||
DBTeam::get_association(id, &**pool).await?.ok_or_else(|| {
|
||||
ApiError::InvalidInput(
|
||||
"The team specified does not exist".to_string(),
|
||||
)
|
||||
})?;
|
||||
let member =
|
||||
TeamMember::get_from_user_id(id, current_user.id.into(), &**pool)
|
||||
DBTeamMember::get_from_user_id(id, current_user.id.into(), &**pool)
|
||||
.await?;
|
||||
let edit_member_db =
|
||||
TeamMember::get_from_user_id_pending(id, user_id, &**pool)
|
||||
DBTeamMember::get_from_user_id_pending(id, user_id, &**pool)
|
||||
.await?
|
||||
.ok_or_else(|| {
|
||||
ApiError::CustomAuthentication(
|
||||
@@ -723,13 +730,13 @@ pub async fn edit_team_member(
|
||||
match team_association {
|
||||
TeamAssociationId::Project(project_id) => {
|
||||
let organization =
|
||||
Organization::get_associated_organization_project_id(
|
||||
DBOrganization::get_associated_organization_project_id(
|
||||
project_id, &**pool,
|
||||
)
|
||||
.await?;
|
||||
let organization_team_member =
|
||||
if let Some(organization) = &organization {
|
||||
TeamMember::get_from_user_id(
|
||||
DBTeamMember::get_from_user_id(
|
||||
organization.team_id,
|
||||
current_user.id.into(),
|
||||
&**pool,
|
||||
@@ -831,7 +838,7 @@ pub async fn edit_team_member(
|
||||
}
|
||||
}
|
||||
|
||||
TeamMember::edit_team_member(
|
||||
DBTeamMember::edit_team_member(
|
||||
id,
|
||||
user_id,
|
||||
edit_member.permissions,
|
||||
@@ -846,7 +853,7 @@ pub async fn edit_team_member(
|
||||
.await?;
|
||||
|
||||
transaction.commit().await?;
|
||||
TeamMember::clear_cache(id, &redis).await?;
|
||||
DBTeamMember::clear_cache(id, &redis).await?;
|
||||
|
||||
Ok(HttpResponse::NoContent().body(""))
|
||||
}
|
||||
@@ -879,9 +886,10 @@ pub async fn transfer_ownership(
|
||||
// Forbid transferring ownership of a project team that is owned by an organization
|
||||
// These are owned by the organization owner, and must be removed from the organization first
|
||||
// There shouldnt be an ownr on these projects in these cases, but just in case.
|
||||
let team_association_id = Team::get_association(id.into(), &**pool).await?;
|
||||
let team_association_id =
|
||||
DBTeam::get_association(id.into(), &**pool).await?;
|
||||
if let Some(TeamAssociationId::Project(pid)) = team_association_id {
|
||||
let result = Project::get_id(pid, &**pool, &redis).await?;
|
||||
let result = DBProject::get_id(pid, &**pool, &redis).await?;
|
||||
if let Some(project_item) = result {
|
||||
if project_item.inner.organization_id.is_some() {
|
||||
return Err(ApiError::InvalidInput(
|
||||
@@ -893,7 +901,7 @@ pub async fn transfer_ownership(
|
||||
}
|
||||
|
||||
if !current_user.role.is_admin() {
|
||||
let member = TeamMember::get_from_user_id(
|
||||
let member = DBTeamMember::get_from_user_id(
|
||||
id.into(),
|
||||
current_user.id.into(),
|
||||
&**pool,
|
||||
@@ -914,7 +922,7 @@ pub async fn transfer_ownership(
|
||||
}
|
||||
}
|
||||
|
||||
let new_member = TeamMember::get_from_user_id(
|
||||
let new_member = DBTeamMember::get_from_user_id(
|
||||
id.into(),
|
||||
new_owner.user_id.into(),
|
||||
&**pool,
|
||||
@@ -936,12 +944,12 @@ pub async fn transfer_ownership(
|
||||
|
||||
// The following are the only places new_is_owner is modified.
|
||||
if let Some(former_owner) =
|
||||
TeamMember::get_from_team_full(id.into(), &**pool, &redis)
|
||||
DBTeamMember::get_from_team_full(id.into(), &**pool, &redis)
|
||||
.await?
|
||||
.into_iter()
|
||||
.find(|x| x.is_owner)
|
||||
{
|
||||
TeamMember::edit_team_member(
|
||||
DBTeamMember::edit_team_member(
|
||||
id.into(),
|
||||
former_owner.user_id,
|
||||
None,
|
||||
@@ -956,7 +964,7 @@ pub async fn transfer_ownership(
|
||||
.await?;
|
||||
}
|
||||
|
||||
TeamMember::edit_team_member(
|
||||
DBTeamMember::edit_team_member(
|
||||
id.into(),
|
||||
new_owner.user_id.into(),
|
||||
Some(ProjectPermissions::all()),
|
||||
@@ -1004,7 +1012,7 @@ pub async fn transfer_ownership(
|
||||
|
||||
// If the owner of the organization is a member of the project, remove them
|
||||
for team_id in team_ids.iter() {
|
||||
TeamMember::delete(
|
||||
DBTeamMember::delete(
|
||||
*team_id,
|
||||
new_owner.user_id.into(),
|
||||
&mut transaction,
|
||||
@@ -1018,9 +1026,9 @@ pub async fn transfer_ownership(
|
||||
};
|
||||
|
||||
transaction.commit().await?;
|
||||
TeamMember::clear_cache(id.into(), &redis).await?;
|
||||
DBTeamMember::clear_cache(id.into(), &redis).await?;
|
||||
for team_id in project_teams_edited {
|
||||
TeamMember::clear_cache(team_id, &redis).await?;
|
||||
DBTeamMember::clear_cache(team_id, &redis).await?;
|
||||
}
|
||||
|
||||
Ok(HttpResponse::NoContent().body(""))
|
||||
@@ -1048,17 +1056,17 @@ pub async fn remove_team_member(
|
||||
.1;
|
||||
|
||||
let team_association =
|
||||
Team::get_association(id, &**pool).await?.ok_or_else(|| {
|
||||
DBTeam::get_association(id, &**pool).await?.ok_or_else(|| {
|
||||
ApiError::InvalidInput(
|
||||
"The team specified does not exist".to_string(),
|
||||
)
|
||||
})?;
|
||||
let member =
|
||||
TeamMember::get_from_user_id(id, current_user.id.into(), &**pool)
|
||||
DBTeamMember::get_from_user_id(id, current_user.id.into(), &**pool)
|
||||
.await?;
|
||||
|
||||
let delete_member =
|
||||
TeamMember::get_from_user_id_pending(id, user_id, &**pool).await?;
|
||||
DBTeamMember::get_from_user_id_pending(id, user_id, &**pool).await?;
|
||||
|
||||
if let Some(delete_member) = delete_member {
|
||||
if delete_member.is_owner {
|
||||
@@ -1074,13 +1082,13 @@ pub async fn remove_team_member(
|
||||
match team_association {
|
||||
TeamAssociationId::Project(pid) => {
|
||||
let organization =
|
||||
Organization::get_associated_organization_project_id(
|
||||
DBOrganization::get_associated_organization_project_id(
|
||||
pid, &**pool,
|
||||
)
|
||||
.await?;
|
||||
let organization_team_member =
|
||||
if let Some(organization) = &organization {
|
||||
TeamMember::get_from_user_id(
|
||||
DBTeamMember::get_from_user_id(
|
||||
organization.team_id,
|
||||
current_user.id.into(),
|
||||
&**pool,
|
||||
@@ -1105,7 +1113,7 @@ pub async fn remove_team_member(
|
||||
.contains(ProjectPermissions::REMOVE_MEMBER)
|
||||
// true as if the permission exists, but the member does not, they are part of an org
|
||||
{
|
||||
TeamMember::delete(id, user_id, &mut transaction)
|
||||
DBTeamMember::delete(id, user_id, &mut transaction)
|
||||
.await?;
|
||||
} else {
|
||||
return Err(ApiError::CustomAuthentication(
|
||||
@@ -1121,7 +1129,7 @@ pub async fn remove_team_member(
|
||||
// This is a pending invite rather than a member, so the
|
||||
// user being invited or team members with the MANAGE_INVITES
|
||||
// permission can remove it.
|
||||
TeamMember::delete(id, user_id, &mut transaction).await?;
|
||||
DBTeamMember::delete(id, user_id, &mut transaction).await?;
|
||||
} else {
|
||||
return Err(ApiError::CustomAuthentication(
|
||||
"You do not have permission to cancel a team invite"
|
||||
@@ -1144,7 +1152,7 @@ pub async fn remove_team_member(
|
||||
|| organization_permissions
|
||||
.contains(OrganizationPermissions::REMOVE_MEMBER)
|
||||
{
|
||||
TeamMember::delete(id, user_id, &mut transaction)
|
||||
DBTeamMember::delete(id, user_id, &mut transaction)
|
||||
.await?;
|
||||
} else {
|
||||
return Err(ApiError::CustomAuthentication(
|
||||
@@ -1160,7 +1168,7 @@ pub async fn remove_team_member(
|
||||
// This is a pending invite rather than a member, so the
|
||||
// user being invited or team members with the MANAGE_INVITES
|
||||
// permission can remove it.
|
||||
TeamMember::delete(id, user_id, &mut transaction).await?;
|
||||
DBTeamMember::delete(id, user_id, &mut transaction).await?;
|
||||
} else {
|
||||
return Err(ApiError::CustomAuthentication(
|
||||
"You do not have permission to cancel an organization invite".to_string(),
|
||||
@@ -1171,8 +1179,8 @@ pub async fn remove_team_member(
|
||||
|
||||
transaction.commit().await?;
|
||||
|
||||
TeamMember::clear_cache(id, &redis).await?;
|
||||
User::clear_project_cache(&[delete_member.user_id], &redis).await?;
|
||||
DBTeamMember::clear_cache(id, &redis).await?;
|
||||
DBUser::clear_project_cache(&[delete_member.user_id], &redis).await?;
|
||||
|
||||
Ok(HttpResponse::NoContent().body(""))
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user