From 182ce5af6bb29ba63edfd649de6fd618084dd7cf Mon Sep 17 00:00:00 2001 From: Moritz Riese Date: Sun, 29 Dec 2024 01:20:01 +0100 Subject: [PATCH] wip db --- bun.lockb | Bin 37265 -> 52200 bytes drizzle.config.ts | 17 +++ drizzle/0000_needy_nightshade.sql | 8 ++ drizzle/meta/0000_snapshot.json | 65 +++++++++ drizzle/meta/_journal.json | 13 ++ mydb.sqlite | Bin 0 -> 24576 bytes package.json | 9 +- process.env | 1 - src/actions/medication/medication.service.ts | 141 +++++++++++++++---- src/db/index.ts | 3 + src/db/schema.ts | 8 ++ src/index.ts | 42 +++++- 12 files changed, 276 insertions(+), 31 deletions(-) create mode 100644 drizzle.config.ts create mode 100644 drizzle/0000_needy_nightshade.sql create mode 100644 drizzle/meta/0000_snapshot.json create mode 100644 drizzle/meta/_journal.json create mode 100644 mydb.sqlite create mode 100644 src/db/index.ts diff --git a/bun.lockb b/bun.lockb index 0dfbcb6b144426c4d5655378ab05ce52c281a710..f93e771c7e7d133679a6498d7342d25711cd94fb 100755 GIT binary patch delta 14806 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 E0H$GL0RR91 delta 5599 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 diff --git a/drizzle.config.ts b/drizzle.config.ts new file mode 100644 index 0000000..5330d22 --- /dev/null +++ b/drizzle.config.ts @@ -0,0 +1,17 @@ +import "dotenv/config"; +import { defineConfig } from "drizzle-kit"; + +const dbFileName = process.env.DB_FILE_NAME; + +if (!dbFileName) { + throw new Error("Die Umgebungsvariable DB_FILE_NAME ist nicht gesetzt."); +} + +export default defineConfig({ + out: "./drizzle", + schema: "./src/db/schema.ts", + dialect: "sqlite", + dbCredentials: { + url: dbFileName, + }, +}); diff --git a/drizzle/0000_needy_nightshade.sql b/drizzle/0000_needy_nightshade.sql new file mode 100644 index 0000000..ecc34d5 --- /dev/null +++ b/drizzle/0000_needy_nightshade.sql @@ -0,0 +1,8 @@ +CREATE TABLE `users_table` ( + `id` integer PRIMARY KEY AUTOINCREMENT NOT NULL, + `name` text NOT NULL, + `discord_id` integer NOT NULL, + `took_medication_today` integer DEFAULT 0 NOT NULL +); +--> statement-breakpoint +CREATE UNIQUE INDEX `users_table_discord_id_unique` ON `users_table` (`discord_id`); \ No newline at end of file diff --git a/drizzle/meta/0000_snapshot.json b/drizzle/meta/0000_snapshot.json new file mode 100644 index 0000000..138f2cb --- /dev/null +++ b/drizzle/meta/0000_snapshot.json @@ -0,0 +1,65 @@ +{ + "version": "6", + "dialect": "sqlite", + "id": "ddb7170b-7f66-4e3c-ab64-9069e760e09a", + "prevId": "00000000-0000-0000-0000-000000000000", + "tables": { + "users_table": { + "name": "users_table", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "discord_id": { + "name": "discord_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "took_medication_today": { + "name": "took_medication_today", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + } + }, + "indexes": { + "users_table_discord_id_unique": { + "name": "users_table_discord_id_unique", + "columns": [ + "discord_id" + ], + "isUnique": true + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + } + }, + "views": {}, + "enums": {}, + "_meta": { + "schemas": {}, + "tables": {}, + "columns": {} + }, + "internal": { + "indexes": {} + } +} \ No newline at end of file diff --git a/drizzle/meta/_journal.json b/drizzle/meta/_journal.json new file mode 100644 index 0000000..3c45250 --- /dev/null +++ b/drizzle/meta/_journal.json @@ -0,0 +1,13 @@ +{ + "version": "7", + "dialect": "sqlite", + "entries": [ + { + "idx": 0, + "version": "6", + "when": 1735431085265, + "tag": "0000_needy_nightshade", + "breakpoints": true + } + ] +} \ No newline at end of file diff --git a/mydb.sqlite b/mydb.sqlite new file mode 100644 index 0000000000000000000000000000000000000000..6a8733d4acde26e969b3fa2b1a04e750e629fcdf GIT binary patch literal 24576 zcmeI&&u-H&90zc_|Mo{J<<_gUT~=*EP5)*$3JX)UuG_j+q9Bo^vAbDY6D>)lu>(@Y zEASp1cmW;(?mP$w4mhRT(yiQ~`dYE-IR2C0$LYaJPET4g6m01EBRgbe@{~|Yo-;-W zNvNDr`8Fk0A$5DAerc@yw_<`k`|u{4`$^JSgXEIA&rde8-&7F^0uX=z1Rwwb2tWV= z5P-n{DKJ@0ujKbP>7*=OF0RLc@B=fn2baR+GH^Vfo06MjS6+=p>|*9+$7pm7)@wIU zdIoE@_l(!fiZyuL+hRxUxh59dvhL@w3dgBTetVntr?UrFmuhoo213p2I^w};dNzHx z@uFq02N$+xy7U#iZkJ}<4*Ii z(dn}Tqt6<>?oqR?Iv*PCE^8mD+-tRVRF7zWi-qDkoU4w-dN*LaTj+Tg=16eq*rD`X zGxWIq{(kN~<5i>A>ayb9pzDQ6fv)7MRXQ2}Su&IR^5#aZ-AJDK(@_F*L0w`ly9{pR?JL z+2hcgo|}vA!PFMjMtk|y=+Bl_ndZI_bs#|i0uX=z1Rwwb2tWV=5P$##An@-99MCkG zWYc^os+CGfvr847545sgA3A!~5k>B3wQ_C1wVF2AE$#9l*UPrXYc*ZygNk0+Eo${j zsZKxTzW(^WuHvG(Uql^95P$##AOHafKmY;|fB*y_009Urp+GW8)}r_S>Z5-o2tWV= z5P$##AOHafKmY;|fB*!RSOEL~C0<;F1_1~_00Izz00bZa0SG_<0uY!9MBo48{XZTD Z2tWV=5P$##AOHafKmY;|fWUGK{03D63vd7c literal 0 HcmV?d00001 diff --git a/package.json b/package.json index e500e56..8d2c927 100644 --- a/package.json +++ b/package.json @@ -10,14 +10,19 @@ "drizzle-kit": "^0.30.1" }, "peerDependencies": { - "typescript": "^5.0.0" + "typescript": "^5.7.2" }, "dependencies": { "@discordjs/rest": "^2.4.0", + "better-sqlite3": "^11.7.0", "cron": "^3.3.1", "discord.js": "^14.16.3", "dotenv": "^16.4.7", "drizzle-orm": "^0.38.3", "zod": "^3.24.1" - } + }, + "trustedDependencies": [ + "better-sqlite3", + "esbuild" + ] } \ No newline at end of file diff --git a/process.env b/process.env index d7e2499..e69de29 100644 --- a/process.env +++ b/process.env @@ -1 +0,0 @@ -DB_FILE_NAME=mydb.sqlite diff --git a/src/actions/medication/medication.service.ts b/src/actions/medication/medication.service.ts index 7abab37..2136f06 100644 --- a/src/actions/medication/medication.service.ts +++ b/src/actions/medication/medication.service.ts @@ -5,11 +5,17 @@ import client from "lib/client"; import { ActionRowBuilder, ButtonBuilder, + ButtonInteraction, ButtonStyle, + ChatInputCommandInteraction, + ModalSubmitInteraction, type CacheType, type Interaction, } from "discord.js"; import { yesButton, noButton } from "./medication.components"; +import { db } from "db"; +import { usersTable } from "db/schema" +import { eq } from "drizzle-orm"; export class MedicationService { medication: string; @@ -57,38 +63,125 @@ export class MedicationService { } async handleInteraction(interaction: Interaction) { - const result = this.setMedication(); - - const yesButton = new ButtonBuilder() - .setCustomId("yesMedication") - .setLabel("ja") - .setStyle(ButtonStyle.Primary); - const noButton = new ButtonBuilder() - .setCustomId("noMedication") - .setLabel("noch nicht") - .setStyle(ButtonStyle.Secondary); - - const row = new ActionRowBuilder().addComponents(yesButton); - row.addComponents(noButton); + if (interaction.isModalSubmit()) { + await this.handleModalSubmit(interaction); + return; + } if (interaction.isChatInputCommand()) { - await interaction.reply({ - content: result.reply, - // biome-ignore lint/suspicious/noExplicitAny: - components: [row as any], - }); - } else if (interaction.isButton()) { - console.log("button interaction"); - if (interaction.customId == "yesMedication") { + await this.handleChatInputCommand(interaction); + return; + } + if (interaction.isButton()) { + await this.handleButton(interaction); + return; + } + } + + async handleModalSubmit(interaction: ModalSubmitInteraction) { + switch (interaction.customId) { + default: + break; + } + } + + async handleButton(interaction: ButtonInteraction) { + console.log("button interaction"); + + const result = this.setMedication(); + const discordId = parseInt(interaction.user.id); + const id = this.getIdByDiscordId(discordId); + console.log("userid: " + discordId); + + + switch (interaction.customId) { + case "yesMedication": interaction.reply({ content: "das hast du toll gemacht <3 mach weiter so :3", }); - } else if (interaction.customId == "noMedication") { + return; + case "noMedication": interaction.reply({ content: "das passiert mal... aber versuch sie heute noch zu nehmen, oki? :)", }); - } - + return; + default: + break; } } + + async handleChatInputCommand(interaction: ChatInputCommandInteraction) { + const result = this.setMedication(); + + const row = new ActionRowBuilder().addComponents(yesButton); + row.addComponents(noButton); + await interaction.reply({ + content: result.reply, + // biome-ignore lint/suspicious/noExplicitAny: + components: [row as any], + }); + + } + + /** + * Methode, um die Benutzerdaten in die Datenbank zu schreiben. + * @param discordId unique user id + * @param name name how the user wants to get called by avocadi + * @param tookMedication if user took medication + */ + async logMedication(discordId: string, name: string, tookMedication: boolean) { + try { + // Versuche, den Benutzer zu speichern oder zu aktualisieren + await db.insert(usersTable).values({ + name: name, + discord_id: parseInt(discordId), + took_medication_today: Number(tookMedication), + }); + + console.log( + `Benutzer mit ID ${discordId} wurde in der Datenbank gespeichert.` + ); + } catch (error) { + console.error("Fehler beim Speichern in der Datenbank:", error); + } + } + + async getNameByDiscordId(discordId: number): Promise { + const result = await db + .select({ + name: usersTable.name, + }) + .from(usersTable) + .where(eq(usersTable.discord_id, discordId)) + .limit(1); + + if (result.length > 0) { + console.log("user found"); + return result[0].name; + } else { + console.log("name not found"); + return ""; + } + } + + async getIdByDiscordId(discordId: number): Promise { + const result = await db + .select({ + id: usersTable.id, + }) + .from(usersTable) + .where(eq(usersTable.discord_id, discordId)) + .limit(1); + + if (result.length > 0) { + console.log("id found"); + return result[0].id; + } else { + console.log("id not found"); + return null; + } + } + + async newEntry(discordId: number) { + } } \ No newline at end of file diff --git a/src/db/index.ts b/src/db/index.ts new file mode 100644 index 0000000..934d492 --- /dev/null +++ b/src/db/index.ts @@ -0,0 +1,3 @@ +import { drizzle } from "drizzle-orm/bun-sqlite"; + +export const db = drizzle(process.env.DB_FILE_NAME!); \ No newline at end of file diff --git a/src/db/schema.ts b/src/db/schema.ts index e69de29..23930b3 100644 --- a/src/db/schema.ts +++ b/src/db/schema.ts @@ -0,0 +1,8 @@ +import { int, sqliteTable, text } from "drizzle-orm/sqlite-core"; + +export const usersTable = sqliteTable("users_table", { + id: int().primaryKey({ autoIncrement: true }), + name: text().notNull(), + discord_id: int().notNull().unique(), + took_medication_today: int().notNull().default(0), +}); diff --git a/src/index.ts b/src/index.ts index 84aedfe..b1d2464 100644 --- a/src/index.ts +++ b/src/index.ts @@ -5,12 +5,46 @@ import "actions/drink/drink.task"; import DiscordController from "controllers/discord.controller"; import 'dotenv/config'; -import { drizzle } from 'drizzle-orm/bun-sqlite'; -import { Database } from 'bun:sqlite'; +/*import { drizzle } from 'drizzle-orm/bun-sqlite'; +import { eq } from 'drizzle-orm'; +import { usersTable } from './db/schema'; +import { db } from "./db" // from index -const sqlite = new Database(process.env.DB_FILE_NAME!); -const db = drizzle({ client: sqlite }); +async function main() { + const user: typeof usersTable.$inferInsert = { + name: 'John', + age: 30, + email: 'john@example.com', + }; + + await db.insert(usersTable).values(user); + console.log('New user created!') + + const users = await db.select().from(usersTable); + console.log('Getting all users from the database: ', users) + /* + const users: { + id: number; + name: string; + age: number; + email: string; + }[] + */ +/* +await db + .update(usersTable) + .set({ + age: 31, + }) + .where(eq(usersTable.email, user.email)); +console.log('User info updated!') + +await db.delete(usersTable).where(eq(usersTable.email, user.email)); +console.log('User deleted!') +} + +main();*/ // = main file