From 780fce731a798da5c8c591e4672cadeb81993c2c Mon Sep 17 00:00:00 2001 From: TZGyn Date: Fri, 15 Sep 2023 06:48:06 +0800 Subject: [PATCH] Added kysely query builder to express backend --- express/bun.lockb | Bin 27135 -> 36553 bytes express/package.json | 10 +++++++++- express/src/database.ts | 18 ++++++++++++++++++ express/src/types.ts | 15 +++++++++++++++ 4 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 express/src/database.ts create mode 100644 express/src/types.ts diff --git a/express/bun.lockb b/express/bun.lockb index dc225865b45948d289377c4dc9d645e9c9dc1cac..1707daf6ec2fef6fe87c180290c1305bf8136224 100755 GIT binary patch delta 10077 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 S>CqlDy|JmZ?+=?lm;V4c4>qj; diff --git a/express/package.json b/express/package.json index 3d33f6c..5ffa25e 100644 --- a/express/package.json +++ b/express/package.json @@ -1 +1,9 @@ -{ "dependencies": { "@types/express": "^4.17.17", "express": "^4.18.2" } } \ No newline at end of file +{ + "dependencies": { + "@types/express": "^4.17.17", + "@types/pg": "^8.10.2", + "express": "^4.18.2", + "kysely": "^0.26.3", + "pg": "^8.11.3" + } +} diff --git a/express/src/database.ts b/express/src/database.ts new file mode 100644 index 0000000..3fd030f --- /dev/null +++ b/express/src/database.ts @@ -0,0 +1,18 @@ +import { Database } from './types' +import { Pool } from 'pg' +import { Kysely, PostgresDialect } from 'kysely' + +const dialect = new PostgresDialect({ + pool: new Pool({ + database: 'link-shortener', + host: '0.0.0.0', + user: 'postgres', + password: 'password', + port: 5432, + max: 10, + }), +}) + +export const db = new Kysely({ + dialect, +}) diff --git a/express/src/types.ts b/express/src/types.ts new file mode 100644 index 0000000..f511492 --- /dev/null +++ b/express/src/types.ts @@ -0,0 +1,15 @@ +import { Generated, Insertable, Selectable, Updateable } from 'kysely' + +export interface Database { + shortener: ShortenerTable +} + +export interface ShortenerTable { + id: Generated + link: string + code: string +} + +export type Shortener = Selectable +export type NewShortener = Insertable +export type ShortenerUpdate = Updateable