Skip to content

Commit 610d915

Browse files
authored
Merge pull request #145 from GalvinPython/refactor/database
2 parents 8ca3d25 + 6ffe403 commit 610d915

37 files changed

+1289
-1200
lines changed

.env.example

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,8 @@ TWITCH_CLIENT_SECRET='YOUR_TWITCH_CLIENT_SECRET'
1717
CONFIG_UPDATE_INTERVAL_YOUTUBE='10'
1818
CONFIG_UPDATE_INTERVAL_TWITCH='2'
1919
CONFIG_DISCORD_LOGS_CHANNEL='YOUR_DISCORD_LOGS_CHANNEL'
20+
CONFIG_DISCORD_WAIT_FOR_GUILD_CACHE_TIME='YOUR_TIME_IN_SECONDS'
2021

21-
# Postgres
22-
POSTGRES_HOST='YOUR_POSTGRES_HOST'
23-
POSTGRES_PORT='YOUR_POSTGRES_PORT'
24-
POSTGRES_USER='YOUR_POSTGRES_USER'
25-
POSTGRES_PASSWORD='YOUR_POSTGRES_PASSWORD'
26-
POSTGRES_DB='YOUR_POSTGRES_DB'
27-
28-
# Postgres Dev
29-
POSTGRES_DEV_HOST='YOUR_POSTGRES_DEV_HOST'
30-
POSTGRES_DEV_PORT='YOUR_POSTGRES_DEV_PORT'
31-
POSTGRES_DEV_USER='YOUR_POSTGRES_DEV_USER'
32-
POSTGRES_DEV_PASSWORD='YOUR_POSTGRES_DEV_PASSWORD'
33-
POSTGRES_DEV_DB='YOUR_POSTGRES_DEV_DB'
22+
# Postgres URLs
23+
POSTGRES_URL='postgresql://user:password@server:port/database'
24+
POSTGRES_DEV_URL='postgresql://user:password@server:port/database'

.gitignore

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@ dist/
55
target/
66

77
# Database stuff
8-
/backups
98
*.db
109
*.sqlite
1110
*.sqlite3*
1211
*.sql
1312
dbtests.ts
14-
perftesting.ts
13+
perftesting.ts
14+
drizzle/

bun.lock

Lines changed: 127 additions & 0 deletions
Large diffs are not rendered by default.

drizzle.config.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import { defineConfig } from "drizzle-kit";
2+
3+
const databaseUrl =
4+
process.env.NODE_ENV === "development"
5+
? process.env.POSTGRES_DEV_URL
6+
: process.env.POSTGRES_URL;
7+
8+
console.log("Using database URL:", databaseUrl);
9+
10+
export default defineConfig({
11+
out: "./drizzle",
12+
schema: "./src/db/schema.ts",
13+
dialect: "postgresql",
14+
dbCredentials: {
15+
url: databaseUrl!,
16+
},
17+
});

new.dbml

Lines changed: 0 additions & 98 deletions
This file was deleted.

package.json

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
"@typescript-eslint/eslint-plugin": "8.11.0",
1010
"@typescript-eslint/parser": "8.11.0",
1111
"concurrently": "^9.1.2",
12+
"cross-env": "^7.0.3",
13+
"drizzle-kit": "^0.31.4",
1214
"eslint": "^8.57.0",
1315
"eslint-config-prettier": "9.1.0",
1416
"eslint-plugin-import": "^2.26.0",
@@ -20,10 +22,13 @@
2022
"typescript": "^5.0.0"
2123
},
2224
"scripts": {
25+
"db:generate": "bun drizzle-kit generate",
26+
"db:push:dev": "cross-env NODE_ENV=development bun drizzle-kit push",
27+
"db:push:prod": "bun drizzle-kit push",
2328
"dev": "concurrently --names \"WEB,API,BOT\" --prefix-colors \"blue,green,magenta\" \"cd web && bun dev\" \"cd api && cargo watch -x \\\"run -- --dev\\\"\" \"bun --watch . --dev\"",
2429
"dev:bot": "bun --watch . --dev",
2530
"test:jetstream": "bun --watch src/utils/bluesky/jetstream.ts",
26-
"lint": "eslint . --ext .ts -c .eslintrc.json",
31+
"lint": "eslint src/ --ext .ts -c .eslintrc.json --debug",
2732
"lint:fix": "eslint . --ext .ts -c .eslintrc.json --fix",
2833
"cargo:api:dev": "cd api && cargo watch -x \"run -- --dev\"",
2934
"web:dev": "concurrently --names \"WEB,API\" --prefix-colors \"blue,green\" \"cd web && bun dev\" \"cd api && cargo watch -x \\\"run -- --dev\\\"\"",
@@ -35,6 +40,7 @@
3540
"dependencies": {
3641
"cron": "^4.3.0",
3742
"discord.js": "^14.19.1",
43+
"drizzle-orm": "^0.44.2",
3844
"hfksdjfskfhsjdfhkasfdhksf": "^1.0.5",
3945
"pg": "^8.15.6"
4046
}

src/commands.ts

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,29 +16,24 @@ import { PermissionFlagsBits } from "discord-api-types/v8";
1616
import hfksdjfskfhsjdfhkasfdhksf from "hfksdjfskfhsjdfhkasfdhksf";
1717

1818
import checkIfChannelIdIsValid from "./utils/youtube/checkIfChannelIdIsValid";
19-
import {
20-
getAllTrackedInGuild,
21-
stopGuildTrackingChannel,
22-
twitchStopGuildTrackingChannel,
23-
} from "./utils/database";
2419
import getChannelDetails from "./utils/youtube/getChannelDetails";
2520
import { checkIfStreamerIsLive } from "./utils/twitch/checkIfStreamerIsLive";
2621
import {
2722
checkIfChannelIsAlreadyTracked,
2823
addNewChannelToTrack,
29-
} from "./utils/db/youtube";
24+
} from "./db/youtube";
3025
import search from "./utils/youtube/search";
3126
import {
3227
checkIfGuildIsTrackingUserAlready,
3328
discordAddGuildTrackingUser,
34-
} from "./utils/db/discord";
29+
} from "./db/discord";
3530
import { Platform, YouTubeContentType } from "./types/types.d";
3631
import searchTwitch from "./utils/twitch/searchTwitch";
3732
import { getStreamerName } from "./utils/twitch/getStreamerName";
3833
import {
3934
addNewStreamerToTrack,
4035
checkIfStreamerIsAlreadyTracked,
41-
} from "./utils/db/twitch";
36+
} from "./db/twitch";
4237

4338
import client from ".";
4439

src/config.ts

Lines changed: 9 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ export const runningInDevMode: boolean = process.argv.includes("--dev");
33
export interface Config {
44
updateIntervalYouTube: number;
55
updateIntervalTwitch: number;
6+
databaseUrl: string | undefined;
7+
discordWaitForGuildCacheTime: number;
68
}
79

810
export const config: Config = {
@@ -12,6 +14,13 @@ export const config: Config = {
1214
updateIntervalTwitch: process.env?.CONFIG_UPDATE_INTERVAL_TWITCH
1315
? parseInt(process.env?.CONFIG_UPDATE_INTERVAL_TWITCH) * 1000
1416
: 60_000,
17+
databaseUrl: runningInDevMode
18+
? process.env?.POSTGRES_DEV_URL
19+
: process.env?.POSTGRES_URL,
20+
discordWaitForGuildCacheTime: process.env
21+
?.CONFIG_DISCORD_WAIT_FOR_GUILD_CACHE_TIME
22+
? parseInt(process.env?.CONFIG_DISCORD_WAIT_FOR_GUILD_CACHE_TIME) * 1000
23+
: 10_000,
1524
};
1625

1726
interface Env {
@@ -29,29 +38,3 @@ export const env: Env = {
2938
twitchClientId: process.env?.TWITCH_CLIENT_ID,
3039
twitchClientSecret: process.env?.TWITCH_CLIENT_SECRET,
3140
};
32-
33-
interface DatabaseConfig {
34-
host: string | undefined;
35-
port: string | undefined;
36-
user: string | undefined;
37-
password: string | undefined;
38-
database: string | undefined;
39-
}
40-
41-
export const dbCredentials: DatabaseConfig = {
42-
host: runningInDevMode
43-
? process.env?.POSTGRES_DEV_HOST
44-
: process.env?.POSTGRES_HOST,
45-
port: runningInDevMode
46-
? process.env?.POSTGRES_DEV_PORT
47-
: process.env?.POSTGRES_PORT,
48-
user: runningInDevMode
49-
? process.env?.POSTGRES_DEV_USER
50-
: process.env?.POSTGRES_USER,
51-
password: runningInDevMode
52-
? process.env?.POSTGRES_DEV_PASSWORD
53-
: process.env?.POSTGRES_PASSWORD,
54-
database: runningInDevMode
55-
? process.env?.POSTGRES_DEV_DB
56-
: process.env?.POSTGRES_DB,
57-
};

src/db/audit.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import {
2+
dbAuditLogsEventTypeEnum,
3+
dbAuditLogsSuccessTypeEnum,
4+
dbAuditLogsTable,
5+
} from "./schema";
6+
import { db } from "./db";
7+
8+
export async function dbAuditLogCreate(
9+
guildId: string,
10+
eventType: (typeof dbAuditLogsEventTypeEnum)["enumValues"][number],
11+
successType: (typeof dbAuditLogsSuccessTypeEnum)["enumValues"][number],
12+
data: Record<string, unknown> | null = null,
13+
): Promise<void> {
14+
try {
15+
await db.insert(dbAuditLogsTable).values({
16+
guildId,
17+
eventType,
18+
successType,
19+
data,
20+
occurredAt: new Date(),
21+
});
22+
} catch (error) {
23+
console.error("Error creating audit log entry:", error);
24+
}
25+
}

src/db/botinfo.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
// Rewriting

0 commit comments

Comments
 (0)