import { eq, type Db, tasks } from '@mosaic/db'; export type Task = typeof tasks.$inferSelect; export type NewTask = typeof tasks.$inferInsert; export function createTasksRepo(db: Db) { return { async findAll(): Promise { return db.select().from(tasks); }, async findById(id: string): Promise { const rows = await db.select().from(tasks).where(eq(tasks.id, id)); return rows[0]; }, async findByProject(projectId: string): Promise { return db.select().from(tasks).where(eq(tasks.projectId, projectId)); }, async findByMission(missionId: string): Promise { return db.select().from(tasks).where(eq(tasks.missionId, missionId)); }, async findByStatus(status: Task['status']): Promise { return db.select().from(tasks).where(eq(tasks.status, status)); }, async create(data: NewTask): Promise { const rows = await db.insert(tasks).values(data).returning(); return rows[0]!; }, async update(id: string, data: Partial): Promise { const rows = await db .update(tasks) .set({ ...data, updatedAt: new Date() }) .where(eq(tasks.id, id)) .returning(); return rows[0]; }, async remove(id: string): Promise { const rows = await db.delete(tasks).where(eq(tasks.id, id)).returning(); return rows.length > 0; }, }; } export type TasksRepo = ReturnType;