87 lines
1.4 KiB
Python
87 lines
1.4 KiB
Python
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
|