{"version":3,"sources":["../../../src/adapters/prisma/repositories.ts","../../../src/adapters/prisma/mappers.ts","../../../src/adapters/prisma/client.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Repository interfaces and Prisma implementations\n */\n\nimport type { PrismaClient } from '@prisma/client';\nimport type { \n  TimeEntry, \n  Timesheet, \n  RateCard, \n  TimeCategory, \n  TimeLock,\n  AuditLog \n} from '../../core/types';\nimport type { \n  CreateTimeEntryInput, \n  UpdateTimeEntryInput, \n  TimeEntryFilter,\n  PaginationParams \n} from '../../core/schemas';\n\nexport interface TimeEntryRepository {\n  create(input: CreateTimeEntryInput): Promise<TimeEntry>;\n  update(id: string, input: UpdateTimeEntryInput): Promise<TimeEntry>;\n  delete(id: string): Promise<void>;\n  findById(id: string): Promise<TimeEntry | null>;\n  findMany(filter: TimeEntryFilter): Promise<{ data: TimeEntry[]; total: number }>;\n  findOverlapping(developerId: string, startAt: Date, endAt: Date, excludeId?: string): Promise<TimeEntry[]>;\n}\n\nexport interface TimesheetRepository {\n  generate(developerId: string, clientId: string, periodStart: Date, periodEnd: Date): Promise<Timesheet>;\n  findById(id: string): Promise<Timesheet | null>;\n  findMany(filter: PaginationParams & { developerId?: string; clientId?: string }): Promise<{ data: Timesheet[]; total: number }>;\n  submit(id: string): Promise<Timesheet>;\n  approve(id: string, approvedBy: string): Promise<Timesheet>;\n  reject(id: string, rejectedBy: string, reason: string): Promise<Timesheet>;\n}\n\nexport interface RateCardRepository {\n  create(input: Omit<RateCard, 'id' | 'createdAt' | 'updatedAt'>): Promise<RateCard>;\n  update(id: string, input: Partial<RateCard>): Promise<RateCard>;\n  findById(id: string): Promise<RateCard | null>;\n  findEffective(params: { developerId?: string; projectId?: string; clientId?: string; date: Date }): Promise<RateCard | null>;\n  findMany(filter: PaginationParams): Promise<{ data: RateCard[]; total: number }>;\n}\n\nexport interface TimeCategoryRepository {\n  create(input: Omit<TimeCategory, 'id'>): Promise<TimeCategory>;\n  update(id: string, input: Partial<TimeCategory>): Promise<TimeCategory>;\n  findById(id: string): Promise<TimeCategory | null>;\n  findAll(): Promise<TimeCategory[]>;\n}\n\nexport interface TimeLockRepository {\n  create(input: Omit<TimeLock, 'id'>): Promise<TimeLock>;\n  unlock(id: string, unlockedBy: string): Promise<TimeLock>;\n  findActive(projectId?: string, clientId?: string): Promise<TimeLock[]>;\n  checkLocked(params: { projectId?: string; clientId?: string; startAt: Date; endAt: Date }): Promise<boolean>;\n}\n\nexport interface AuditLogRepository {\n  create(input: Omit<AuditLog, 'id' | 'createdAt'>): Promise<AuditLog>;\n  findMany(filter: { entityType?: string; entityId?: string; userId?: string } & PaginationParams): Promise<{ data: AuditLog[]; total: number }>;\n}\n\n/**\n * Create repository instances with Prisma client\n */\nexport function createRepositories(prisma: PrismaClient) {\n  // Implementation placeholder - will be completed in next phase\n  return {\n    timeEntry: {} as TimeEntryRepository,\n    timesheet: {} as TimesheetRepository,\n    rateCard: {} as RateCardRepository,\n    timeCategory: {} as TimeCategoryRepository,\n    timeLock: {} as TimeLockRepository,\n    auditLog: {} as AuditLogRepository,\n  };\n}","/**\n * Mappers between Prisma models and domain types\n */\n\nimport type { TimeEntry, TimeEntryStatus } from '../../core/types';\n\n/**\n * Map Prisma TimeEntry to domain TimeEntry\n */\nexport function mapPrismaToTimeEntry(prismaEntry: any): TimeEntry {\n  return {\n    id: prismaEntry.id,\n    projectId: prismaEntry.projectId,\n    taskId: prismaEntry.taskId,\n    developerId: prismaEntry.developerId,\n    clientId: prismaEntry.clientId,\n    startAt: new Date(prismaEntry.startAt),\n    endAt: new Date(prismaEntry.endAt),\n    durationMinutes: prismaEntry.durationMinutes,\n    billable: prismaEntry.billable,\n    category: prismaEntry.category,\n    tags: prismaEntry.tags || [],\n    status: prismaEntry.status as TimeEntryStatus,\n    notes: prismaEntry.notes,\n    approvedBy: prismaEntry.approvedBy,\n    approvedAt: prismaEntry.approvedAt ? new Date(prismaEntry.approvedAt) : undefined,\n    rejectedBy: prismaEntry.rejectedBy,\n    rejectedAt: prismaEntry.rejectedAt ? new Date(prismaEntry.rejectedAt) : undefined,\n    rejectionReason: prismaEntry.rejectionReason,\n    lockedAt: prismaEntry.lockedAt ? new Date(prismaEntry.lockedAt) : undefined,\n    billedAt: prismaEntry.billedAt ? new Date(prismaEntry.billedAt) : undefined,\n    invoiceId: prismaEntry.invoiceId,\n    createdAt: new Date(prismaEntry.createdAt),\n    updatedAt: new Date(prismaEntry.updatedAt),\n  };\n}\n\n/**\n * Map domain TimeEntry to Prisma create input\n */\nexport function mapTimeEntryToPrismaCreate(entry: Partial<TimeEntry>): any {\n  return {\n    projectId: entry.projectId,\n    taskId: entry.taskId,\n    developerId: entry.developerId,\n    clientId: entry.clientId,\n    startAt: entry.startAt,\n    endAt: entry.endAt,\n    durationMinutes: entry.durationMinutes,\n    billable: entry.billable,\n    category: entry.category,\n    tags: entry.tags,\n    status: entry.status,\n    notes: entry.notes,\n  };\n}\n\n/**\n * Map domain TimeEntry to Prisma update input\n */\nexport function mapTimeEntryToPrismaUpdate(entry: Partial<TimeEntry>): any {\n  const update: any = {};\n  \n  if (entry.startAt !== undefined) update.startAt = entry.startAt;\n  if (entry.endAt !== undefined) update.endAt = entry.endAt;\n  if (entry.durationMinutes !== undefined) update.durationMinutes = entry.durationMinutes;\n  if (entry.billable !== undefined) update.billable = entry.billable;\n  if (entry.category !== undefined) update.category = entry.category;\n  if (entry.tags !== undefined) update.tags = entry.tags;\n  if (entry.status !== undefined) update.status = entry.status;\n  if (entry.notes !== undefined) update.notes = entry.notes;\n  if (entry.approvedBy !== undefined) update.approvedBy = entry.approvedBy;\n  if (entry.approvedAt !== undefined) update.approvedAt = entry.approvedAt;\n  if (entry.rejectedBy !== undefined) update.rejectedBy = entry.rejectedBy;\n  if (entry.rejectedAt !== undefined) update.rejectedAt = entry.rejectedAt;\n  if (entry.rejectionReason !== undefined) update.rejectionReason = entry.rejectionReason;\n  if (entry.lockedAt !== undefined) update.lockedAt = entry.lockedAt;\n  if (entry.billedAt !== undefined) update.billedAt = entry.billedAt;\n  if (entry.invoiceId !== undefined) update.invoiceId = entry.invoiceId;\n  \n  return update;\n}","/**\n * Prisma client configuration for Time Log\n */\n\nimport type { PrismaClient } from '@prisma/client';\n\nexport interface TimeLogPrismaConfig {\n  prisma: PrismaClient;\n}\n\n/**\n * Create a configured Prisma client instance for Time Log\n */\nexport function createTimeLogPrismaClient(config: TimeLogPrismaConfig): PrismaClient {\n  return config.prisma;\n}"]}