import datetime from typing import Optional from schemas.base import OkMessageSchema, BaseSchema, PaginationInfoSchema from schemas.user import UserSchema # region Entities class BaseTransactionTagSchema(BaseSchema): name: str is_income: bool class TransactionTagSchema(BaseTransactionTagSchema): id: int class TransactionSchemaBase(BaseSchema): id: int name: str comment: str amount: float created_by_user: UserSchema spent_date: datetime.date is_income: bool tags: list[TransactionTagSchema] class UpdateTransactionSchema(BaseSchema): id: Optional[int] = None name: str comment: Optional[str] = "" amount: float spent_date: datetime.date is_income: bool tags: list[str] = [] # endregion # region Requests class GetAllTransactionsRequest(BaseSchema): is_income: bool class UpdateTransactionRequest(BaseSchema): transaction: UpdateTransactionSchema class CreateTransactionTagRequest(BaseSchema): tag: BaseTransactionTagSchema class UpdateTransactionTagRequest(BaseSchema): tag: TransactionTagSchema # endregion # region Responses class GetAllTransactionsResponse(BaseSchema): transactions: list[TransactionSchemaBase] pagination_info: PaginationInfoSchema class UpdateTransactionResponse(OkMessageSchema): pass class DeleteTransactionResponse(OkMessageSchema): pass class GetTransactionTagsResponse(BaseSchema): tags: list[TransactionTagSchema] class GetAllTransactionTagsResponse(BaseSchema): tags: list[TransactionTagSchema] class CreateTransactionTagResponse(OkMessageSchema): pass class UpdateTransactionTagResponse(OkMessageSchema): pass class DeleteTransactionTagResponse(OkMessageSchema): pass # endregion