// This is your Prisma schema file, // learn more about it in the docs: https://pris.ly/d/prisma-schema generator client { provider = "prisma-client-js" } datasource db { provider = "mysql" } model SisterConfig { id Int @id @default(autoincrement()) name String @unique // harang, narang, darang, erang ip String user String lxcId Int sshKeyPath String? lastSeen DateTime? status String @default("unknown") // online, offline, working, unknown createdAt DateTime @default(now()) updatedAt DateTime @updatedAt activityLogs ActivityLog[] } model Project { id Int @id @default(autoincrement()) giteaId Int @unique name String repoUrl String description String? status String @default("active") // active, completed, archived createdAt DateTime @default(now()) updatedAt DateTime @updatedAt sprints Sprint[] activityLogs ActivityLog[] } model Sprint { id Int @id @default(autoincrement()) projectId Int project Project @relation(fields: [projectId], references: [id]) number Int name String status String @default("pending") // pending, in_progress, review, done, failed startedAt DateTime? completedAt DateTime? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt tasks Task[] } model Task { id Int @id @default(autoincrement()) sprintId Int sprint Sprint @relation(fields: [sprintId], references: [id]) taskId String // "TASK-001" title String assignee String // harang, narang, darang, erang status String @default("pending") // pending, in_progress, review, done, failed, blocked, escalated iteration Int @default(0) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt } model ActivityLog { id Int @id @default(autoincrement()) sisterId Int? sister SisterConfig? @relation(fields: [sisterId], references: [id]) projectId Int? project Project? @relation(fields: [projectId], references: [id]) action String detail String? @db.Text createdAt DateTime @default(now()) @@index([createdAt]) } model CostLog { id Int @id @default(autoincrement()) sisterName String // harang, narang, darang, erang model String // model name inputTokens Int @default(0) outputTokens Int @default(0) totalTokens Int @default(0) estimatedUsd Float @default(0) sessionId String? @db.VarChar(128) recordedAt DateTime @default(now()) @@index([sisterName, recordedAt]) @@index([recordedAt]) } model User { id Int @id @default(autoincrement()) username String @unique password String // bcrypt hash role String @default("viewer") createdAt DateTime @default(now()) updatedAt DateTime @updatedAt } model SystemSettings { id Int @id @default(autoincrement()) key String @unique value String @db.Text updatedAt DateTime @updatedAt }