This commit is contained in:
Artem Tsyrulnikov
2025-11-08 16:16:04 +03:00
commit 3800c72662
36 changed files with 2136 additions and 0 deletions

5
src/domain/__init__.py Normal file
View File

@@ -0,0 +1,5 @@
__all__ = ('Base', 'User', 'UserNotFound')
from .base import Base
from .error import UserNotFound
from .user import User

21
src/domain/base.py Normal file
View File

@@ -0,0 +1,21 @@
import datetime
import uuid
from sqlalchemy import func
from sqlalchemy.orm import DeclarativeBase, Mapped, declared_attr, mapped_column
class Base(DeclarativeBase):
__abstract__ = True
# Авто имя таблиц по названию класса
@declared_attr.directive
def __tablename__(cls) -> str:
return f'{cls.__name__.lower()}s'
id: Mapped[uuid.UUID] = mapped_column(primary_key=True, default=uuid.uuid4)
created_at: Mapped[datetime.datetime] = mapped_column(server_default=func.now())
updated_at: Mapped[datetime.datetime] = mapped_column(
server_default=func.now(), onupdate=func.now()
)
deleted_at: Mapped[datetime.datetime | None]

7
src/domain/error.py Normal file
View File

@@ -0,0 +1,7 @@
import uuid
from fastapi import HTTPException, status
def UserNotFound(user_id: uuid.UUID) -> HTTPException:
return HTTPException(status.HTTP_404_NOT_FOUND, f'User {user_id} not found')

7
src/domain/user.py Normal file
View File

@@ -0,0 +1,7 @@
from sqlalchemy.orm import Mapped
from src import domain
class User(domain.Base):
name: Mapped[str]