| import { type Client } from "@libsql/client"; |
|
|
| |
| |
| |
| |
| |
|
|
| export interface UserRecord { |
| id: string; |
| name: string | null; |
| email: string; |
| image: string | null; |
| github_username: string | null; |
| created_at?: string; |
| } |
|
|
| export interface SessionRecord { |
| id: string; |
| sessionToken: string; |
| userId: string; |
| expires: string; |
| } |
|
|
| export interface VerificationTokenRecord { |
| identifier: string; |
| token: string; |
| expires: string; |
| } |
|
|
| export interface WorkspaceRecord { |
| id: string; |
| user_id: string; |
| project_name: string; |
| container_id: string | null; |
| android_container_id: string | null; |
| status: string | null; |
| port_mapping: number | null; |
| android_port: number | null; |
| created_at?: string; |
| } |
|
|
| export const rawSchema = ` |
| CREATE TABLE IF NOT EXISTS users ( |
| id TEXT PRIMARY KEY, |
| name TEXT, |
| email TEXT UNIQUE, |
| image TEXT, |
| github_username TEXT, |
| created_at DATETIME DEFAULT CURRENT_TIMESTAMP |
| ); |
| |
| CREATE TABLE IF NOT EXISTS accounts ( |
| id TEXT PRIMARY KEY, |
| userId TEXT NOT NULL, |
| provider TEXT NOT NULL, |
| providerAccountId TEXT NOT NULL, |
| refresh_token TEXT, |
| access_token TEXT, |
| expires_at INTEGER, |
| token_type TEXT, |
| scope TEXT, |
| id_token TEXT, |
| session_state TEXT, |
| FOREIGN KEY (userId) REFERENCES users(id) ON DELETE CASCADE |
| ); |
| |
| CREATE TABLE IF NOT EXISTS workspaces ( |
| id TEXT PRIMARY KEY, |
| user_id TEXT NOT NULL, |
| project_name TEXT NOT NULL, |
| container_id TEXT, |
| android_container_id TEXT, |
| status TEXT DEFAULT 'stopped', |
| port_mapping INTEGER, |
| android_port INTEGER, |
| created_at DATETIME DEFAULT CURRENT_TIMESTAMP, |
| FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE |
| ); |
| |
| CREATE TABLE IF NOT EXISTS chat_history ( |
| id TEXT PRIMARY KEY, |
| user_id TEXT NOT NULL, |
| workspace_id TEXT NOT NULL, |
| role TEXT NOT NULL, |
| content TEXT NOT NULL, |
| tool_invocations TEXT, |
| created_at DATETIME DEFAULT CURRENT_TIMESTAMP, |
| FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE, |
| FOREIGN KEY (workspace_id) REFERENCES workspaces(id) ON DELETE CASCADE |
| ); |
| CREATE TABLE IF NOT EXISTS communities ( |
| id TEXT PRIMARY KEY, |
| name TEXT NOT NULL UNIQUE, |
| description TEXT, |
| owner_id TEXT NOT NULL, |
| created_at DATETIME DEFAULT CURRENT_TIMESTAMP, |
| FOREIGN KEY (owner_id) REFERENCES users(id) ON DELETE CASCADE |
| ); |
| |
| CREATE TABLE IF NOT EXISTS sessions ( |
| id TEXT PRIMARY KEY, |
| sessionToken TEXT UNIQUE NOT NULL, |
| userId TEXT NOT NULL, |
| expires DATETIME NOT NULL, |
| FOREIGN KEY (userId) REFERENCES users(id) ON DELETE CASCADE |
| ); |
| |
| CREATE TABLE IF NOT EXISTS verification_tokens ( |
| identifier TEXT NOT NULL, |
| token TEXT NOT NULL, |
| expires DATETIME NOT NULL, |
| PRIMARY KEY (identifier, token) |
| ); |
| `; |
|
|
| |
| |
| |
| |
| export async function initDb(client: Client): Promise<void> { |
| |
| await client.executeMultiple(rawSchema); |
|
|
| |
| if (process.env.NODE_ENV === "development" || process.env.NEXT_PUBLIC_NODE_ENV === "development") { |
| try { |
| await client.execute({ |
| sql: "INSERT OR IGNORE INTO users (id, name, email, image) VALUES (?, ?, ?, ?)", |
| args: ["dev-user-id", "Developer Guest", "dev@codeverse.local", "https://github.com/identicons/dev.png"] |
| }); |
| console.log("[SYSTEM] Dev Seeding: 'Developer Guest' user ready."); |
| } catch (e: unknown) { |
| console.error("[SYSTEM] Dev Seeding failed:", e); |
| } |
| } |
| } |
|
|