33import secrets
44from collections import Counter
55from datetime import datetime as dt , timedelta as td , timezone as tz
6+ from typing import Literal
67
78from fastapi import HTTPException
89from pydantic import ValidationError
@@ -559,22 +560,24 @@ async def get_expired_users(
559560 expired_after : dt = None ,
560561 expired_before : dt = None ,
561562 admin_username : str = None ,
563+ target : Literal ["expired" , "limited" ] = "expired" ,
562564 ) -> list [str ]:
563565 """
564566 Get users who have expired within the specified date range.
565567
568+ - **target**: `expired` (time-based) or `limited` (usage-based).
566569 - **expired_after** UTC datetime (optional)
567570 - **expired_before** UTC datetime (optional)
568- - At least one of expired_after or expired_before must be provided for filtering
569- - If both are omitted, returns all expired users
571+ - Date range filters are applied only when target is `expired`.
572+ - If both dates are omitted, returns all users matching target.
570573 """
571574
572575 expired_after , expired_before = await self .validate_dates (expired_after , expired_before , False )
573576 if admin_username :
574577 admin_id = (await self .get_validated_admin (db , admin_username )).id
575578 else :
576579 admin_id = None
577- users = await get_expired_users (db , expired_after , expired_before , admin_id )
580+ users = await get_expired_users (db , expired_after , expired_before , admin_id , target = target )
578581 return [row .username for row in users ]
579582
580583 async def delete_expired_users (
@@ -584,13 +587,15 @@ async def delete_expired_users(
584587 expired_after : dt | None = None ,
585588 expired_before : dt | None = None ,
586589 admin_username : str = None ,
590+ target : Literal ["expired" , "limited" ] = "expired" ,
587591 ) -> RemoveUsersResponse :
588592 """
589593 Delete users who have expired within the specified date range.
590594
595+ - **target**: `expired` (time-based) or `limited` (usage-based).
591596 - **expired_after** UTC datetime (optional)
592597 - **expired_before** UTC datetime (optional)
593- - At least one of expired_after or expired_before must be provided
598+ - Date range filters are applied only when target is `expired`.
594599 """
595600
596601 expired_after , expired_before = await self .validate_dates (expired_after , expired_before , False )
@@ -599,7 +604,7 @@ async def delete_expired_users(
599604 admin_id = (await self .get_validated_admin (db , admin_username )).id
600605 else :
601606 admin_id = None
602- users = await get_expired_users (db , expired_after , expired_before , admin_id )
607+ users = await get_expired_users (db , expired_after , expired_before , admin_id , target = target )
603608 await remove_users (db , users )
604609
605610 username_list = [row .username for row in users ]
0 commit comments