Skip to content
Snippets Groups Projects
Commit 7c2ed1bb authored by Richard Fernando Heise Ferreira's avatar Richard Fernando Heise Ferreira
Browse files

Merge branch 'issue/1-edit-user-route' into 'develop'

Issue/1 update user route

See merge request !2
parents 21d4745e 7473c5be
No related branches found
No related tags found
1 merge request!2Issue/1 update user route
......@@ -4,6 +4,7 @@ import userTable, {
userSchemas,
type UserInput,
type UserModel,
type UserUpdate,
} from '../schema/user.model'
import { z } from 'zod'
import { eq } from 'drizzle-orm'
......@@ -57,4 +58,15 @@ export class UserRepo {
.parse(await tx.insert(userTable).values(users).returning())
})
}
async update(user: UserUpdate): Promise<UserModel>{
const [ret] = await db
.update(userTable)
.set(user)
.where(eq(userTable.id, user.id))
.returning()
return userSchemas.userModelSchema.parse(ret)
}
}
......@@ -14,13 +14,18 @@ const userModelSchema = createSelectSchema(userTable)
const userDtoSchema = createSelectSchema(userTable).omit({
password: true,
})
const userUpdateSchema = createSelectSchema(userTable)
.partial()
.required({ id: true })
export type UserInput = z.infer<typeof userInputSchema>
export type UserUpdate = z.infer<typeof userUpdateSchema>
export type UserModel = z.infer<typeof userModelSchema>
export type UserDto = z.infer<typeof userDtoSchema>
export const userSchemas = {
userInputSchema,
userUpdateSchema,
userModelSchema,
userDtoSchema,
}
......
import { Hono } from 'hono'
import { logger } from 'hono/logger'
import { userRouter } from './routes/user.routes'
import { signUpRouter, userRouter } from './routes/user.routes'
import { authRouter } from './routes/auth.route'
import { jwt } from 'hono/jwt'
import env from './env'
......@@ -46,7 +46,8 @@ app.use(
app.get('/', (c) => c.json({ message: 'sv running on /api' }))
app.route('auth', authRouter)
app.route('/auth', authRouter)
app.route('/signup', signUpRouter)
app
.basePath('/api')
......
......@@ -4,21 +4,29 @@ import { Container } from 'typedi'
import { z } from 'zod'
import { zValidator } from '@hono/zod-validator'
import { honoWithJwt } from '..'
import { Hono } from 'hono'
import { createApexError, HttpStatus } from '@/services/error.service'
const service = Container.get(UserService)
export const userRouter = honoWithJwt()
.get('/:username', async (c) => {
export const signUpRouter = new Hono()
.post('/',
zValidator('json', userSchemas.userInputSchema),
async (c) => {
try {
const username = c.req.param('username')
const user = await service.findByUsername(username)
const ret = userSchemas.userDtoSchema.parse(user)
const input = await c.req.valid('json')
return c.json({ user: ret })
} catch {
return c.notFound()
const user = userSchemas.userDtoSchema.parse(
await service.create(input)
)
return c.json({ user })
} catch (e) {
return c.text('could not create')
}
})
export const userRouter = honoWithJwt()
.get('/users', async (c) => {
const p = c.get('jwtPayload')
......@@ -30,20 +38,40 @@ export const userRouter = honoWithJwt()
return c.json({ users: ret })
})
.post(
'/create',
zValidator('json', userSchemas.userInputSchema),
.get('/:username', async (c) => {
try {
const username = c.req.param('username')
const user = await service.findByUsername(username)
const ret = userSchemas.userDtoSchema.parse(user)
return c.json({ user: ret })
} catch {
return c.notFound()
}
})
.post('/update',
zValidator('json', userSchemas.userUpdateSchema),
async (c) => {
try {
const input = await c.req.valid('json')
const user = userSchemas.userDtoSchema.parse(
await service.create(input)
await service.update(input)
)
return c.json({user})
} catch (e) {
return c.text('could not create')
}
}
return c.json(
createApexError({
status: 'error',
message: 'could not update user',
code: HttpStatus.BAD_REQUEST,
path: c.req.routePath,
suggestion: 'check the input and try again',
}),
HttpStatus.BAD_REQUEST
)
}
})
......@@ -5,6 +5,7 @@ import {
userSchemas,
type UserInput,
type UserModel,
type UserUpdate,
} from '@/db/schema/user.model'
import { Inject, Service } from 'typedi'
import { z } from 'zod'
......@@ -51,4 +52,10 @@ export class UserService {
return this.repo.uploadUsers(users)
}
async update(user: UserUpdate): Promise<UserModel> {
if(user.password)
user.password = hashPassword(user.password)
return this.repo.update(user)
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment