import { db } from "@/database/db"; import { eventsLog } from "@/database/schema"; import { and, asc, gt, gte, lte } from "drizzle-orm"; import { EventLogQuery, EventsLog, FilterEvents } from "../domain/models"; const removeHourToDate = (date: Date | string) => { const formattedDate = new Date(date); formattedDate.setHours(0, 0, 0); return formattedDate; }; class EventLogsRepositoryImpl { async getAll(filter:FilterEvents):Promise { const limit = filter?.limit || 20 const data = await db.query.eventsLog.findMany({ limit, where: and( filter?.startDate ? gte(eventsLog.createdAt, removeHourToDate(filter?.startDate)) : undefined, filter?.endDate ? lte(eventsLog.createdAt, removeHourToDate(filter?.endDate)) : undefined, filter?.cursor ? gt(eventsLog.id, filter?.cursor as any) : undefined ), columns: { id: true, eventType: true, modifiedItem: true, createdAt: true, description:true }, with: { user: { columns: { id: true, firstName: true, }, }, }, orderBy: asc(eventsLog.createdAt), }); const nextCursor = data?.length >= limit ? data?.pop()?.id : undefined; return { data: data as EventsLog[], cursor: nextCursor, }; } } export const defaultEventLogRepository= new EventLogsRepositoryImpl()