96 lines
2.6 KiB
TypeScript
96 lines
2.6 KiB
TypeScript
import Keyword from '#models/keywords'
|
|
import type { HttpContext } from '@adonisjs/core/http'
|
|
|
|
export default class KeywordsController {
|
|
/**
|
|
* Display a list of resource
|
|
*/
|
|
async get({}: HttpContext) {
|
|
const keywords = await Keyword.all()
|
|
return { status: true, data: keywords }
|
|
}
|
|
|
|
/**
|
|
* Display form to create a new record
|
|
*/
|
|
async create({ auth, request, response }: HttpContext) {
|
|
let payload = request.only([...Array.from(Keyword.$columnsDefinitions.keys())])
|
|
try {
|
|
// Check exist model
|
|
const existedKeyword = await Keyword.findBy('name', payload.name)
|
|
if (existedKeyword) {
|
|
return response.badRequest({
|
|
status: false,
|
|
message: 'Keyword already exists',
|
|
})
|
|
}
|
|
|
|
const keyword = await Keyword.create({
|
|
...payload,
|
|
})
|
|
return response.created({
|
|
status: true,
|
|
message: 'Keyword created successfully',
|
|
data: keyword,
|
|
})
|
|
} catch (error) {
|
|
return response.badRequest({ error: error, message: 'Keyword create failed', status: false })
|
|
}
|
|
}
|
|
|
|
async update({ request, response, auth }: HttpContext) {
|
|
let payload = request.only(
|
|
Array.from(Keyword.$columnsDefinitions.keys()).filter(
|
|
(f) => f !== 'created_at' && f !== 'updated_at'
|
|
)
|
|
)
|
|
try {
|
|
const keyword = await Keyword.find(request.body().id)
|
|
if (!keyword) {
|
|
return response.status(404).json({ message: 'Keyword not found' })
|
|
}
|
|
|
|
// Check exist model
|
|
const existedKeyword = await Keyword.findBy('name', payload.name)
|
|
if (existedKeyword && existedKeyword.id !== keyword.id) {
|
|
return response.badRequest({
|
|
status: false,
|
|
message: 'Keyword already exists',
|
|
})
|
|
}
|
|
|
|
Object.assign(keyword, { ...payload })
|
|
await keyword.save()
|
|
return response.ok({ status: true, message: 'Keyword update successfully', data: keyword })
|
|
} catch (error) {
|
|
return response.badRequest({ error: error, message: 'Keyword update failed', status: false })
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Delete record
|
|
*/
|
|
async delete({ auth, request, response }: HttpContext) {
|
|
try {
|
|
const keyword = await Keyword.find(request.body().id)
|
|
if (!keyword) {
|
|
return response.status(404).json({ message: 'Keyword not found' })
|
|
}
|
|
|
|
// Delete the keyword
|
|
await keyword.delete()
|
|
return response.ok({
|
|
status: true,
|
|
message: 'Keyword delete successfully',
|
|
data: keyword,
|
|
})
|
|
} catch (error) {
|
|
return response.badRequest({
|
|
error: error,
|
|
message: 'Keyword delete failed',
|
|
status: false,
|
|
})
|
|
}
|
|
}
|
|
}
|