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(['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', }) } const user = await User.create({ fullName: data.full_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(['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', }) } } 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 }) } } }