Coverage for api/endpoints/int1c.py: 35%
39 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 Any
3from fastapi import APIRouter, Depends
4from handlers.authorization.by_api_key import check_access
5from handlers.int1c import apply_processing_results, on_get_updates
6from mongodb import clients_col, dbg_1c_col
7from pymongo.results import UpdateResult
8from sotrans_models.models.misc.client import ClientCreateModel, ClientDBModel
9from sotrans_models.models.updates1c import (
10 Processing1CResult,
11 Update1CModel,
12 UpdateStatus,
13)
14from sotrans_models.utils.text_mappers import get_clients_text_search
16integration_router = APIRouter(
17 prefix="/1c", dependencies=[Depends(check_access)], tags=["1c"]
18)
21@integration_router.post("/clients")
22async def clients_1c(clients: list[ClientCreateModel]):
23 clients_data: list[ClientDBModel] = []
24 for client in clients:
25 client.responsible = None
26 client.subsidiary = None
27 if client.short_name is None:
28 client.short_name = client.name
29 cd = ClientDBModel(**client.model_dump())
30 cd.text_search = get_clients_text_search(cd)
31 clients_data.append(cd)
32 for cm in clients_data:
33 update_res: UpdateResult = await clients_col.collection.update_one(
34 {ClientDBModel.inn: cm.inn, ClientDBModel.kpp: cm.kpp},
35 {"$set": cm.model_dump(exclude_none=True)},
36 upsert=True,
37 )
38 if update_res.modified_count == 0:
39 await clients_col.update_by_id(
40 update_res.upserted_id, {"id": update_res.upserted_id}
41 )
44@integration_router.post("/vehicles")
45async def make_vehicles(vehicles_data: list[dict[str, Any]]):
46 # log_warning(str(vehicles_data))
47 # await write_1c_to_file(vehicles_data, "vehicles")
48 await dbg_1c_col.create({"type": "vehicles", "data": vehicles_data})
49 for _ in vehicles_data:
50 ...
53@integration_router.post("/drivers")
54async def make_drivers(drivers_data: list[dict[str, Any]]):
55 await dbg_1c_col.create({"type": "drivers", "data": drivers_data})
56 for _ in drivers_data:
57 ...
60async def get_events(
61 status_1c: UpdateStatus | None = None,
62) -> list[Update1CModel]:
63 return await on_get_updates(status_1c)
66async def updates_statuses(updated: list[Processing1CResult]):
67 await apply_processing_results(updated)