Untitled

4ae4d avatar
4ae4d
plain_text
02/16/2026 11:36 AM
3.9 KB
8
Indexable
--- src/backend/app/schemas/event.py ---
from datetime import datetime
from uuid import UUID

from pydantic import BaseModel, ConfigDict, Field, constr

from .app_tag import ResponseAppTagSchema
from .base import TimestampSchema


class BaseEvent(BaseModel):
    model_config = ConfigDict(from_attributes=True)

    name: str
    description: str | None = None
    location: str | None = None
    tags: list[ResponseAppTagSchema] = Field(default_factory=list)
    bonus_code: str
    points: int
    date: datetime


class EventCreateSchema(BaseModel):
    """то, что приходит от бота при создании мероприятия"""

    model_config = ConfigDict(extra="forbid")

    name: constr[max_length=128]
    description: str | None = None
    location: constr[max_length=255] | None = None
    app_tag_ids: list[UUID] = Field(default_factory=list)
    bonus_code: constr[max_length=16]
    points: int = 0
    date: datetime
    city_id: UUID
    creator_id: UUID | None = None


class RequestEventSchema(BaseEvent):
    pass


class ResponseEventSchema(BaseEvent, TimestampSchema):
    id: UUID
    creator_id: UUID | None = (
        None  # TODO решить, оставляем ли или всегда приписываем UUID создателя
    )
    creator_name: str | None = None
    city_id: UUID


class EventSignUpSchema(BaseModel):
    event_id: UUID
    messenger_id: int


class EventSignOutSchema(BaseModel):
    participation_id: UUID


class EventCodeSchema(EventSignOutSchema):
    bonus_code: str


class EventUpdateSchema(BaseModel):
    model_config = ConfigDict(extra="forbid")

    name: constr[max_length=128] | None = None
    description: str | None = None
    location: str | None = None
    app_tag_ids: list[UUID] | None = None
    bonus_code: constr[max_length=16] | None = None
    points: int | None = None
    date: datetime | None = None
    city_id: UUID | None = None
    creator_id: UUID | None = None


class ResponseEventParticipantSchema(BaseModel):
    """один участник мероприятия"""

    model_config = ConfigDict(extra="forbid")

    participation_id: UUID
    is_claimed: bool

    user_id: UUID
    firstname: str | None = None
    messenger_id: int
    employee_number: int
    points: int

--- src/backend/app/schemas/report.py ---
from __future__ import annotations

from uuid import UUID

from pydantic import BaseModel, ConfigDict, Field, constr

from .base import TimestampSchema


class ReportCreateSchema(BaseModel):
    model_config = ConfigDict(extra="forbid")

    event_id: UUID
    requester_messenger_id: int
    how_it_went: constr[min_length=1]
    beneficiaries_count: int | None = None


class ResponseReportSchema(TimestampSchema):
    model_config = ConfigDict(from_attributes=True)

    id: UUID
    event_id: UUID
    how_it_went: str
    beneficiaries_count: int | None = None
    participants_count_snapshot: int = Field(..., ge=0)

Editor is loading...
Leave a Comment