import datetime from typing import Optional from schemas.base import OkMessageSchema, BaseSchema, PaginationInfoSchema from schemas.user import UserSchema # region Entities class BaseExpenseTagSchema(BaseSchema): name: str class ExpenseTagSchema(BaseExpenseTagSchema): id: int class ExpenseSchemaBase(BaseSchema): id: int name: str comment: str amount: float created_by_user: UserSchema spent_date: datetime.date tags: list[ExpenseTagSchema] class UpdateExpenseSchema(BaseSchema): id: Optional[int] = None name: str comment: Optional[str] = "" amount: float spent_date: datetime.date tags: list[str] = [] # endregion # region Requests class UpdateExpenseRequest(BaseSchema): expense: UpdateExpenseSchema class CreateExpenseTagRequest(BaseSchema): tag: BaseExpenseTagSchema class UpdateExpenseTagRequest(BaseSchema): tag: ExpenseTagSchema # endregion # region Responses class GetAllExpensesResponse(BaseSchema): expenses: list[ExpenseSchemaBase] pagination_info: PaginationInfoSchema class UpdateExpenseResponse(OkMessageSchema): pass class DeleteExpenseResponse(OkMessageSchema): pass class GetAllExpenseTagsResponse(BaseSchema): tags: list[ExpenseTagSchema] class CreateExpenseTagResponse(OkMessageSchema): pass class UpdateExpenseTagResponse(OkMessageSchema): pass class DeleteExpenseTagResponse(OkMessageSchema): pass # endregion