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

@@ -1,4 +1,3 @@
-- Create the 'albums' table
CREATE TABLE albums (
id UUID PRIMARY KEY,
owner_id UUID NOT NULL REFERENCES users (id),
@@ -9,15 +8,12 @@ CREATE TABLE albums (
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
-- Create the 'album_media' join table
-- This links media items to albums
CREATE TABLE album_media (
album_id UUID NOT NULL REFERENCES albums (id) ON DELETE CASCADE,
media_id UUID NOT NULL REFERENCES media (id) ON DELETE CASCADE,
PRIMARY KEY (album_id, media_id) -- Ensures no duplicates
PRIMARY KEY (album_id, media_id)
);
-- Indexes for faster lookups
CREATE INDEX idx_albums_owner_id ON albums (owner_id);
CREATE INDEX idx_album_media_media_id ON album_media (media_id);