// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema

// Looking for ways to speed up your queries, or scale easily with your serverless or edge functions?
// Try Prisma Accelerate: https://pris.ly/cli/accelerate-init

generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider = "sqlite"
  url      = env("DATABASE_URL")
}

model Project {
  id              Int     @id @default(autoincrement())
  userId          String
  name            String
  state           String?
  draft           String?
  instanceId      String?
  deployKey       String?
  deployKeyPublic String?
  githubToken     String?
  access          String?
  geminiApiKey    String?
  anthropicApiKey String?
  logs            Log[]
}

model Log {
  id              Int     @id @default(autoincrement())
  projectId       Int
  project         Project @relation(fields: [projectId], references: [id], onDelete: Cascade)
  timestampMilli  BigInt
  contents        String
  commit          String?
  serviceName     String
  workerId        String
  runId           String
}