Coverage for api/endpoints/cleanup.py: 77%
13 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 fastapi import APIRouter, Depends
2from keycloak import idp
3from mongodb import docs_col, trash_orders_col
4from sotrans_models.models.misc.document import DocumentDBModel
5from sotrans_models.models.orders.order import (
6 ExternalOrderStatus,
7 OrderDBModel,
8)
9from sotrans_models.models.roles import SotransRole
10from utils.dt_utils import get_deletion_datetime
12cleanup_router = APIRouter(
13 prefix="/cleanup",
14 dependencies=[
15 Depends(
16 idp.get_current_user(
17 required_role_names=[SotransRole.cleanup_service]
18 )
19 )
20 ],
21)
24@cleanup_router.delete(
25 "", responses={204: {"description": "No content"}}, status_code=204
26)
27async def mongo_cleanup(days: int):
28 gone_days = get_deletion_datetime(days)
29 await docs_col.collection.delete_many(
30 {DocumentDBModel.deleted_at: {"$lt": gone_days}}
31 )
32 await trash_orders_col.collection.delete_many(
33 {
34 OrderDBModel.deleted_at: {"$lt": gone_days},
35 "$or": [
36 {
37 OrderDBModel.external.status: ExternalOrderStatus.missing.value
38 },
39 {OrderDBModel.external.id: None},
40 ],
41 }
42 )