Skip to content

Commit

Permalink
feat(user): record user's first and last name
Browse files Browse the repository at this point in the history
  • Loading branch information
tfkhdyt committed Sep 28, 2023
1 parent 607e74f commit c69da2c
Show file tree
Hide file tree
Showing 6 changed files with 64 additions and 15 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
CREATE TABLE `users` (
`id` integer PRIMARY KEY NOT NULL,
`username` text(50) NOT NULL,
`username` text(50),
`first_name` text(255),
`last_name` text(255),
`credits` integer DEFAULT 3
);
18 changes: 16 additions & 2 deletions drizzle/meta/0000_snapshot.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"version": "5",
"dialect": "sqlite",
"id": "6e40828e-5f67-457d-b1fc-bac818a29d7e",
"id": "add0072b-fb22-4265-a6f1-868a4ec26d05",
"prevId": "00000000-0000-0000-0000-000000000000",
"tables": {
"users": {
Expand All @@ -18,7 +18,21 @@
"name": "username",
"type": "text(50)",
"primaryKey": false,
"notNull": true,
"notNull": false,
"autoincrement": false
},
"first_name": {
"name": "first_name",
"type": "text(255)",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"last_name": {
"name": "last_name",
"type": "text(255)",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"credits": {
Expand Down
4 changes: 2 additions & 2 deletions drizzle/meta/_journal.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
{
"idx": 0,
"version": "5",
"when": 1695787466171,
"tag": "0000_foamy_shinko_yamashiro",
"when": 1695874253165,
"tag": "0000_zippy_hemingway",
"breakpoints": true
}
]
Expand Down
4 changes: 3 additions & 1 deletion src/db/postgres/schemas/user.schema.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@ import { integer, sqliteTable, text } from 'drizzle-orm/sqlite-core'

export const users = sqliteTable('users', {
id: integer('id').primaryKey(),
username: text('username', { length: 50 }).notNull(),
username: text('username', { length: 50 }),
firstName: text('first_name', { length: 255 }),
lastName: text('last_name', { length: 255 }),
credits: integer('credits').default(3),
})

Expand Down
43 changes: 35 additions & 8 deletions src/middlewares/user.middleware.ts
Original file line number Diff line number Diff line change
@@ -1,22 +1,49 @@
import { MyContext } from '../interfaces/context'
import { addUser, findUserByID } from '../repositories/user.repository'
import {
addUser,
findUserByID,
updateUser,
} from '../repositories/user.repository'

export const checkUserMiddleware = async (
ctx: MyContext,
next: () => Promise<void>,
) => {
try {
const userId = ctx.from?.id
const username = ctx.from?.username
if (!userId || !username)
const user = ctx.from
if (!user) {
throw new Error('User ID atau Username anda tidak valid')
}
const { id, username, first_name: firstName, last_name: lastName } = user

let userData = await findUserByID(id)
if (userData.length === 0) {
userData = await addUser({ id, username, firstName, lastName })
} else {
const {
username: usernameDb,
firstName: firstNameDb,
lastName: lastNameDb,
} = userData[0]

let user = await findUserByID(userId)
if (user.length === 0) {
user = await addUser({ id: userId, username })
if (
usernameDb !== username ||
firstNameDb !== firstName ||
lastNameDb !== lastName
) {
const updatedUser = await updateUser(id, {
username,
firstName,
lastName,
})
if (updatedUser.length === 0) {
throw new Error('Gagal untuk memperbarui akun')
}
userData = updatedUser
}
}

ctx.user = user[0]
ctx.user = userData[0]

await next()
} catch (error) {
Expand Down
6 changes: 5 additions & 1 deletion src/repositories/user.repository.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,18 @@
import { eq, lt, sql } from 'drizzle-orm'
import { NewUser } from './../db/postgres/schemas/user.schema'

import { db } from '../db/postgres'
import { NewUser, users } from '../db/postgres/schemas/user.schema'
import { users } from '../db/postgres/schemas/user.schema'

export const findUserByID = async (id: number) =>
await db.select().from(users).where(eq(users.id, id))

export const addUser = async (user: NewUser) =>
await db.insert(users).values(user).returning()

export const updateUser = async (id: number, user: NewUser) =>
await db.update(users).set(user).where(eq(users.id, id)).returning()

export const decreaseCredits = async (userId: number) =>
await db
.update(users)
Expand Down

0 comments on commit c69da2c

Please sign in to comment.