Coverage for api/endpoints/orders/appointment.py: 81%
31 statements
« prev ^ index » next coverage.py v7.6.2, created at 2024-10-10 03:02 +0300
« prev ^ index » next coverage.py v7.6.2, created at 2024-10-10 03:02 +0300
1from typing import Annotated
3from fastapi import APIRouter
4from fastapi.params import Depends
5from handlers.authorization.company_employee_access import (
6 assigned_subsidiary_or_logistician_for_order_query,
7)
8from handlers.grabbers.orders import orders_data_grabber
9from handlers.orders.to_appointment import (
10 on_appointment_to_exchange,
11 on_get_whole_appointment,
12 on_put_appointment_to_buffer,
13 on_put_to_trash,
14)
15from keycloak import idp
16from sotrans_models.models._mongo import PydanticObjectIdPath
17from sotrans_models.models.orders.order import OrderDBModel, OrderUpdateModel
18from sotrans_models.models.responses import (
19 ErrorRepr,
20 GenericGetListResponse,
21 MultiselectError,
22)
23from sotrans_models.models.roles import SotransRole
24from sotrans_models.models.users import SotransOIDCUserModel
25from utils.data_grabber import BaseGetListQueryParams, BaseGetOneQueryParams
26from utils.helper import multiexec
28appointment_router = APIRouter(
29 prefix="/appointment-orders", tags=["orders", "appointment"]
30)
33@appointment_router.put(
34 "/{order_ids}/to-trash",
35 responses={404: {"model": ErrorRepr}},
36)
37async def move_appointed_to_trash(
38 order_ids: str,
39 user: Annotated[
40 SotransOIDCUserModel,
41 Depends(
42 idp.get_current_user(
43 required_role_names=[SotransRole.company_logistician]
44 )
45 ),
46 ],
47) -> MultiselectError:
48 return await multiexec(order_ids, on_put_to_trash, user)
51@appointment_router.put(
52 "/{order_ids}/to-buffer", responses={404: {"model": ErrorRepr}}
53)
54async def appointment_to_buffer(
55 order_ids: str,
56 user: Annotated[
57 SotransOIDCUserModel,
58 Depends(
59 idp.get_current_user(
60 required_role_names=[SotransRole.company_logistician]
61 )
62 ),
63 ],
64 order: OrderUpdateModel | None = None,
65) -> MultiselectError:
66 return await multiexec(
67 order_ids, on_put_appointment_to_buffer, user, order
68 )
71@appointment_router.put("/{order_ids}/to-exchange")
72async def appointment_to_exchange(
73 order_ids: str,
74 user: Annotated[
75 SotransOIDCUserModel,
76 Depends(
77 idp.get_current_user(
78 required_role_names=[SotransRole.company_logistician]
79 )
80 ),
81 ],
82 order: OrderUpdateModel,
83) -> MultiselectError:
84 """Accepts start_price(required) and assigned. Must be finished with auction_end_time"""
85 return await multiexec(order_ids, on_appointment_to_exchange, user, order)
88@appointment_router.get("")
89async def get_appointment(
90 user: Annotated[
91 SotransOIDCUserModel,
92 Depends(
93 idp.get_current_user(
94 required_role_names=[SotransRole.company_logistician]
95 )
96 ),
97 ],
98 params: BaseGetListQueryParams = Depends(),
99) -> GenericGetListResponse[OrderDBModel]:
100 return await on_get_whole_appointment(user, params)
103@appointment_router.get("/{order_id}", responses={404: {"model": ErrorRepr}})
104async def get_appointment_by_id(
105 order_id: PydanticObjectIdPath,
106 user: Annotated[
107 SotransOIDCUserModel,
108 Depends(
109 idp.get_current_user(
110 required_role_names=[SotransRole.company_logistician]
111 )
112 ),
113 ],
114 params: BaseGetOneQueryParams = Depends(),
115) -> OrderDBModel:
116 restriction_q = assigned_subsidiary_or_logistician_for_order_query(user)
117 return await orders_data_grabber.get_one_by_id_with_pattern(
118 order_id, params, restriction_q
119 )