Labrinth ID cleanup (#3681)

* Put all ID types in the labrinth::models::ids, and reduce code duplication with them

* Rewrite labrinth::database::models::ids and rename most DB interface ID structs to be prefixed with DB

* Run sqlx prepare

---------

Co-authored-by: Alejandro González <7822554+AlexTMjugador@users.noreply.github.com>
This commit is contained in:
Josiah Glosson
2025-05-22 03:34:36 -05:00
committed by GitHub
parent c6022ad977
commit 9e527ff141
111 changed files with 1477 additions and 1965 deletions

View File

@@ -1,14 +1,14 @@
use std::collections::HashMap;
use crate::common::{api_v2::ApiV2, api_v3::ApiV3, dummy_data::TestFile};
use actix_web::dev::ServiceResponse;
use async_trait::async_trait;
use labrinth::models::ids::ProjectId;
use labrinth::models::{
projects::{ProjectId, VersionType},
projects::VersionType,
teams::{OrganizationPermissions, ProjectPermissions},
};
use crate::common::{api_v2::ApiV2, api_v3::ApiV3, dummy_data::TestFile};
use super::{
Api, ApiProject, ApiTags, ApiTeams, ApiUser, ApiVersion,
models::{CommonProject, CommonVersion},

View File

@@ -5,18 +5,18 @@ use self::models::{
CommonProject, CommonTeamMember, CommonVersion,
};
use self::request_data::{ImageData, ProjectCreationRequestData};
use super::dummy_data::TestFile;
use actix_web::dev::ServiceResponse;
use async_trait::async_trait;
use labrinth::models::ids::ProjectId;
use labrinth::{
LabrinthConfig,
models::{
projects::{ProjectId, VersionType},
projects::VersionType,
teams::{OrganizationPermissions, ProjectPermissions},
},
};
use super::dummy_data::TestFile;
pub mod generic;
pub mod models;
pub mod request_data;

View File

@@ -1,24 +1,23 @@
use ariadne::ids::UserId;
use chrono::{DateTime, Utc};
use labrinth::models::ids::{
ImageId, NotificationId, OrganizationId, ProjectId, ReportId, TeamId,
ThreadId, ThreadMessageId, VersionId,
};
use labrinth::{
auth::AuthProvider,
models::{
images::ImageId,
notifications::NotificationId,
organizations::OrganizationId,
projects::{
Dependency, GalleryItem, License, ModeratorMessage,
MonetizationStatus, ProjectId, ProjectStatus, VersionFile,
VersionId, VersionStatus, VersionType,
MonetizationStatus, ProjectStatus, VersionFile, VersionStatus,
VersionType,
},
reports::ReportId,
teams::{ProjectPermissions, TeamId},
threads::{ThreadId, ThreadMessageId},
users::{Badges, Role, User, UserId, UserPayoutData},
teams::ProjectPermissions,
users::{Badges, Role, User, UserPayoutData},
},
};
use rust_decimal::Decimal;
use serde::Deserialize;
// Fields shared by every version of the API.
// No struct in here should have ANY field that
// is not present in *every* version of the API.

View File

@@ -7,10 +7,8 @@ use crate::common::{
},
dummy_data::TestFile,
};
use labrinth::{
models::projects::ProjectId,
util::actix::{MultipartSegment, MultipartSegmentData},
};
use labrinth::models::ids::ProjectId;
use labrinth::util::actix::{MultipartSegment, MultipartSegmentData};
pub fn get_public_project_creation_data(
slug: &str,

View File

@@ -19,11 +19,9 @@ use actix_web::{
test::{self, TestRequest},
};
use async_trait::async_trait;
use labrinth::models::ids::ProjectId;
use labrinth::{
models::{
projects::{ProjectId, VersionType},
v2::projects::LegacyVersion,
},
models::{projects::VersionType, v2::projects::LegacyVersion},
routes::v2::version_file::FileUpdateData,
util::actix::AppendsMultipart,
};

View File

@@ -1,19 +1,17 @@
use crate::{
assert_status,
common::api_common::{Api, AppendsOptionalPat, request_data::ImageData},
};
use actix_http::StatusCode;
use actix_web::{
dev::ServiceResponse,
test::{self, TestRequest},
};
use ariadne::ids::UserId;
use bytes::Bytes;
use labrinth::models::{
organizations::Organization, users::UserId, v3::projects::Project,
};
use labrinth::models::{organizations::Organization, v3::projects::Project};
use serde_json::json;
use crate::{
assert_status,
common::api_common::{Api, AppendsOptionalPat, request_data::ImageData},
};
use super::ApiV3;
impl ApiV3 {

View File

@@ -7,10 +7,8 @@ use crate::common::{
},
dummy_data::TestFile,
};
use labrinth::{
models::projects::ProjectId,
util::actix::{MultipartSegment, MultipartSegmentData},
};
use labrinth::models::ids::ProjectId;
use labrinth::util::actix::{MultipartSegment, MultipartSegmentData};
pub fn get_public_project_creation_data(
slug: &str,

View File

@@ -19,11 +19,9 @@ use actix_web::{
test::{self, TestRequest},
};
use async_trait::async_trait;
use labrinth::models::ids::ProjectId;
use labrinth::{
models::{
projects::{ProjectId, VersionType},
v3::projects::Version,
},
models::{projects::VersionType, v3::projects::Version},
routes::v3::version_file::FileUpdateData,
util::actix::AppendsMultipart,
};

View File

@@ -1,22 +1,22 @@
#![allow(dead_code)]
use std::io::{Cursor, Write};
use actix_http::StatusCode;
use actix_web::test::{self, TestRequest};
use labrinth::models::{
oauth_clients::OAuthClient,
organizations::Organization,
pats::Scopes,
projects::{Project, ProjectId, Version},
};
use serde_json::json;
use sqlx::Executor;
use zip::{CompressionMethod, ZipWriter, write::FileOptions};
use crate::{
assert_status,
common::{api_common::Api, api_v3, database::USER_USER_PAT},
};
use actix_http::StatusCode;
use actix_web::test::{self, TestRequest};
use labrinth::models::ids::ProjectId;
use labrinth::models::{
oauth_clients::OAuthClient,
organizations::Organization,
pats::Scopes,
projects::{Project, Version},
};
use serde_json::json;
use sqlx::Executor;
use zip::{CompressionMethod, ZipWriter, write::FileOptions};
use super::{
api_common::{ApiProject, AppendsOptionalPat, request_data::ImageData},

View File

@@ -23,7 +23,7 @@ pub async fn create_test_pat(
name: format!("test_pat_{}", scopes.bits()),
access_token: format!("mrp_{}", id.0),
scopes,
user_id: database::models::ids::UserId(user_id),
user_id: database::models::ids::DBUserId(user_id),
created: Utc::now(),
expires: Utc::now() + chrono::Duration::days(1),
last_used: None,

View File

@@ -10,6 +10,7 @@ use crate::common::{
},
};
use actix_http::StatusCode;
use ariadne::ids::UserId;
use common::{
api_v3::ApiV3,
database::{FRIEND_USER_ID, FRIEND_USER_PAT, USER_USER_PAT},
@@ -18,10 +19,7 @@ use common::{
},
permissions::{PermissionsTest, PermissionsTestContext},
};
use labrinth::models::{
teams::{OrganizationPermissions, ProjectPermissions},
users::UserId,
};
use labrinth::models::teams::{OrganizationPermissions, ProjectPermissions};
use serde_json::json;
mod common;

View File

@@ -21,11 +21,12 @@ use hex::ToHex;
use labrinth::database::models::project_item::{
PROJECTS_NAMESPACE, PROJECTS_SLUGS_NAMESPACE,
};
use labrinth::models::projects::ProjectId;
use labrinth::models::ids::ProjectId;
use labrinth::models::teams::ProjectPermissions;
use labrinth::util::actix::{MultipartSegment, MultipartSegmentData};
use serde_json::json;
use sha1::Digest;
mod common;
#[actix_rt::test]

View File

@@ -8,6 +8,7 @@ use crate::common::dummy_data::{
};
use actix_http::StatusCode;
use actix_web::test;
use ariadne::ids::UserId;
use ariadne::ids::base62_impl::parse_base62;
use chrono::{Duration, Utc};
use common::api_common::Api;
@@ -19,11 +20,9 @@ use common::environment::{
TestEnvironment, with_test_environment, with_test_environment_all,
};
use common::{database::*, scopes::ScopeTest};
use labrinth::models::ids::ProjectId;
use labrinth::models::pats::Scopes;
use labrinth::models::projects::ProjectId;
use labrinth::models::users::UserId;
use serde_json::json;
// For each scope, we (using test_scope):
// - create a PAT with a given set of scopes for a function
// - create a PAT with all other scopes for a function

View File

@@ -20,9 +20,10 @@ use ariadne::ids::base62_impl::parse_base62;
use futures::StreamExt;
use hex::ToHex;
use itertools::Itertools;
use labrinth::models::ids::ProjectId;
use labrinth::{
database::models::project_item::PROJECTS_SLUGS_NAMESPACE,
models::{projects::ProjectId, teams::ProjectPermissions},
models::teams::ProjectPermissions,
util::actix::{AppendsMultipart, MultipartSegment, MultipartSegmentData},
};
use serde_json::json;

View File

@@ -7,8 +7,8 @@ use crate::common::environment::TestEnvironment;
use crate::common::environment::with_test_environment;
use crate::common::scopes::ScopeTest;
use ariadne::ids::base62_impl::parse_base62;
use labrinth::models::ids::ProjectId;
use labrinth::models::pats::Scopes;
use labrinth::models::projects::ProjectId;
// Project version creation scopes
#[actix_rt::test]

View File

@@ -1,17 +1,16 @@
use crate::assert_status;
use crate::common::api_common::{ApiProject, ApiVersion};
use crate::common::api_v2::ApiV2;
use actix_http::StatusCode;
use actix_web::test;
use futures::StreamExt;
use labrinth::models::projects::VersionId;
use labrinth::models::ids::VersionId;
use labrinth::{
models::projects::{Loader, VersionStatus, VersionType},
routes::v2::version_file::FileUpdateData,
};
use serde_json::json;
use crate::assert_status;
use crate::common::api_common::{ApiProject, ApiVersion};
use crate::common::api_v2::ApiV2;
use crate::common::api_v2::request_data::get_public_project_creation_data;
use crate::common::dummy_data::{DummyProjectAlpha, DummyProjectBeta};
use crate::common::environment::{TestEnvironment, with_test_environment};

View File

@@ -15,8 +15,9 @@ use common::database::USER_USER_PAT;
use common::environment::{with_test_environment, with_test_environment_all};
use futures::StreamExt;
use labrinth::database::models::version_item::VERSIONS_NAMESPACE;
use labrinth::models::ids::VersionId;
use labrinth::models::projects::{
Dependency, DependencyType, VersionId, VersionStatus, VersionType,
Dependency, DependencyType, VersionStatus, VersionType,
};
use labrinth::routes::v3::version_file::FileUpdateData;
use serde_json::json;