92 lines
2.9 KiB
TypeScript
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 })
|
|
}
|
|
}
|
|
}
|