UNPKG

@shagital/adonisjs-crud-generator

Version:

Adonisjs Admin Panel Generator is a package that helps you quickly scaffold your typical CRUD admin interfaces. It generates the admin panel code based on the existing (migrated) table in the database

142 lines (117 loc) 3.97 kB
import { ResponseContract, HttpContextContract } from '@ioc:Adonis/Core/HttpContext' import { schema, rules, validator } from '@ioc:Adonis/Core/Validator' import {{pascalName}} from 'App/Models/{{pascalName}}' import moment from 'moment' const tableColumns = {{tableColumns}} const allowedRelationships = {{pascalName}}.allowedRelationships() /** * Resourceful controller for interacting with {{pluralName}} */ export default class {{pascalNamePlural}}Controller { /** * Show a list of all {{pluralName}}. * GET {{prefix}}/{{pluralName}} * */ public async index ({ request, response }: HttpContextContract): ResponseContract { let qs = request.qs() let query = {{pascalName}}.query() {{filters}} if (qs.with) { let requestedRelationships = qs.with ? qs.with.split(',') : [] for(let relationship of requestedRelationships) { if(allowedRelationships.includes(relationship)) { query.preload(relationship) } } } let orderBy = {{pascalName}}.primaryKey let order: 'desc' | 'asc' = 'desc' if(qs.sort) { let split = qs.sort.split('|') if(tableColumns.includes(split[0]) && ['desc', 'asc'].includes(split[1].toLowerCase())) { orderBy = split[0] order = split[1].toLowerCase() } } query.orderBy(orderBy, order) let data = await query.paginate(qs.page || 1, qs.per_page || 25) return response.send(data) } /** * Create/save a new {{singularName}}. * POST {{prefix}}/{{pluralName}} * */ public async store ({ params, request, response }: HttpContextContract): ResponseContract { const data = request.only({{filteredColumns}}) let validationErrors = {} try { await validator.validate({ schema: schema.create({ {{rulesArray}} }), data, }) } catch (e) { validationErrors = e.messages } if (Object.keys(validationErrors).length) { return response.status(422).send({errors: validationErrors}) } let {{singularName}} = await {{pascalName}}.create(data) let message = "{{pascalName}} created successfully" return response.status(201).send({ message, data: {{singularName}} }) } /** * Display a single {{singularName}}. * GET {{prefix}}/{{pluralName}}/:id * */ public async show ({ params, response }: HttpContextContract): ResponseContract { let {{singularName}} = await {{pascalName}}.findOrFail(params[{{pascalName}}.primaryKey]) let data = {data: {{singularName}}} return response.send(data) } /** * Update {{singularName}} details. * PATCH {{prefix}}/{{pluralName}}/:id * */ public async update ({ params, request, response }: HttpContextContract): ResponseContract { const data = request.only({{filteredColumns}}) let validationErrors = {} try { await validator.validate({ schema: schema.create({ {{rulesArray}} }), data, }) } catch (e) { validationErrors = e.messages } if (Object.keys(validationErrors).length) { return response.status(422).send({errors: validationErrors}) } let {{singularName}} = await {{pascalName}}.findOrFail(params[{{pascalName}}.primaryKey]) let filledData = {} Object.keys(data).forEach(input => { if(data[input]) filledData[input] = data[input] }) {{singularName}}.merge(filledData) await {{singularName}}.save() let message = "{{pascalName}} updated successfully" return response.status(200).send({ message, data: {{singularName}} }) } /** * Delete a {{singularName}} with id. * DELETE {{prefix}}/{{pluralName}}/:id * */ public async destroy ({ params, response }: HttpContextContract): ResponseContract { let {{singularName}} = await {{pascalName}}.findOrFail(params[{{pascalName}}.primaryKey]) {{singularName}}.delete() return response.status(204).send('') } }