ATC_SIMPLE/BACKEND/app/controllers/users_controller.ts

92 lines
2.9 KiB
TypeScript

import User from '#models/user'
import type { HttpContext } from '@adonisjs/core/http'
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(['user_name', 'email', 'password'])
// Check if email already exists
const existingUser = await User.findBy('user_name', data.user_name)
if (existingUser) {
return response.conflict({
status: false,
message: 'Username already exists',
})
}
const user = await User.create({
userName: data.user_name,
email: data.email,
password: data.password,
})
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(['user_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('user_name', data.user_name)
if (existingUser) {
return response.conflict({
status: false,
message: 'Username already exists',
})
}
}
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 })
}
}
}