This commit refactors the project to use a shared Prisma schema and restricts direct database access to the API service. Key changes: - Created a new shared package `core/prisma` containing the Prisma schema, generated client, and types. - Configured the monorepo to use NPM workspaces, including `core/prisma` and all services. - Updated all services (`api`, `ui`, `mcp`, `agent`, and the background processing service) to depend on `@empresa/prisma-schema`. - The API service now imports `PrismaClient` from `@empresa/prisma-schema/client`. - Other services import only types from `@empresa/prisma-schema`. - Removed redundant Prisma configurations from `api` and the background processing service. - Updated the background processing service's `sync-empleados.js` to fetch data via an API call instead of direct database access. - Updated TypeScript configurations (`tsconfig.base.json` and service-specific ones) to support the new structure and path aliases. - Updated `README.md` to reflect the new architecture and added convenience scripts for Prisma operations. This change promotes a single source of truth for data models, reduces code duplication, and improves the overall architecture by centralizing database operations within the API service.
89 lines
2.6 KiB
Plaintext
89 lines
2.6 KiB
Plaintext
generator client {
|
|
provider = "prisma-client-js"
|
|
output = "./generated/client"
|
|
}
|
|
|
|
datasource db {
|
|
provider = "postgresql"
|
|
url = env("DATABASE_URL")
|
|
}
|
|
|
|
model Cliente {
|
|
id BigInt @id @default(autoincrement())
|
|
created_at DateTime @default(dbgenerated("(now() AT TIME ZONE 'utc')"))
|
|
updated_at DateTime @default(dbgenerated("(now() AT TIME ZONE 'utc')")) @updatedAt
|
|
name String
|
|
cedula BigInt @unique
|
|
ubicacion String @default(".")
|
|
grupo_estudio String?
|
|
empleado Boolean @default(false)
|
|
avatar_url String?
|
|
telefono String?
|
|
idciat String?
|
|
|
|
asistencias Asistencia[]
|
|
tareasRealizadas TareaRealizada[]
|
|
planillas Planilla[]
|
|
}
|
|
|
|
model Planilla {
|
|
id BigInt @id @default(autoincrement())
|
|
created_at DateTime @default(dbgenerated("(now() AT TIME ZONE 'utc')"))
|
|
updated_at DateTime @default(dbgenerated("(now() AT TIME ZONE 'utc')")) @updatedAt
|
|
fecha_desde DateTime
|
|
fecha_hasta DateTime
|
|
titulo String
|
|
total Decimal?
|
|
estado String @default("pagado")
|
|
fecha_anulado DateTime?
|
|
|
|
tareasRealizadas TareaRealizada[]
|
|
|
|
empleado_id BigInt
|
|
empleado Cliente @relation(fields: [empleado_id], references: [id])
|
|
|
|
|
|
creador_id String? @default(uuid()) @db.Uuid
|
|
anulador_id String? @db.Uuid
|
|
}
|
|
|
|
model TareaRealizada {
|
|
id BigInt @id @default(autoincrement())
|
|
titulo String
|
|
precio Float?
|
|
estado String @default("pendiente")
|
|
observacion String?
|
|
fecha DateTime
|
|
created_at DateTime @default(dbgenerated("(now() AT TIME ZONE 'utc')"))
|
|
tipo String @default("")
|
|
fecha_anulado DateTime?
|
|
|
|
planilla_id BigInt?
|
|
planilla Planilla? @relation(fields: [planilla_id], references: [id])
|
|
|
|
empleado_id BigInt
|
|
empleado Cliente @relation(fields: [empleado_id], references: [id])
|
|
|
|
creador_id String @default(uuid()) @db.Uuid
|
|
anulador_id String? @db.Uuid
|
|
}
|
|
|
|
model Asistencia {
|
|
id BigInt @id @default(autoincrement())
|
|
created_at DateTime @default(dbgenerated("(now() AT TIME ZONE 'utc')"))
|
|
updated_at DateTime @default(dbgenerated("(now() AT TIME ZONE 'utc')")) @updatedAt
|
|
entrada DateTime? @default(dbgenerated("(now() AT TIME ZONE 'utc')"))
|
|
salida DateTime?
|
|
historial Json?
|
|
observacion String?
|
|
estado String? @default("pendiente")
|
|
fecha_anulado DateTime?
|
|
|
|
empleado_id BigInt
|
|
empleado Cliente @relation(fields: [empleado_id], references: [id])
|
|
|
|
creador_id String @default(uuid()) @db.Uuid
|
|
modificado_id String? @db.Uuid
|
|
anulador_id String? @db.Uuid
|
|
}
|