From 8fc705e22136ac24b3ed1f164aa67aea57885ac4 Mon Sep 17 00:00:00 2001 From: yuwol Date: Tue, 14 May 2024 20:02:21 +0900 Subject: [PATCH] :sparkles: Configure Drizzle ORM --- .env.example | 5 +++++ .gitignore | 3 +++ README.md | 8 +++++++- bun.lockb | Bin 160069 -> 160069 bytes docker-compose.yml | 11 +++++++++++ drizzle.config.ts | 16 ++++++++++++++++ package.json | 3 +++ src/db/index.ts | 14 ++++++++++++++ src/db/migration/meta/_journal.json | 1 + src/db/schema/index.ts | 0 src/env.ts | 11 +++++++++++ 11 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 .env.example create mode 100644 docker-compose.yml create mode 100644 drizzle.config.ts create mode 100644 src/db/index.ts create mode 100644 src/db/migration/meta/_journal.json create mode 100644 src/db/schema/index.ts create mode 100644 src/env.ts diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..618e608 --- /dev/null +++ b/.env.example @@ -0,0 +1,5 @@ +DB_HOST=localhost +DB_PORT=3306 +DB_USER=root +DB_PASSWORD= +DB_NAME=ara diff --git a/.gitignore b/.gitignore index 3c3629e..96cace2 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,4 @@ node_modules + +.env +.volume diff --git a/README.md b/README.md index b19a4dd..6218b99 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,15 @@ # Ara API -Restful API for Ara, KAIST's official community service +Restful API for Ara, KAIST's official community service. ## Getting Started +Copy the environment variables: + +```bash +cp .env.example .env +``` + To install dependencies: ```bash diff --git a/bun.lockb b/bun.lockb index 816d7a980bdb654c71431cff5d1d9b8cd7b9d94f..a822d11e7819767f88f7bb6fde2a79504e721cc0 100755 GIT binary patch delta 26 dcmX^5i1X+p&W0_F_M14E7$9J~`zFSJ`v8Mw2>t*7 delta 26 icmX^5i1X+p&W0_F_M12u;|%nS4D}4RyKiFrw+{f4%L;n{ diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..2552a01 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,11 @@ +services: + db: + image: mysql:8 + ports: + - '${DB_PORT:?err}:3306' + environment: + - MYSQL_ROOT_PASSWORD=${DB_PASSWORD:?err} + - MYSQL_DATABASE=${DB_NAME:?err} + volumes: + - ./.volume/db:/var/lib/mysql + command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci diff --git a/drizzle.config.ts b/drizzle.config.ts new file mode 100644 index 0000000..962b154 --- /dev/null +++ b/drizzle.config.ts @@ -0,0 +1,16 @@ +import { defineConfig } from 'drizzle-kit' + +import { env } from '@/env' + +export default defineConfig({ + dialect: 'mysql', + schema: './src/db/schema/*', + out: './src/db/migration', + dbCredentials: { + host: env.DB_HOST, + port: env.DB_PORT, + user: env.DB_USER, + password: env.DB_PASSWORD, + database: env.DB_NAME, + }, +}) diff --git a/package.json b/package.json index 1b75966..ea3c950 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,9 @@ { "type": "module", "scripts": { + "db:generate": "drizzle-kit generate", + "db:migrate": "drizzle-kit migrate", + "db:studio": "drizzle-kit studio", "dev": "bun run --hot src/index.ts", "prepare": "husky" }, diff --git a/src/db/index.ts b/src/db/index.ts new file mode 100644 index 0000000..142fc07 --- /dev/null +++ b/src/db/index.ts @@ -0,0 +1,14 @@ +import { drizzle } from 'drizzle-orm/mysql2' +import { createPool } from 'mysql2/promise' + +import { env } from '@/env' + +const connectionPool = createPool({ + host: env.DB_HOST, + port: env.DB_PORT, + user: env.DB_USER, + password: env.DB_PASSWORD, + database: env.DB_NAME, +}) + +export const db = drizzle(connectionPool) diff --git a/src/db/migration/meta/_journal.json b/src/db/migration/meta/_journal.json new file mode 100644 index 0000000..7ae5b77 --- /dev/null +++ b/src/db/migration/meta/_journal.json @@ -0,0 +1 @@ +{ "version": "6", "dialect": "mysql", "entries": [] } diff --git a/src/db/schema/index.ts b/src/db/schema/index.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/env.ts b/src/env.ts new file mode 100644 index 0000000..968f5a0 --- /dev/null +++ b/src/env.ts @@ -0,0 +1,11 @@ +import { z } from 'zod' + +export const env = z + .object({ + DB_HOST: z.string(), + DB_PORT: z.coerce.number(), + DB_USER: z.string(), + DB_PASSWORD: z.string(), + DB_NAME: z.string(), + }) + .parse(process.env)