import { Injectable } from "@nestjs/common"; import { desc, eq, lte } from "drizzle-orm"; import { DatabaseService } from "../../database/database.service"; import { reports } from "../../database/schemas"; @Injectable() export class ReportsRepository { constructor(private readonly databaseService: DatabaseService) {} async create(data: { reporterId: string; contentId?: string; tagId?: string; reason: "inappropriate" | "spam" | "copyright" | "other"; description?: string; }) { const [newReport] = await this.databaseService.db .insert(reports) .values(data) .returning(); return newReport; } async findAll(limit: number, offset: number) { return await this.databaseService.db .select() .from(reports) .orderBy(desc(reports.createdAt)) .limit(limit) .offset(offset); } async updateStatus( id: string, status: "pending" | "reviewed" | "resolved" | "dismissed", ) { return await this.databaseService.db .update(reports) .set({ status, updatedAt: new Date() }) .where(eq(reports.id, id)) .returning(); } async purgeObsolete(now: Date) { return await this.databaseService.db .delete(reports) .where(lte(reports.expiresAt, now)) .returning(); } }