feat: Implement person and tag management services

- Added `Person` and `Tag` models to the core library.
- Created `PersonService` and `TagService` traits with implementations for managing persons and tags.
- Introduced repositories for `Person`, `Tag`, `FaceRegion`, and `PersonShare` with PostgreSQL support.
- Updated authorization logic to include permissions for accessing and editing persons.
- Enhanced the schema to support new models and relationships.
- Implemented database migrations for new tables related to persons and tags.
- Added request and response structures for API interactions with persons and tags.
This commit is contained in:
2025-11-15 11:18:11 +01:00
parent 370d55f0b3
commit 4675285603
26 changed files with 1465 additions and 18 deletions

View File

@@ -76,4 +76,44 @@ pub struct PostgresAlbumShare {
pub album_id: uuid::Uuid,
pub user_id: uuid::Uuid,
pub permission: PostgresAlbumPermission,
}
#[derive(sqlx::FromRow)]
pub struct PostgresTag {
pub id: uuid::Uuid,
pub name: String,
}
#[derive(sqlx::FromRow)]
pub struct PostgresPerson {
pub id: uuid::Uuid,
pub owner_id: uuid::Uuid,
pub name: String,
}
#[derive(sqlx::FromRow)]
pub struct PostgresFaceRegion {
pub id: uuid::Uuid,
pub media_id: uuid::Uuid,
pub person_id: Option<uuid::Uuid>,
pub x_min: f32,
pub y_min: f32,
pub x_max: f32,
pub y_max: f32,
}
#[derive(Debug, Clone, Copy, sqlx::Type, PartialEq, Eq, Deserialize)]
#[sqlx(rename_all = "lowercase")]
#[sqlx(type_name = "person_permission")]
pub enum PostgresPersonPermission {
View,
CanUse,
}
#[derive(sqlx::FromRow)]
pub struct PostgresPersonShared {
pub id: Uuid,
pub owner_id: Uuid,
pub name: String,
pub permission: PostgresPersonPermission,
}