From 01e0860522a911f176e45c7deacd9ad0afae995f Mon Sep 17 00:00:00 2001 From: tfkhdyt Date: Wed, 27 Sep 2023 12:38:53 +0700 Subject: [PATCH] refactor: create functions for handlers --- src/db/postgres/index.ts | 7 +++++++ src/handlers/saldoHandler.ts | 12 ++++++++++++ src/handlers/textHandler.ts | 23 +++++++++++++++++++++++ src/middlewares/user.middleware.ts | 26 ++++++++++++++++++++++++++ 4 files changed, 68 insertions(+) create mode 100644 src/handlers/saldoHandler.ts create mode 100644 src/handlers/textHandler.ts create mode 100644 src/middlewares/user.middleware.ts diff --git a/src/db/postgres/index.ts b/src/db/postgres/index.ts index 23379cf..8cb7ec8 100644 --- a/src/db/postgres/index.ts +++ b/src/db/postgres/index.ts @@ -1,5 +1,6 @@ import { createClient } from '@libsql/client' import { drizzle } from 'drizzle-orm/libsql' +import { migrate } from 'drizzle-orm/libsql/migrator' import config from '../../config/config' @@ -9,3 +10,9 @@ const client = createClient({ }) export const db = drizzle(client) export type DB = typeof db + +export async function startMigration() { + console.log('Running migration...') + await migrate(db, { migrationsFolder: 'drizzle' }) + console.log('Migrations is done') +} \ No newline at end of file diff --git a/src/handlers/saldoHandler.ts b/src/handlers/saldoHandler.ts new file mode 100644 index 0000000..60cd7d4 --- /dev/null +++ b/src/handlers/saldoHandler.ts @@ -0,0 +1,12 @@ +import { MyContext } from '../interfaces/context' + +export const saldoHandler = async (ctx: MyContext) => { + try { + const user = ctx.user + + ctx.reply(`Jumlah saldo mu adalah: ${user.credits}`) + } catch (error) { + console.error(error) + ctx.reply(`Terjadi error yang tak terduga!, ${error}`) + } +} diff --git a/src/handlers/textHandler.ts b/src/handlers/textHandler.ts new file mode 100644 index 0000000..66fbca2 --- /dev/null +++ b/src/handlers/textHandler.ts @@ -0,0 +1,23 @@ +import { NarrowedContext } from 'telegraf' +import { Message, Update } from 'telegraf/typings/core/types/typegram' +import { MyContext } from '../interfaces/context' + +export const textHandler = async ( + ctx: NarrowedContext< + MyContext, + Update.MessageUpdate & Message.TextMessage> + >, +) => { + try { + if (ctx.user.credits === 0) { + return ctx.reply( + 'Maaf, saldo anda tidak cukup, silakan isi ulang atau tunggu besok hari', + ) + } + + const keyword = ctx.message.text + await app.main(ctx, keyword) + } catch (error) { + console.error(error) + } +} diff --git a/src/middlewares/user.middleware.ts b/src/middlewares/user.middleware.ts new file mode 100644 index 0000000..0c32be7 --- /dev/null +++ b/src/middlewares/user.middleware.ts @@ -0,0 +1,26 @@ +import { MyContext } from '../interfaces/context' +import { addUser, findUserByID } from '../user.repository' + +export const checkUserMiddleware = async ( + ctx: MyContext, + next: () => Promise, +) => { + try { + const userId = ctx.from?.id + const username = ctx.from?.username + if (!userId || !username) + throw new Error('User ID atau Username anda tidak valid') + + const user = await findUserByID(userId) + if (user.length === 0) { + await addUser({ id: userId, username }) + } + + ctx.user = user[0] + + await next() + } catch (error) { + console.error(error) + ctx.reply(`Terjadi error yang tak terduga!, ${error}`) + } +}