// 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])
  timestampMilli  BigInt
  contents        String
  commit          String?
  serviceName     String
  workerId        String
  runId           String
}