Skip to content

Commit

Permalink
update dtos
Browse files Browse the repository at this point in the history
  • Loading branch information
dmkjfs committed Oct 25, 2024
1 parent 6206ac7 commit a8d9321
Show file tree
Hide file tree
Showing 12 changed files with 254 additions and 115 deletions.
1 change: 1 addition & 0 deletions docker-compose.dev.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ services:
context: .
dockerfile: Dockerfile
container_name: app
restart: always
depends_on:
db:
condition: service_healthy
Expand Down
2 changes: 1 addition & 1 deletion src/api/v1/utils/auth.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
from src.api.v1.exceptions import UnauthorizedException
from src.api.v1.schemas.auth import User
from src.core.config import settings
from src.dtos.database.auth import User as _User
from src.dtos.database.auth import UserResponseDTO as _User
from src.services.auth import UsersService, get_users_service

password_context = CryptContext(schemes=["bcrypt"], deprecated="auto")
Expand Down
68 changes: 33 additions & 35 deletions src/dtos/database/albums.py
Original file line number Diff line number Diff line change
@@ -1,61 +1,59 @@
from datetime import datetime
from typing import Literal
from datetime import datetime, date

from src.dtos.database.auth import Artist
from src.dtos.database.base import BaseResponseDTO, BaseRequestDTO, BaseDTO
from src.dtos.database.tags import Tag
from src.enums.type import Type


class Album(BaseDTO):
class AlbumResponseDTO(BaseDTO):
id: int
name: str
title: str
picture_url: str | None = None
description: str | None = None
co_prod: str | None = None
type: Literal[Type.album] = Type.album
created_at: datetime
type: str

created_at: date
updated_at: datetime
tags: list[Tag]
artist_profiles: list[Artist]

artists: list["ArtistDTO"] = list()
tracks: list["TrackDTO"] = list()
tags: list[str] = list()


class CreateAlbumRequestDTO(BaseRequestDTO):
id: int
name: str
title: str
picture_url: str | None = None
description: str | None = None
co_prod: str | None = None
prod_by: str | None = None
type: Literal[Type.album] = Type.album
created_at: datetime
updated_at: datetime
tags: list[Tag]
artist_profiles: list[Artist]

artists: list["ArtistDTO"] = list()
tracks: list["TrackDTO"] = list()
tags: list[str] = list()


class UpdateAlbumRequestDTO(BaseRequestDTO):
id: int
name: str | None = None
title: str | None = None
picture_url: str | None = None
description: str | None = None
co_prod: str | None = None
type: Literal[Type.album] = Type.album
user_id: int
type: str | None = None

artists: list["ArtistDTO"] | None = None
tracks: list["TrackDTO"] | None = None
tags: list["TagDTO"] | None = None

class AlbumResponseDTO(BaseResponseDTO):

class AlbumItemResponseDTO(BaseResponseDTO):
id: int
name: str
picture_url: str
description: str
co_prod: str
type: Literal[Type.album] = Type.album
user_id: int
created_at: datetime
title: str
picture_url: str | None = None
description: str | None = None
type: str

created_at: date
updated_at: datetime
is_available: bool

artists: list["ArtistDTO"] = list()
tracks: list["TrackDTO"] = list()
tags: list["TagDTO"] = list()


class AlbumsResponseDTO(BaseResponseDTO):
albums: list[AlbumResponseDTO]
albums: list[AlbumItemResponseDTO]
178 changes: 147 additions & 31 deletions src/dtos/database/auth.py
Original file line number Diff line number Diff line change
@@ -1,37 +1,60 @@
from datetime import datetime
from datetime import datetime, date

from pydantic import EmailStr

from src.dtos.database.base import BaseRequestDTO, BaseResponseDTO, BaseDTO
from src.enums.auth import Role, AccessLevel
from src.enums.auth import AccessLevel, PremiumLevel


class User(BaseDTO):
class UserResponseDTO(BaseResponseDTO):
id: int
username: str
description: str | None = None
email: EmailStr
password: str
picture_url: str
roles: list[Role]
created_at: datetime
picture_url: str | None = None
access_level: AccessLevel = AccessLevel.user
telegram_id: int | None = None
premium_level: PremiumLevel = PremiumLevel.none

is_active: bool
is_adult: bool
is_verified: bool

created_at: date
updated_at: datetime

comments: list["CommentDTO"] = list()
messages: list["MessageDTO"] = list()
licenses: list["LicenseDTO"] = list()
followed_artists: list["ArtistDTO"] = list()
saved_playlists: list["PlaylistDTO"] = list()
followed_producers: list["ProducerDTO"] = list()
followed_albums: list["AlbumDTO"] = list()
followed_tags: list[str] = list()

class UserResponseDTO(BaseResponseDTO):

class UserItemResponseDTO(BaseResponseDTO):
id: int
username: str
description: str | None = None
email: EmailStr
password: str
picture_url: str
roles: list[Role]
created_at: datetime
picture_url: str | None = None
access_level: AccessLevel = AccessLevel.user
telegram_id: int | None = None
premium_level: PremiumLevel = PremiumLevel.none

is_active: bool
is_adult: bool
is_verified: bool

created_at: date
updated_at: datetime


class UsersResponseDTO(BaseResponseDTO):
users: list[UserResponseDTO]
users: list[UserItemResponseDTO]


class CreateUserRequestDTO(BaseRequestDTO):
Expand All @@ -40,72 +63,165 @@ class CreateUserRequestDTO(BaseRequestDTO):
email: EmailStr
password: str
picture_url: str | None = None
roles: list[Role]
tags: list[str]
created_at: datetime
updated_at: datetime
access_level: AccessLevel = AccessLevel.user
telegram_id: int | None = None
premium_level: PremiumLevel = PremiumLevel.none

is_active: bool
is_adult: bool
is_verified: bool


class UpdateUserRequestDTO(BaseRequestDTO):
id: int
username: str | None = None
picture_url: str | None = None
description: str | None = None
artist_profile_id: int | None = None
producer_profile_id: int | None = None
email: EmailStr | None = None
password: str | None = None
picture_url: str | None = None
access_level: AccessLevel | None = None
telegram_id: int | None = None
premium_level: PremiumLevel | None = None

is_active: bool | None = None
is_adult: bool | None = None
is_verified: bool | None = None

created_at: date | None = None
updated_at: datetime | None = None

comments: list["CommentDTO"] | None = None
messages: list["MessageDTO"] | None = None
licenses: list["LicenseDTO"] | None = None
followed_artists: list["ArtistDTO"] | None = None
saved_playlists: list["PlaylistDTO"] | None = None
followed_producers: list["ProducerDTO"] | None = None
followed_albums: list["AlbumDTO"] | None = None
followed_tags: list[str] | None = None

class Artist(BaseDTO):

class ArtistResponseDTO(BaseResponseDTO):
id: int
user: UserResponseDTO
username: str
followers: list["UserDTO"] = list()
tracks: list["TrackDTO"] = list()
albums: list["AlbumDTO"] = list()
tags: list[str] = list()
user_id: int
description: str | None = None
picture_url: str | None = None


class ArtistResponseDTO(BaseResponseDTO):
class ArtistItemResponseDTO(BaseResponseDTO):
id: int
user: UserResponseDTO
username: str
user_id: int
description: str | None = None
picture_url: str | None = None
tags: list[str] = list()


class ArtistsResponseDTO(BaseResponseDTO):
artists: list[ArtistResponseDTO]
artists: list[ArtistItemResponseDTO]


class CreateArtistRequestDTO(BaseRequestDTO):
username: str
followers: list["UserDTO"]
tracks: list["TrackDTO"]
albums: list["AlbumDTO"]
tags: list[str]
user_id: int
description: str | None = None
is_available: bool = False
picture_url: str | None = None


class UpdateArtistRequestDTO(BaseRequestDTO):
id: int
username: str | None = None
followers: list["UserDTO"] | None = None
tracks: list["TrackDTO"] | None = None
albums: list["AlbumDTO"] | None = None
tags: list[str] | None = None
user_id: int | None = None
description: str | None = None
is_available: bool = False
picture_url: str | None = None


class Producer(BaseDTO):
class ProducerResponseDTO(BaseResponseDTO):
id: int
user: UserResponseDTO
followers: list["UserDTO"]
beats: list["BeatDTO"]
sqauds: list["SquadDTO"]
tags: list[str]
beatpacks: list["BeatpackDTO"]
soundkits: list["SoundkitDTO"]
user_id: int
description: str | None = None
picture_url: str | None = None


class ProducerResponseDTO(BaseResponseDTO):
class ProducerItemResponseDTO(BaseResponseDTO):
id: int
user: UserResponseDTO
description: str | None = None
picture_url: str | None = None
user_id: int
tags: list[str]


class ProducersResponseDTO(BaseResponseDTO):
producers: list[ProducerResponseDTO]


class CreateProducerRequestDTO(BaseRequestDTO):
followers: list["UserDTO"] = list()
beats: list["BeatDTO"] = list()
sqauds: list["SquadDTO"] = list()
tags: list[str] = list()
beatpacks: list["BeatpackDTO"] = list()
soundkits: list["SoundkitDTO"] = list()
user_id: int
description: str | None = None
is_available: bool = False
picture_url: str | None = None


class UpdateProducerRequestDTO(BaseRequestDTO):
id: int
followers: list["UserDTO"] | None = None
beats: list["BeatDTO"] | None = None
sqauds: list["SquadDTO"] | None = None
tags: list[str] | None = None
beatpacks: list["BeatpackDTO"] | None = None
soundkits: list["SoundkitDTO"] | None = None
user_id: int | None = None
description: str | None = None
picture_url: str | None = None


class UserDTO:
id: int
username: str
description: str | None
email: EmailStr
password: str
picture_url: str | None
access_level: AccessLevel
telegram_id: int | None
premium_level: PremiumLevel

is_active: bool
is_adult: bool
is_verified: bool

created_at: date
updated_at: datetime

followed_tags: list[str]


class ArtistDTO(BaseDTO):
id: int
user_id: int
description: str | None = None
is_available: bool = False
picture_url: str | None = None
tags: list[str]
5 changes: 2 additions & 3 deletions src/dtos/database/beatpacks.py
Original file line number Diff line number Diff line change
@@ -1,19 +1,18 @@
from src.dtos.database.auth import User
from src.dtos.database.base import BaseRequestDTO, BaseResponseDTO, BaseDTO
from src.dtos.database.beats import Beat


class Beatpack(BaseDTO):
name: str
description: str | None = None
users: list[User]
users: list["UserDTO"]
beats: list[Beat]


class BeatpackResponseDTO(BaseResponseDTO):
name: str
description: str | None = None
users: list[User]
users: list["UserDTO"]
beats: list[Beat]


Expand Down
Loading

0 comments on commit a8d9321

Please sign in to comment.