- TASK-028: /api/sisters/:name/system 추가, 자매 페이지 uptime/cpu/memory/disk 실시간화 - TASK-029: /api/sisters/:name/avatar 추가, SSH avatar fetch + 5분 캐시 + SVG fallback - TASK-030: SystemSettings 모델 + /api/admin/settings GET/PUT + FE settings DB 연동/토스트 - TASK-031 일부: 대시보드/자매/설정 스켈레톤 UI + 에러 fallback - 30초 자매 상태 websocket 브로드캐스트 시작 테스트 26/26 pass, build 성공
112 lines
3.1 KiB
Plaintext
112 lines
3.1 KiB
Plaintext
// 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
|
|
}
|