From fdfb2508ae9c9ab868e4b3bbe6b6d85452121331 Mon Sep 17 00:00:00 2001 From: syntaxbullet Date: Fri, 5 Dec 2025 18:52:20 +0100 Subject: [PATCH] feat: Initialize database and restructure application source code. --- .env.example | 2 - .gitignore | 39 ++++- app/Dockerfile => Dockerfile | 0 app/README.md => README.md | 0 app/.gitignore | 34 ---- app/drizzle/0000_big_obadiah_stane.sql | 22 --- app/drizzle/meta/0000_snapshot.json | 164 ------------------ app/drizzle/meta/_journal.json | 13 -- app/bun.lock => bun.lock | 0 docker-compose.yml | 13 +- app/drizzle.config.ts => drizzle.config.ts | 0 app/package.json => package.json | 7 +- {app/src => src}/commands/economy/balance.ts | 0 {app/src => src}/commands/system/reload.ts | 0 {app/src => src}/db/schema.ts | 4 +- {app/src => src}/index.ts | 0 {app/src => src}/lib/DrizzleClient.ts | 0 {app/src => src}/lib/KyokoClient.ts | 0 {app/src => src}/lib/env.ts | 0 {app/src => src}/lib/types.ts | 0 {app/src => src}/lib/utils.ts | 0 .../modules/economy/economy.service.ts | 0 .../modules/users/users.service.ts | 0 app/tsconfig.json => tsconfig.json | 12 +- 24 files changed, 55 insertions(+), 255 deletions(-) rename app/Dockerfile => Dockerfile (100%) rename app/README.md => README.md (100%) delete mode 100644 app/.gitignore delete mode 100644 app/drizzle/0000_big_obadiah_stane.sql delete mode 100644 app/drizzle/meta/0000_snapshot.json delete mode 100644 app/drizzle/meta/_journal.json rename app/bun.lock => bun.lock (100%) rename app/drizzle.config.ts => drizzle.config.ts (100%) rename app/package.json => package.json (71%) rename {app/src => src}/commands/economy/balance.ts (100%) rename {app/src => src}/commands/system/reload.ts (100%) rename {app/src => src}/db/schema.ts (91%) rename {app/src => src}/index.ts (100%) rename {app/src => src}/lib/DrizzleClient.ts (100%) rename {app/src => src}/lib/KyokoClient.ts (100%) rename {app/src => src}/lib/env.ts (100%) rename {app/src => src}/lib/types.ts (100%) rename {app/src => src}/lib/utils.ts (100%) rename {app/src => src}/modules/economy/economy.service.ts (100%) rename {app/src => src}/modules/users/users.service.ts (100%) rename app/tsconfig.json => tsconfig.json (87%) diff --git a/.env.example b/.env.example index ebef6ea..5eff022 100644 --- a/.env.example +++ b/.env.example @@ -6,6 +6,4 @@ DB_HOST=db DISCORD_BOT_TOKEN=your-discord-bot-token DISCORD_CLIENT_ID=your-discord-client-id DISCORD_GUILD_ID=your-discord-guild-id -DB_DATA_DIR=./db-data -DB_LOG_DIR=./db-logs DATABASE_URL=postgres://kyoko:kyoko@db:5432/kyoko diff --git a/.gitignore b/.gitignore index 594b891..e7fe744 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,41 @@ node_modules db-logs db-data -.cursor \ No newline at end of file +.cursor +# dependencies (bun install) +node_modules + +# output +out +dist +*.tgz + +# code coverage +coverage +*.lcov + +# logs +logs +_.log +report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json + +# dotenv environment variable files +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# caches +.eslintcache +.cache +*.tsbuildinfo + +# IntelliJ based IDEs +.idea + +# Finder (MacOS) folder config +.DS_Store + +src/db/data +src/db/log \ No newline at end of file diff --git a/app/Dockerfile b/Dockerfile similarity index 100% rename from app/Dockerfile rename to Dockerfile diff --git a/app/README.md b/README.md similarity index 100% rename from app/README.md rename to README.md diff --git a/app/.gitignore b/app/.gitignore deleted file mode 100644 index a14702c..0000000 --- a/app/.gitignore +++ /dev/null @@ -1,34 +0,0 @@ -# dependencies (bun install) -node_modules - -# output -out -dist -*.tgz - -# code coverage -coverage -*.lcov - -# logs -logs -_.log -report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json - -# dotenv environment variable files -.env -.env.development.local -.env.test.local -.env.production.local -.env.local - -# caches -.eslintcache -.cache -*.tsbuildinfo - -# IntelliJ based IDEs -.idea - -# Finder (MacOS) folder config -.DS_Store diff --git a/app/drizzle/0000_big_obadiah_stane.sql b/app/drizzle/0000_big_obadiah_stane.sql deleted file mode 100644 index afbab87..0000000 --- a/app/drizzle/0000_big_obadiah_stane.sql +++ /dev/null @@ -1,22 +0,0 @@ -CREATE TABLE "transactions" ( - "transaction_id" serial PRIMARY KEY NOT NULL, - "from_user_id" text, - "to_user_id" text, - "amount" integer NOT NULL, - "occured_at" timestamp DEFAULT now(), - "type" text NOT NULL, - "description" text, - CONSTRAINT "transactions_transaction_id_unique" UNIQUE("transaction_id") -); ---> statement-breakpoint -CREATE TABLE "users" ( - "user_id" text PRIMARY KEY NOT NULL, - "balance" integer DEFAULT 0 NOT NULL, - "last_daily" timestamp, - "daily_streak" integer DEFAULT 0 NOT NULL, - "created_at" timestamp DEFAULT now(), - CONSTRAINT "users_user_id_unique" UNIQUE("user_id") -); ---> statement-breakpoint -ALTER TABLE "transactions" ADD CONSTRAINT "transactions_from_user_id_users_user_id_fk" FOREIGN KEY ("from_user_id") REFERENCES "public"."users"("user_id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint -ALTER TABLE "transactions" ADD CONSTRAINT "transactions_to_user_id_users_user_id_fk" FOREIGN KEY ("to_user_id") REFERENCES "public"."users"("user_id") ON DELETE no action ON UPDATE no action; \ No newline at end of file diff --git a/app/drizzle/meta/0000_snapshot.json b/app/drizzle/meta/0000_snapshot.json deleted file mode 100644 index afe421b..0000000 --- a/app/drizzle/meta/0000_snapshot.json +++ /dev/null @@ -1,164 +0,0 @@ -{ - "id": "e5884b86-8257-466d-86f8-5fef47cfcd50", - "prevId": "00000000-0000-0000-0000-000000000000", - "version": "7", - "dialect": "postgresql", - "tables": { - "public.transactions": { - "name": "transactions", - "schema": "", - "columns": { - "transaction_id": { - "name": "transaction_id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "from_user_id": { - "name": "from_user_id", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "to_user_id": { - "name": "to_user_id", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "amount": { - "name": "amount", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "occured_at": { - "name": "occured_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "default": "now()" - }, - "type": { - "name": "type", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "transactions_from_user_id_users_user_id_fk": { - "name": "transactions_from_user_id_users_user_id_fk", - "tableFrom": "transactions", - "tableTo": "users", - "columnsFrom": [ - "from_user_id" - ], - "columnsTo": [ - "user_id" - ], - "onDelete": "no action", - "onUpdate": "no action" - }, - "transactions_to_user_id_users_user_id_fk": { - "name": "transactions_to_user_id_users_user_id_fk", - "tableFrom": "transactions", - "tableTo": "users", - "columnsFrom": [ - "to_user_id" - ], - "columnsTo": [ - "user_id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "transactions_transaction_id_unique": { - "name": "transactions_transaction_id_unique", - "nullsNotDistinct": false, - "columns": [ - "transaction_id" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.users": { - "name": "users", - "schema": "", - "columns": { - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "balance": { - "name": "balance", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 0 - }, - "last_daily": { - "name": "last_daily", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "daily_streak": { - "name": "daily_streak", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 0 - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "default": "now()" - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "users_user_id_unique": { - "name": "users_user_id_unique", - "nullsNotDistinct": false, - "columns": [ - "user_id" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - } - }, - "enums": {}, - "schemas": {}, - "sequences": {}, - "roles": {}, - "policies": {}, - "views": {}, - "_meta": { - "columns": {}, - "schemas": {}, - "tables": {} - } -} \ No newline at end of file diff --git a/app/drizzle/meta/_journal.json b/app/drizzle/meta/_journal.json deleted file mode 100644 index ed31459..0000000 --- a/app/drizzle/meta/_journal.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "version": "7", - "dialect": "postgresql", - "entries": [ - { - "idx": 0, - "version": "7", - "when": 1764930369542, - "tag": "0000_big_obadiah_stane", - "breakpoints": true - } - ] -} \ No newline at end of file diff --git a/app/bun.lock b/bun.lock similarity index 100% rename from app/bun.lock rename to bun.lock diff --git a/docker-compose.yml b/docker-compose.yml index 68ce76e..7733e75 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -9,20 +9,19 @@ services: ports: - "${DB_PORT}:5432" volumes: - - ${DB_DATA_DIR}:/var/lib/postgresql/data - - ${DB_LOG_DIR}:/var/log/postgresql - + - ./src/db/data:/var/lib/postgresql/data + - ./src/db/log:/var/log/postgresql app: container_name: kyoko_app image: kyoko-app build: - context: ./app + context: . dockerfile: Dockerfile working_dir: /app ports: - "3000:3000" volumes: - - ./app:/app + - .:/app - /app/node_modules environment: - DB_USER=${DB_USER} @@ -42,13 +41,13 @@ services: container_name: kyoko_studio image: kyoko-app build: - context: ./app + context: . dockerfile: Dockerfile working_dir: /app ports: - "4983:4983" volumes: - - ./app:/app + - .:/app environment: - DB_USER=${DB_USER} - DB_PASSWORD=${DB_PASSWORD} diff --git a/app/drizzle.config.ts b/drizzle.config.ts similarity index 100% rename from app/drizzle.config.ts rename to drizzle.config.ts diff --git a/app/package.json b/package.json similarity index 71% rename from app/package.json rename to package.json index 68af739..8a8619f 100644 --- a/app/package.json +++ b/package.json @@ -12,10 +12,9 @@ "typescript": "^5" }, "scripts": { - "generate": "drizzle-kit generate", - "migrate": "drizzle-kit migrate", - "db:push": "drizzle-kit push", - "deploy": "docker compose run --rm app bun src/scripts/deploy.ts", + "generate": "docker compose run --rm app drizzle-kit generate", + "migrate": "docker compose run --rm app drizzle-kit migrate", + "db:push": "docker compose run --rm app drizzle-kit push", "dev": "bun --watch src/index.ts", "db:studio": "drizzle-kit studio --host 0.0.0.0" }, diff --git a/app/src/commands/economy/balance.ts b/src/commands/economy/balance.ts similarity index 100% rename from app/src/commands/economy/balance.ts rename to src/commands/economy/balance.ts diff --git a/app/src/commands/system/reload.ts b/src/commands/system/reload.ts similarity index 100% rename from app/src/commands/system/reload.ts rename to src/commands/system/reload.ts diff --git a/app/src/db/schema.ts b/src/db/schema.ts similarity index 91% rename from app/src/db/schema.ts rename to src/db/schema.ts index b91eff2..d7cdb7e 100644 --- a/app/src/db/schema.ts +++ b/src/db/schema.ts @@ -1,7 +1,7 @@ import { pgTable, integer, text, timestamp, serial } from "drizzle-orm/pg-core"; export const users = pgTable("users", { - userId: text("user_id").primaryKey().notNull().unique(), + userId: text("user_id").primaryKey().notNull(), balance: integer("balance").notNull().default(0), lastDaily: timestamp("last_daily"), dailyStreak: integer("daily_streak").notNull().default(0), @@ -9,7 +9,7 @@ export const users = pgTable("users", { }); export const transactions = pgTable("transactions", { - transactionId: serial("transaction_id").primaryKey().notNull().unique(), + transactionId: serial("transaction_id").primaryKey().notNull(), fromUserId: text("from_user_id").references(() => users.userId), toUserId: text("to_user_id").references(() => users.userId), amount: integer("amount").notNull(), diff --git a/app/src/index.ts b/src/index.ts similarity index 100% rename from app/src/index.ts rename to src/index.ts diff --git a/app/src/lib/DrizzleClient.ts b/src/lib/DrizzleClient.ts similarity index 100% rename from app/src/lib/DrizzleClient.ts rename to src/lib/DrizzleClient.ts diff --git a/app/src/lib/KyokoClient.ts b/src/lib/KyokoClient.ts similarity index 100% rename from app/src/lib/KyokoClient.ts rename to src/lib/KyokoClient.ts diff --git a/app/src/lib/env.ts b/src/lib/env.ts similarity index 100% rename from app/src/lib/env.ts rename to src/lib/env.ts diff --git a/app/src/lib/types.ts b/src/lib/types.ts similarity index 100% rename from app/src/lib/types.ts rename to src/lib/types.ts diff --git a/app/src/lib/utils.ts b/src/lib/utils.ts similarity index 100% rename from app/src/lib/utils.ts rename to src/lib/utils.ts diff --git a/app/src/modules/economy/economy.service.ts b/src/modules/economy/economy.service.ts similarity index 100% rename from app/src/modules/economy/economy.service.ts rename to src/modules/economy/economy.service.ts diff --git a/app/src/modules/users/users.service.ts b/src/modules/users/users.service.ts similarity index 100% rename from app/src/modules/users/users.service.ts rename to src/modules/users/users.service.ts diff --git a/app/tsconfig.json b/tsconfig.json similarity index 87% rename from app/tsconfig.json rename to tsconfig.json index abfdbfe..4403c52 100644 --- a/app/tsconfig.json +++ b/tsconfig.json @@ -25,22 +25,22 @@ "noUnusedParameters": false, "noPropertyAccessFromIndexSignature": false, // Aliases - "baseUrl": "./src", + "baseUrl": ".", "paths": { "@/*": [ - "./*" + "./src/*" ], "@commands/*": [ - "./commands/*" + "./src/commands/*" ], "@db/*": [ - "./db/*" + "./src/db/*" ], "@lib/*": [ - "./lib/*" + "./src/lib/*" ], "@modules/*": [ - "./modules/*" + "./src/modules/*" ] } }