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 })
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 |