added drizzle

pull/3/head
TZGyn 2 years ago
parent dcf1b8edfd
commit 55c9445fc5
Signed by: TZGyn
GPG Key ID: 122EAF77AE81FD4A

@ -1,3 +1,4 @@
PORT=3000 PORT=3000
PROTOCOL_HEADER=x-forwarded-proto PROTOCOL_HEADER=x-forwarded-proto
HOST_HEADER=x-forwarded-host HOST_HEADER=x-forwarded-host
DATABASE_URL=postgres://postgres:password@127.0.0.1:5432/link-shortener

Binary file not shown.

@ -0,0 +1,15 @@
// drizzle.config.ts
import type { Config } from 'drizzle-kit';
export default {
schema: './src/lib/db/schema.ts',
out: './drizzle',
driver: 'pg',
dbCredentials: {
user: 'postgres',
password: 'password',
host: '0.0.0.0',
port: 5432,
database: 'link-shortener',
},
} satisfies Config;

@ -0,0 +1,23 @@
CREATE TABLE IF NOT EXISTS "shortener" (
"id" serial PRIMARY KEY NOT NULL,
"link" varchar(255) NOT NULL,
"code" varchar(255) NOT NULL,
"created_at" timestamp DEFAULT now() NOT NULL
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "user" (
"id" serial PRIMARY KEY NOT NULL,
"uuid" text NOT NULL,
"email" varchar(255) NOT NULL,
"username" varchar(255) NOT NULL,
"password" varchar(255) NOT NULL,
"created_at" timestamp DEFAULT now() NOT NULL
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "visitor" (
"id" serial PRIMARY KEY NOT NULL,
"shortener_id" integer NOT NULL,
"created_at" timestamp DEFAULT now() NOT NULL,
"country_code" varchar(255) NOT NULL,
"country" varchar(255) NOT NULL
);

@ -0,0 +1,7 @@
CREATE TABLE IF NOT EXISTS "session" (
"token" varchar(255) NOT NULL,
"user_id" integer NOT NULL,
"expires" timestamp NOT NULL
);
--> statement-breakpoint
ALTER TABLE "user" ADD CONSTRAINT "user_email_unique" UNIQUE("email");

@ -0,0 +1,138 @@
{
"id": "1098bf22-b657-4c36-b85c-51f1a8f6e36d",
"prevId": "00000000-0000-0000-0000-000000000000",
"version": "5",
"dialect": "pg",
"tables": {
"shortener": {
"name": "shortener",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "serial",
"primaryKey": true,
"notNull": true
},
"link": {
"name": "link",
"type": "varchar(255)",
"primaryKey": false,
"notNull": true
},
"code": {
"name": "code",
"type": "varchar(255)",
"primaryKey": false,
"notNull": true
},
"created_at": {
"name": "created_at",
"type": "timestamp",
"primaryKey": false,
"notNull": true,
"default": "now()"
}
},
"indexes": {},
"foreignKeys": {},
"compositePrimaryKeys": {},
"uniqueConstraints": {}
},
"user": {
"name": "user",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "serial",
"primaryKey": true,
"notNull": true
},
"uuid": {
"name": "uuid",
"type": "text",
"primaryKey": false,
"notNull": true
},
"email": {
"name": "email",
"type": "varchar(255)",
"primaryKey": false,
"notNull": true
},
"username": {
"name": "username",
"type": "varchar(255)",
"primaryKey": false,
"notNull": true
},
"password": {
"name": "password",
"type": "varchar(255)",
"primaryKey": false,
"notNull": true
},
"created_at": {
"name": "created_at",
"type": "timestamp",
"primaryKey": false,
"notNull": true,
"default": "now()"
}
},
"indexes": {},
"foreignKeys": {},
"compositePrimaryKeys": {},
"uniqueConstraints": {}
},
"visitor": {
"name": "visitor",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "serial",
"primaryKey": true,
"notNull": true
},
"shortener_id": {
"name": "shortener_id",
"type": "integer",
"primaryKey": false,
"notNull": true
},
"created_at": {
"name": "created_at",
"type": "timestamp",
"primaryKey": false,
"notNull": true,
"default": "now()"
},
"country_code": {
"name": "country_code",
"type": "varchar(255)",
"primaryKey": false,
"notNull": true
},
"country": {
"name": "country",
"type": "varchar(255)",
"primaryKey": false,
"notNull": true
}
},
"indexes": {},
"foreignKeys": {},
"compositePrimaryKeys": {},
"uniqueConstraints": {}
}
},
"enums": {},
"schemas": {},
"_meta": {
"schemas": {},
"tables": {},
"columns": {}
}
}

@ -0,0 +1,174 @@
{
"id": "7c7bf598-99e4-405b-a089-065b8e8226fa",
"prevId": "1098bf22-b657-4c36-b85c-51f1a8f6e36d",
"version": "5",
"dialect": "pg",
"tables": {
"session": {
"name": "session",
"schema": "",
"columns": {
"token": {
"name": "token",
"type": "varchar(255)",
"primaryKey": false,
"notNull": true
},
"user_id": {
"name": "user_id",
"type": "integer",
"primaryKey": false,
"notNull": true
},
"expires": {
"name": "expires",
"type": "timestamp",
"primaryKey": false,
"notNull": true
}
},
"indexes": {},
"foreignKeys": {},
"compositePrimaryKeys": {},
"uniqueConstraints": {}
},
"shortener": {
"name": "shortener",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "serial",
"primaryKey": true,
"notNull": true
},
"link": {
"name": "link",
"type": "varchar(255)",
"primaryKey": false,
"notNull": true
},
"code": {
"name": "code",
"type": "varchar(255)",
"primaryKey": false,
"notNull": true
},
"created_at": {
"name": "created_at",
"type": "timestamp",
"primaryKey": false,
"notNull": true,
"default": "now()"
}
},
"indexes": {},
"foreignKeys": {},
"compositePrimaryKeys": {},
"uniqueConstraints": {}
},
"user": {
"name": "user",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "serial",
"primaryKey": true,
"notNull": true
},
"uuid": {
"name": "uuid",
"type": "text",
"primaryKey": false,
"notNull": true
},
"email": {
"name": "email",
"type": "varchar(255)",
"primaryKey": false,
"notNull": true
},
"username": {
"name": "username",
"type": "varchar(255)",
"primaryKey": false,
"notNull": true
},
"password": {
"name": "password",
"type": "varchar(255)",
"primaryKey": false,
"notNull": true
},
"created_at": {
"name": "created_at",
"type": "timestamp",
"primaryKey": false,
"notNull": true,
"default": "now()"
}
},
"indexes": {},
"foreignKeys": {},
"compositePrimaryKeys": {},
"uniqueConstraints": {
"user_email_unique": {
"name": "user_email_unique",
"nullsNotDistinct": false,
"columns": [
"email"
]
}
}
},
"visitor": {
"name": "visitor",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "serial",
"primaryKey": true,
"notNull": true
},
"shortener_id": {
"name": "shortener_id",
"type": "integer",
"primaryKey": false,
"notNull": true
},
"created_at": {
"name": "created_at",
"type": "timestamp",
"primaryKey": false,
"notNull": true,
"default": "now()"
},
"country_code": {
"name": "country_code",
"type": "varchar(255)",
"primaryKey": false,
"notNull": true
},
"country": {
"name": "country",
"type": "varchar(255)",
"primaryKey": false,
"notNull": true
}
},
"indexes": {},
"foreignKeys": {},
"compositePrimaryKeys": {},
"uniqueConstraints": {}
}
},
"enums": {},
"schemas": {},
"_meta": {
"schemas": {},
"tables": {},
"columns": {}
}
}

@ -0,0 +1,20 @@
{
"version": "5",
"dialect": "pg",
"entries": [
{
"idx": 0,
"version": "5",
"when": 1699648628603,
"tag": "0000_bored_eddie_brock",
"breakpoints": true
},
{
"idx": 1,
"version": "5",
"when": 1699649369484,
"tag": "0001_sudden_nightmare",
"breakpoints": true
}
]
}

@ -1,38 +1,41 @@
{ {
"name": "link-shortener-svelte", "name": "link-shortener-svelte",
"version": "0.0.1", "version": "0.0.1",
"private": true, "private": true,
"scripts": { "scripts": {
"dev": "vite dev", "dev": "vite dev",
"build": "vite build", "build": "vite build",
"preview": "vite preview", "preview": "vite preview",
"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
"check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
"lint": "prettier --plugin-search-dir . --check .", "lint": "prettier --plugin-search-dir . --check .",
"format": "prettier --plugin-search-dir . --write ." "format": "prettier --plugin-search-dir . --write ."
}, },
"devDependencies": { "devDependencies": {
"@sveltejs/kit": "^1.20.4", "@sveltejs/kit": "^1.20.4",
"autoprefixer": "^10.4.14", "autoprefixer": "^10.4.14",
"postcss": "^8.4.24", "drizzle-kit": "^0.20.1",
"postcss-load-config": "^4.0.1", "postcss": "^8.4.24",
"prettier": "^2.8.0", "postcss-load-config": "^4.0.1",
"prettier-plugin-svelte": "^2.10.1", "prettier": "^2.8.0",
"svelte": "^4.0.5", "prettier-plugin-svelte": "^2.10.1",
"svelte-adapter-bun": "^0.5.1", "svelte": "^4.0.5",
"svelte-check": "^3.4.3", "svelte-adapter-bun": "^0.5.1",
"tailwindcss": "^3.3.2", "svelte-check": "^3.4.3",
"tslib": "^2.4.1", "tailwindcss": "^3.3.2",
"typescript": "^5.0.0", "tslib": "^2.4.1",
"vite": "^4.4.2" "typescript": "^5.0.0",
}, "vite": "^4.4.2"
"type": "module", },
"dependencies": { "type": "module",
"bits-ui": "^0.9.1", "dependencies": {
"clsx": "^2.0.0", "bits-ui": "^0.9.1",
"lucide-svelte": "^0.292.0", "clsx": "^2.0.0",
"mode-watcher": "^0.0.7", "drizzle-orm": "^0.29.0",
"tailwind-merge": "^2.0.0", "lucide-svelte": "^0.292.0",
"tailwind-variants": "^0.1.18" "mode-watcher": "^0.0.7",
} "postgres": "^3.4.3",
"tailwind-merge": "^2.0.0",
"tailwind-variants": "^0.1.18"
}
} }

@ -0,0 +1,9 @@
import { drizzle } from 'drizzle-orm/postgres-js';
import postgres from 'postgres';
import * as schema from './schema';
const client = postgres(
process.env.DATABASE_URL ??
'postgres://postgres:password@127.0.0.1:5432/link-shortener',
);
export const db = drizzle(client, { schema });

@ -0,0 +1,47 @@
import {
pgTable,
serial,
varchar,
timestamp,
text,
integer,
} from 'drizzle-orm/pg-core';
import { relations } from 'drizzle-orm';
export const shortener = pgTable('shortener', {
id: serial('id').primaryKey().notNull(),
link: varchar('link', { length: 255 }).notNull(),
code: varchar('code', { length: 255 }).notNull(),
createdAt: timestamp('created_at', { mode: 'string' }).defaultNow().notNull(),
});
export const user = pgTable('user', {
id: serial('id').primaryKey().notNull(),
uuid: text('uuid').notNull(),
email: varchar('email', { length: 255 }).notNull().unique(),
username: varchar('username', { length: 255 }).notNull(),
password: varchar('password', { length: 255 }).notNull(),
createdAt: timestamp('created_at', { mode: 'string' }).defaultNow().notNull(),
});
export const visitor = pgTable('visitor', {
id: serial('id').primaryKey().notNull(),
shortenerId: integer('shortener_id').notNull(),
createdAt: timestamp('created_at', { mode: 'string' }).defaultNow().notNull(),
countryCode: varchar('country_code', { length: 255 }).notNull(),
country: varchar('country', { length: 255 }).notNull(),
});
export const session = pgTable('session', {
token: varchar('token', { length: 255 }).notNull(),
userId: integer('user_id').notNull(),
expiresAt: timestamp('expires', { mode: 'date' }).notNull(),
});
export const sessionRelations = relations(session, ({ one }) => ({
user: one(user, {
fields: [session.userId],
references: [user.id],
}),
}));
Loading…
Cancel
Save