82 lines
3.0 KiB
Handlebars
Executable File
82 lines
3.0 KiB
Handlebars
Executable File
import { HttpContext } from '@adonisjs/core/http'
|
|
import { create{{capName}}Validator } from '#modules/{{capName}}/validators/{{snakeName}}_create_validator'
|
|
import { update{{capName}}Validator } from '#modules/{{capName}}/validators/{{snakeName}}_update_validator'
|
|
import { addSearchFilter, searchableColumns } from '#services/database_inspector'
|
|
import {{pascalCaseName}} from '#modules/{{capName}}/model/{{snakeName}}'
|
|
import {{pascalCaseName}}Policy from '#modules/{{capName}}/policy/{{snakeName}}_policy'
|
|
|
|
export default class {{pascalCaseName}}Controller {
|
|
public async index({ request, response, bouncer }: HttpContext) {
|
|
await bouncer.with({{pascalCaseName}}Policy).authorize('view{{pascalCaseName}}List')
|
|
|
|
const {
|
|
page = 1,
|
|
perPage = 10,
|
|
search = null,
|
|
sortBy = 'id',
|
|
sortOrder = 'desc',
|
|
} = request.all()
|
|
|
|
const query = {{pascalCaseName}}.query()
|
|
|
|
if (search) {
|
|
const columns = {{pascalCaseName}}.searchable || (await searchableColumns('{{tableName}}'))
|
|
addSearchFilter(query, columns, search)
|
|
}
|
|
|
|
const result = await query.orderBy(sortBy, sortOrder).paginate(page, perPage)
|
|
return response.ok(result.toJSON())
|
|
}
|
|
|
|
public async store({ request, response, bouncer }: HttpContext) {
|
|
await bouncer.with({{pascalCaseName}}Policy).authorize('create{{pascalCaseName}}')
|
|
|
|
const data = await create{{capName}}Validator.validate(request.all())
|
|
const record = await {{pascalCaseName}}.create(data)
|
|
|
|
if (record) {
|
|
return response.created(record.toJSON())
|
|
}
|
|
return response.badRequest({ message: 'Cannot create.' })
|
|
}
|
|
|
|
public async show({ request, response, bouncer }: HttpContext) {
|
|
const { id } = request.params()
|
|
if (!id) return response.notFound({ message: 'Not found.' })
|
|
|
|
const record = await {{pascalCaseName}}.find(id)
|
|
if (!record) return response.notFound({ message: 'Not found.' })
|
|
|
|
await bouncer.with({{pascalCaseName}}Policy).authorize('view{{pascalCaseName}}')
|
|
return response.ok(record.toJSON())
|
|
}
|
|
|
|
public async update({ request, response, bouncer }: HttpContext) {
|
|
const { id } = request.params()
|
|
if (!id) return response.notFound({ message: 'Not found.' })
|
|
|
|
const data = await update{{capName}}Validator.validate(request.all())
|
|
const record = await {{pascalCaseName}}.find(id)
|
|
if (!record) return response.notFound({ message: 'Not found.' })
|
|
|
|
await bouncer.with({{pascalCaseName}}Policy).authorize('update{{pascalCaseName}}')
|
|
record.merge(data)
|
|
await record.save()
|
|
|
|
return response.ok(record.toJSON())
|
|
}
|
|
|
|
public async destroy({ request, response, bouncer }: HttpContext) {
|
|
const { id } = request.params()
|
|
if (!id) return response.notFound({ message: 'Not found.' })
|
|
|
|
const record = await {{pascalCaseName}}.find(id)
|
|
if (!record) return response.notFound({ message: 'Not found.' })
|
|
|
|
await bouncer.with({{pascalCaseName}}Policy).authorize('delete{{pascalCaseName}}')
|
|
await {{pascalCaseName}}.query().where('id', id).delete()
|
|
|
|
return response.ok({ message: 'Deleted.' })
|
|
}
|
|
}
|