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<EventLogQuery> {
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()