136 lines
3.9 KiB
TypeScript
136 lines
3.9 KiB
TypeScript
import PromptAi from '#models/prompt_ai'
|
|
import type { HttpContext } from '@adonisjs/core/http'
|
|
|
|
export default class PromptAisController {
|
|
/**
|
|
* Display a list of all prompt AIs
|
|
*/
|
|
async get({}: HttpContext) {
|
|
const promptAis = await PromptAi.all()
|
|
return { status: true, data: promptAis }
|
|
}
|
|
|
|
/**
|
|
* Get prompt AI by type
|
|
*/
|
|
async getByType({ request, response }: HttpContext) {
|
|
try {
|
|
const { type } = request.only(['type'])
|
|
if (!type) {
|
|
return response.badRequest({ status: false, message: 'Type is required' })
|
|
}
|
|
|
|
const promptAis = await PromptAi.query().where('type', type).where('is_active', true)
|
|
return { status: true, data: promptAis }
|
|
} catch (error) {
|
|
return response.badRequest({
|
|
error: error,
|
|
message: 'Failed to get prompt AI by type',
|
|
status: false,
|
|
})
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Create a new prompt AI
|
|
*/
|
|
async create({ request, response }: HttpContext) {
|
|
let payload = request.only(['title', 'content', 'description', 'type', 'is_active'])
|
|
try {
|
|
// Check if title already exists
|
|
const existedPromptAi = await PromptAi.findBy('title', payload.title)
|
|
if (existedPromptAi) {
|
|
return response.badRequest({
|
|
status: false,
|
|
message: 'Prompt AI with this title already exists',
|
|
})
|
|
}
|
|
|
|
const promptAi = await PromptAi.create({
|
|
title: payload.title,
|
|
content: payload.content,
|
|
description: payload.description || null,
|
|
type: payload.type || 'general',
|
|
is_active: payload.is_active !== undefined ? payload.is_active : true,
|
|
})
|
|
return response.created({
|
|
status: true,
|
|
message: 'Prompt AI created successfully',
|
|
data: promptAi,
|
|
})
|
|
} catch (error) {
|
|
return response.badRequest({
|
|
error: error,
|
|
message: 'Prompt AI create failed',
|
|
status: false,
|
|
})
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Update prompt AI
|
|
*/
|
|
async update({ request, response }: HttpContext) {
|
|
let payload = request.only(['id', 'title', 'content', 'description', 'type', 'is_active'])
|
|
try {
|
|
const promptAi = await PromptAi.find(payload.id)
|
|
if (!promptAi) {
|
|
return response.status(404).json({ status: false, message: 'Prompt AI not found' })
|
|
}
|
|
|
|
// Check if title already exists (and it's not the same record)
|
|
if (payload.title && payload.title !== promptAi.title) {
|
|
const existedPromptAi = await PromptAi.findBy('title', payload.title)
|
|
if (existedPromptAi) {
|
|
return response.badRequest({
|
|
status: false,
|
|
message: 'Prompt AI with this title already exists',
|
|
})
|
|
}
|
|
}
|
|
|
|
Object.assign(promptAi, {
|
|
title: payload.title || promptAi.title,
|
|
content: payload.content || promptAi.content,
|
|
description: payload.description !== undefined ? payload.description : promptAi.description,
|
|
type: payload.type || promptAi.type,
|
|
is_active: payload.is_active !== undefined ? payload.is_active : promptAi.is_active,
|
|
})
|
|
await promptAi.save()
|
|
return response.ok({
|
|
status: true,
|
|
message: 'Prompt AI updated successfully',
|
|
data: promptAi,
|
|
})
|
|
} catch (error) {
|
|
return response.badRequest({
|
|
error: error,
|
|
message: 'Prompt AI update failed',
|
|
status: false,
|
|
})
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Delete prompt AI
|
|
*/
|
|
async delete({ request, response }: HttpContext) {
|
|
try {
|
|
const { id } = request.only(['id'])
|
|
const promptAi = await PromptAi.find(id)
|
|
if (!promptAi) {
|
|
return response.status(404).json({ status: false, message: 'Prompt AI not found' })
|
|
}
|
|
|
|
await promptAi.delete()
|
|
return response.ok({ status: true, message: 'Prompt AI deleted successfully' })
|
|
} catch (error) {
|
|
return response.badRequest({
|
|
error: error,
|
|
message: 'Prompt AI delete failed',
|
|
status: false,
|
|
})
|
|
}
|
|
}
|
|
}
|