ATC_SIMPLE/BACKEND/app/controllers/users_controller.ts

101 lines
3.2 KiB
TypeScript

import User from '#models/user'
import type { HttpContext } from '@adonisjs/core/http'
import hash from '@adonisjs/core/services/hash'
export default class UsersController {
async index({ request, response }: HttpContext) {
const search = request.input('search', '')
const perPage = request.input('per_page', 10)
const page = request.input('page', 1)
const users = await User.query().orderBy('created_at', 'desc').paginate(page, perPage)
return response.ok({ status: true, data: users })
}
async get({ params, response }: HttpContext) {
const user = await User.query().where('id', params.id).firstOrFail() // Preload package data
return response.ok({ status: true, data: user })
}
async getByEmail({ request, response }: HttpContext) {
const data = request.only(['email'])
const user = await User.query().where('email', data.email).firstOrFail() // Preload package data
return response.ok({ status: true, data: user })
}
async store({ request, response }: HttpContext) {
try {
const data = request.only(['full_name', 'email', 'password'])
// Check if email already exists
const existingUser = await User.findBy('email', data.email)
if (existingUser) {
return response.conflict({
status: false,
message: 'Email already exists',
})
}
// Hash the password before saving
const hashedPassword = await hash.make(data.password)
const user = await User.create({
fullName: data.full_name,
email: data.email,
password: hashedPassword,
})
return response.created({
status: true,
message: 'User created successfully',
data: user,
})
} catch (error) {
return response.badRequest({ error: error.message || 'User create failed', status: false })
}
}
async update({ params, request, response }: HttpContext) {
try {
const user = await User.findOrFail(params.id)
const data = request.only(['full_name', 'email', 'password']) // Include password
// Check if email already exists for another user
if (data.email)
if (data.email !== user.email) {
const existingUser = await User.findBy('email', data.email)
if (existingUser) {
return response.conflict({
status: false,
message: 'Email already exists',
})
}
}
// Hash the password if it is provided
if (data.password) {
data.password = await hash.make(data.password)
}
user.merge(data)
await user.save()
return response.ok({ status: true, message: 'User updated successfully', data: user })
} catch (error) {
return response.badRequest({ error: error.message || 'User update failed', status: false })
}
}
async destroy({ params, response }: HttpContext) {
try {
const user = await User.findOrFail(params.id)
await user.delete()
return response.ok({ status: true, message: 'User deleted successfully', data: user })
} catch (error) {
return response.badRequest({ error: error.message || 'User delete failed', status: false })
}
}
}