import { HttpContextContract } from '@ioc:Adonis/Core/HttpContext' import Employee from 'App/Models/Employee' import UpdateEmployeeValidator from 'App/Validators/UpdateEmployeeValidator' import CreateEmployeeValidator from 'App/Validators/CreateEmployeeValidator' import Database from '@ioc:Adonis/Lucid/Database' // TODO: #1 Implement paginator for Employee-Index export default class EmployeesController { public async index ({bouncer}: HttpContextContract) { await bouncer.authorize('employees.index') return await Database.from('employees').select('*') } public async store ({request}: HttpContextContract) { try { const payload = await request.validate(CreateEmployeeValidator) return await Employee.create({ firstName: payload.firstName, lastName: payload.lastName, shorthand: payload.shorthand, email: payload.email, phone: payload.phone, mobile: payload.mobile, contractHours: payload.contractHours, }) } catch (error) { return error } } public async show ({params, bouncer}: HttpContextContract) { const emp = await Employee.findOrFail(params.id) if (await bouncer.denies('employees.show', emp)){ return 'Not admin or wrong user' } return emp } public async update ({params, request}: HttpContextContract) { const employee : Employee = await Employee.findOrFail(params.id) try { const payload = await request.validate(UpdateEmployeeValidator) employee.firstName = payload.firstName employee.lastName = payload.lastName ?? '' employee.shorthand = payload.shorthand employee.email = payload.email ?? '' employee.phone = payload.phone ?? '' employee.mobile = payload.mobile ?? '' employee.contractHours = payload.contractHours ?? 0 return await employee.save() } catch(error) { return error } } public async destroy ({params}: HttpContextContract) { return await Database.from('employees').where('id', params.id).delete() } }