Commonize and distinguish a lot of struct names in labrinth::database::models (#3691)

This commit is contained in:
Josiah Glosson
2025-05-24 04:38:43 -05:00
committed by GitHub
parent 9c1bdf16e4
commit 4e4a7be7ef
78 changed files with 1075 additions and 1009 deletions

View File

@@ -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 {