feat: initial commit

This commit is contained in:
2024-08-08 06:07:30 +07:00
commit 8f286de718
56 changed files with 6343 additions and 0 deletions
+10
View File
@@ -0,0 +1,10 @@
import { drizzle } from "drizzle-orm/bun-sqlite";
import { Database } from "bun:sqlite";
import * as schema from "../models";
const DATABASE_PATH = import.meta.env.DATABASE_PATH || "./data.db";
const sqlite = new Database(DATABASE_PATH);
const db = drizzle(sqlite, { schema });
export default db;
+38
View File
@@ -0,0 +1,38 @@
CREATE TABLE `repositories` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`user_id` integer NOT NULL,
`name` text NOT NULL,
`uri` text NOT NULL,
`language` text NOT NULL,
`stars` integer NOT NULL,
`last_update` text NOT NULL,
`languages` text,
`contributors` text,
`created_at` text DEFAULT CURRENT_TIMESTAMP NOT NULL,
`updated_at` text NOT NULL,
FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE no action
);
--> statement-breakpoint
CREATE TABLE `users` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`username` text NOT NULL,
`name` text NOT NULL,
`avatar` text,
`location` text,
`followers` integer DEFAULT 0 NOT NULL,
`following` integer DEFAULT 0 NOT NULL,
`achievements` text DEFAULT '[]',
`points` integer DEFAULT 0 NOT NULL,
`commits` integer DEFAULT 0 NOT NULL,
`line_of_codes` integer DEFAULT 0 NOT NULL,
`github_id` integer,
`access_token` text,
`created_at` text DEFAULT CURRENT_TIMESTAMP NOT NULL,
`updated_at` text NOT NULL
);
--> statement-breakpoint
CREATE INDEX `repositories_name_idx` ON `repositories` (`name`);--> statement-breakpoint
CREATE INDEX `repositories_uri_idx` ON `repositories` (`uri`);--> statement-breakpoint
CREATE INDEX `repositories_language_idx` ON `repositories` (`language`);--> statement-breakpoint
CREATE UNIQUE INDEX `users_username_unique` ON `users` (`username`);--> statement-breakpoint
CREATE UNIQUE INDEX `users_github_id_unique` ON `users` (`github_id`);
@@ -0,0 +1,276 @@
{
"version": "6",
"dialect": "sqlite",
"id": "ccf7929b-8198-4452-ad60-e02285ac8149",
"prevId": "00000000-0000-0000-0000-000000000000",
"tables": {
"repositories": {
"name": "repositories",
"columns": {
"id": {
"name": "id",
"type": "integer",
"primaryKey": true,
"notNull": true,
"autoincrement": true
},
"user_id": {
"name": "user_id",
"type": "integer",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"name": {
"name": "name",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"uri": {
"name": "uri",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"language": {
"name": "language",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"stars": {
"name": "stars",
"type": "integer",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"last_update": {
"name": "last_update",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"languages": {
"name": "languages",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"contributors": {
"name": "contributors",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"created_at": {
"name": "created_at",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false,
"default": "CURRENT_TIMESTAMP"
},
"updated_at": {
"name": "updated_at",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false
}
},
"indexes": {
"repositories_name_idx": {
"name": "repositories_name_idx",
"columns": [
"name"
],
"isUnique": false
},
"repositories_uri_idx": {
"name": "repositories_uri_idx",
"columns": [
"uri"
],
"isUnique": false
},
"repositories_language_idx": {
"name": "repositories_language_idx",
"columns": [
"language"
],
"isUnique": false
}
},
"foreignKeys": {
"repositories_user_id_users_id_fk": {
"name": "repositories_user_id_users_id_fk",
"tableFrom": "repositories",
"tableTo": "users",
"columnsFrom": [
"user_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {}
},
"users": {
"name": "users",
"columns": {
"id": {
"name": "id",
"type": "integer",
"primaryKey": true,
"notNull": true,
"autoincrement": true
},
"username": {
"name": "username",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"name": {
"name": "name",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"avatar": {
"name": "avatar",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"location": {
"name": "location",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"followers": {
"name": "followers",
"type": "integer",
"primaryKey": false,
"notNull": true,
"autoincrement": false,
"default": 0
},
"following": {
"name": "following",
"type": "integer",
"primaryKey": false,
"notNull": true,
"autoincrement": false,
"default": 0
},
"achievements": {
"name": "achievements",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": "'[]'"
},
"points": {
"name": "points",
"type": "integer",
"primaryKey": false,
"notNull": true,
"autoincrement": false,
"default": 0
},
"commits": {
"name": "commits",
"type": "integer",
"primaryKey": false,
"notNull": true,
"autoincrement": false,
"default": 0
},
"line_of_codes": {
"name": "line_of_codes",
"type": "integer",
"primaryKey": false,
"notNull": true,
"autoincrement": false,
"default": 0
},
"github_id": {
"name": "github_id",
"type": "integer",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"access_token": {
"name": "access_token",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"created_at": {
"name": "created_at",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false,
"default": "CURRENT_TIMESTAMP"
},
"updated_at": {
"name": "updated_at",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false
}
},
"indexes": {
"users_username_unique": {
"name": "users_username_unique",
"columns": [
"username"
],
"isUnique": true
},
"users_github_id_unique": {
"name": "users_github_id_unique",
"columns": [
"github_id"
],
"isUnique": true
}
},
"foreignKeys": {},
"compositePrimaryKeys": {},
"uniqueConstraints": {}
}
},
"enums": {},
"_meta": {
"schemas": {},
"tables": {},
"columns": {}
},
"internal": {
"indexes": {}
}
}
+13
View File
@@ -0,0 +1,13 @@
{
"version": "7",
"dialect": "sqlite",
"entries": [
{
"idx": 0,
"version": "6",
"when": 1723071912146,
"tag": "0000_low_catseye",
"breakpoints": true
}
]
}
+39
View File
@@ -0,0 +1,39 @@
import { users } from "../models";
import db from ".";
import logger from "../lib/logger";
import { sql } from "drizzle-orm";
import { faker } from "@faker-js/faker";
import queue from "@server/lib/queue";
const seed = async () => {
logger.info("🌿 Seeding database...");
await db.transaction(async (tx) => {
tx.run(sql`DELETE FROM users`);
await tx
.insert(users)
.values({ username: "khairul169", name: "Khairul Hidayat" });
await tx.insert(users).values(
[...Array(50)].map(() => ({
username: faker.internet.userName(),
name: faker.person.fullName(),
location: faker.location.city(),
followers: faker.number.int({ min: 0, max: 1000 }),
following: faker.number.int({ min: 0, max: 1000 }),
points: faker.number.int({ min: 20, max: 3000 }),
commits: faker.number.int({ min: 20, max: 420 }),
lineOfCodes: faker.number.int({ min: 1000, max: 300000 }),
}))
);
});
await queue.add("fetchUserProfile", { userId: 1 });
logger.info("🌱 Database seeded");
process.exit();
};
seed();