ATC_SIMPLE/BACKEND/app/controllers/prompt_ais_controller.ts

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,
})
}
}
}