-
Notifications
You must be signed in to change notification settings - Fork 0
/
add_new_budget.py
35 lines (29 loc) · 1.28 KB
/
add_new_budget.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
from __future__ import annotations
import logging
from dataclasses import dataclass, field
from budget.models import Budget
from budget.requests.add_new_budget import BudgetRequest
from budget.responses.added_budget import AddedBudgetResponse
from budget.serializer import BudgetSerializer
from common.handlers.request_manager import RequestManager
from common.responses.bad_request_response import BadRequestResponse
from users.models import User
@dataclass
class AddNewBudgetHandler(RequestManager):
factory: type[BudgetRequest] = field(init=False, default=BudgetRequest)
request: BudgetRequest = field(init=False)
def safe_process(self) -> AddedBudgetResponse | BadRequestResponse:
return super().safe_process() # type: ignore (fix in P3.11; https://peps.python.org/pep-0673/)
def process(self) -> AddedBudgetResponse:
user: User = self.user_via_token
budget: Budget = BudgetSerializer().create(
validated_data={
"name": self.request.name,
"total_budget": self.request.total_budget,
"users": [user],
}
)
logging.info(
f"New Budget {budget.name}, with {budget.total_budget}. Created by: {user}"
)
return AddedBudgetResponse(budgets=[budget])