from datetime import datetime, timedelta from typing import Dict, List, Optional from server.db.models.messages import Event from server.utils.private import generate_filter_or_in async def delete_events( app_slug: str, id_list: Optional[List[int]], event_id_list: Optional[List[int]], external_id_list: Optional[List[str]], code_list: Optional[List[str]], days_count: Optional[int], limit: Optional[int], ) -> Dict[str, List[int]]: """Delete events. Args: app_slug: App code. id_list: Event table ID list. event_id_list: Event ID list. external_id_list: External ID list. code_list: Code list. days_count: Events created before days count from now. limit: Delete not more than limit records. Returns: Event table name to removed ID list map. """ filter_list = [Event.app_slug == app_slug] id_filter = generate_filter_or_in(Event, id=id_list, event_id=event_id_list, external_id=external_id_list) if id_filter is not None: filter_list.append(id_filter) if code_list: filter_list.append(Event.code.in_(code_list)) if days_count: filter_list.append(Event.created_at <= (datetime.utcnow() - timedelta(days=days_count))) result = await Event.delete(filters=filter_list, return_source=Event.id, return_single_column=True, limit=limit) return {Event.__tablename__: result}