feat: getting the db ready

This commit is contained in:
2026-03-18 00:14:36 +01:00
parent 9703fa77e2
commit 3be2034a49
12 changed files with 1122 additions and 89 deletions

1
.env.example Normal file
View File

@@ -0,0 +1 @@
DATABASE_URL=sqlite.db

3
.gitignore vendored
View File

@@ -13,6 +13,9 @@ node_modules
logs logs
*.log *.log
# Database
*.db
# Misc # Misc
.DS_Store .DS_Store
.fleet .fleet

11
drizzle.config.ts Normal file
View File

@@ -0,0 +1,11 @@
import { defineConfig } from 'drizzle-kit'
import { env } from './server/env'
export default defineConfig({
schema: './server/db/schema.ts',
out: './server/db/migrations',
dialect: 'sqlite',
dbCredentials: {
url: env.DATABASE_URL,
},
})

View File

@@ -8,15 +8,25 @@
"preview": "nuxt preview", "preview": "nuxt preview",
"postinstall": "nuxt prepare", "postinstall": "nuxt prepare",
"lint": "eslint .", "lint": "eslint .",
"typecheck": "nuxt typecheck" "typecheck": "nuxt typecheck",
"db:push": "drizzle-kit push",
"db:generate": "drizzle-kit generate",
"db:migrate": "drizzle-kit migrate",
"db:studio": "drizzle-kit studio"
}, },
"dependencies": { "dependencies": {
"@nuxt/ui": "^4.5.1", "@nuxt/ui": "^4.5.1",
"better-sqlite3": "^12.8.0",
"dotenv": "^17.3.1",
"drizzle-orm": "^0.45.1",
"nuxt": "^4.4.2", "nuxt": "^4.4.2",
"tailwindcss": "^4.2.1" "tailwindcss": "^4.2.1",
"zod": "^4.3.6"
}, },
"devDependencies": { "devDependencies": {
"@nuxt/eslint": "^1.15.2", "@nuxt/eslint": "^1.15.2",
"@types/better-sqlite3": "^7.6.13",
"drizzle-kit": "^0.31.10",
"eslint": "^10.0.3", "eslint": "^10.0.3",
"typescript": "^5.9.3", "typescript": "^5.9.3",
"vue-tsc": "^3.2.5" "vue-tsc": "^3.2.5"

1056
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@@ -4,3 +4,5 @@ ignoredBuiltDependencies:
- esbuild - esbuild
- unrs-resolver - unrs-resolver
- vue-demi - vue-demi
onlyBuiltDependencies:
- better-sqlite3

7
server/db/index.ts Normal file
View File

@@ -0,0 +1,7 @@
import Database from 'better-sqlite3'
import { drizzle } from 'drizzle-orm/better-sqlite3'
import * as schema from './schema'
import { env } from '../env'
const sqlite = new Database(env.DATABASE_URL)
export const db = drizzle(sqlite, { schema })

View File

@@ -0,0 +1,10 @@
CREATE TABLE `links` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`name` text NOT NULL,
`path` text NOT NULL,
`url` text NOT NULL
);
--> statement-breakpoint
CREATE UNIQUE INDEX `links_name_unique` ON `links` (`name`);--> statement-breakpoint
CREATE UNIQUE INDEX `links_path_unique` ON `links` (`path`);--> statement-breakpoint
CREATE UNIQUE INDEX `links_url_unique` ON `links` (`url`);

View File

@@ -0,0 +1,78 @@
{
"version": "6",
"dialect": "sqlite",
"id": "d03860ad-0d5c-4943-92ba-d704c74e1501",
"prevId": "00000000-0000-0000-0000-000000000000",
"tables": {
"links": {
"name": "links",
"columns": {
"id": {
"name": "id",
"type": "integer",
"primaryKey": true,
"notNull": true,
"autoincrement": true
},
"name": {
"name": "name",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"path": {
"name": "path",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"url": {
"name": "url",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false
}
},
"indexes": {
"links_name_unique": {
"name": "links_name_unique",
"columns": [
"name"
],
"isUnique": true
},
"links_path_unique": {
"name": "links_path_unique",
"columns": [
"path"
],
"isUnique": true
},
"links_url_unique": {
"name": "links_url_unique",
"columns": [
"url"
],
"isUnique": true
}
},
"foreignKeys": {},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"checkConstraints": {}
}
},
"views": {},
"enums": {},
"_meta": {
"schemas": {},
"tables": {},
"columns": {}
},
"internal": {
"indexes": {}
}
}

View File

@@ -0,0 +1,13 @@
{
"version": "7",
"dialect": "sqlite",
"entries": [
{
"idx": 0,
"version": "6",
"when": 1773788954273,
"tag": "0000_pretty_mentor",
"breakpoints": true
}
]
}

8
server/db/schema.ts Normal file
View File

@@ -0,0 +1,8 @@
import { sqliteTable, text, integer } from "drizzle-orm/sqlite-core";
export const links = sqliteTable("links", {
id: integer("id").primaryKey({ autoIncrement: true }),
name: text("name").notNull().unique(),
path: text("path").notNull().unique(),
url: text("url").notNull().unique(),
});

8
server/env.ts Normal file
View File

@@ -0,0 +1,8 @@
import 'dotenv/config'
import { z } from 'zod'
const schema = z.object({
DATABASE_URL: z.string().min(1),
})
export const env = schema.parse(process.env)