feat: типизация для tortoise ORM

This commit is contained in:
Artem Tsyrulnikov
2025-12-11 12:01:20 +03:00
parent 0f0de396e1
commit 02729ce81b
17 changed files with 181 additions and 263 deletions

View File

@@ -1,7 +1,14 @@
import enum
from typing import TYPE_CHECKING
from uuid import UUID
from tortoise import fields
from tortoise.models import Model
from .base import TimestampedModel
if TYPE_CHECKING:
from .target_channel import TargetChannel
from .user import User
class CreativeStatus(str, enum.Enum):
@@ -9,24 +16,23 @@ class CreativeStatus(str, enum.Enum):
ARCHIVED = 'archived'
class Creative(Model):
class Creative(TimestampedModel):
id = fields.UUIDField(pk=True)
name = fields.CharField(max_length=255)
text = fields.TextField()
status = fields.CharEnumField(CreativeStatus, default=CreativeStatus.ACTIVE)
placements_count = fields.IntField(default=0)
user = fields.ForeignKeyField('models.User', related_name='creatives', on_delete=fields.CASCADE, index=True)
target_channel = fields.ForeignKeyField(
user: fields.ForeignKeyRelation['User'] = fields.ForeignKeyField(
'models.User', related_name='creatives', on_delete=fields.CASCADE, index=True
)
target_channel: fields.ForeignKeyRelation['TargetChannel'] = fields.ForeignKeyField(
'models.TargetChannel', related_name='creatives', on_delete=fields.CASCADE, index=True
)
created_at = fields.DatetimeField(auto_now_add=True)
updated_at = fields.DatetimeField(auto_now=True)
deleted_at = fields.DatetimeField(null=True)
# Reverse relations:
# placements: fields.ReverseRelation['Placement']
if TYPE_CHECKING:
user_id: UUID
target_channel_id: UUID
class Meta:
table = 'creative'