mirror of
https://github.com/snapotter-hq/SnapOtter.git
synced 2026-08-03 07:46:42 +02:00
feat: add analytics env vars, DB schema columns, instance ID generation
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
ALTER TABLE users ADD COLUMN analytics_enabled integer;
|
||||
ALTER TABLE users ADD COLUMN analytics_consent_shown_at integer;
|
||||
ALTER TABLE users ADD COLUMN analytics_consent_remind_at integer;
|
||||
@@ -64,6 +64,13 @@
|
||||
"when": 1745366600000,
|
||||
"tag": "0008_api_key_expiration",
|
||||
"breakpoints": true
|
||||
},
|
||||
{
|
||||
"idx": 9,
|
||||
"version": "6",
|
||||
"when": 1776855591000,
|
||||
"tag": "0009_analytics_consent",
|
||||
"breakpoints": true
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -13,6 +13,9 @@ export const users = sqliteTable("users", {
|
||||
updatedAt: integer("updated_at", { mode: "timestamp" })
|
||||
.notNull()
|
||||
.$defaultFn(() => new Date()),
|
||||
analyticsEnabled: integer("analytics_enabled", { mode: "boolean" }),
|
||||
analyticsConsentShownAt: integer("analytics_consent_shown_at", { mode: "timestamp" }),
|
||||
analyticsConsentRemindAt: integer("analytics_consent_remind_at", { mode: "timestamp" }),
|
||||
});
|
||||
|
||||
export const teams = sqliteTable("teams", {
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
import { randomUUID } from "node:crypto";
|
||||
import { isGpuAvailable } from "@ashim/ai";
|
||||
import { APP_VERSION } from "@ashim/shared";
|
||||
import cors from "@fastify/cors";
|
||||
import rateLimit from "@fastify/rate-limit";
|
||||
import { eq } from "drizzle-orm";
|
||||
import Fastify from "fastify";
|
||||
import { env } from "./config.js";
|
||||
import { db, schema } from "./db/index.js";
|
||||
@@ -35,6 +37,19 @@ console.log("Database initialized");
|
||||
// Create default admin user if no users exist
|
||||
await ensureDefaultAdmin();
|
||||
|
||||
function ensureInstanceId() {
|
||||
const existing = db
|
||||
.select()
|
||||
.from(schema.settings)
|
||||
.where(eq(schema.settings.key, "instance_id"))
|
||||
.get();
|
||||
if (!existing) {
|
||||
db.insert(schema.settings).values({ key: "instance_id", value: randomUUID() }).run();
|
||||
}
|
||||
}
|
||||
|
||||
ensureInstanceId();
|
||||
|
||||
// Mark any jobs left in processing/queued from a previous unclean shutdown
|
||||
recoverStaleJobs();
|
||||
|
||||
|
||||
@@ -44,6 +44,14 @@ const envSchema = z.object({
|
||||
.enum(["true", "false"])
|
||||
.default("true")
|
||||
.transform((v) => v === "true"),
|
||||
ANALYTICS_ENABLED: z
|
||||
.enum(["true", "false"])
|
||||
.default("true")
|
||||
.transform((v) => v === "true"),
|
||||
ANALYTICS_SAMPLE_RATE: z.coerce.number().min(0).max(1).default(1.0),
|
||||
POSTHOG_API_KEY: z.string().default(""),
|
||||
POSTHOG_HOST: z.string().default("https://us.i.posthog.com"),
|
||||
SENTRY_DSN: z.string().default(""),
|
||||
});
|
||||
|
||||
export type Env = z.infer<typeof envSchema>;
|
||||
|
||||
Reference in New Issue
Block a user