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

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 

11 

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) 

22 

23 

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 )