feat(ai): implement unified prompt management UX/UI (ADR-037)
CI / CD Pipeline / build (push) Failing after 3m23s
CI / CD Pipeline / deploy (push) Has been skipped

- Add context config endpoints (GET/PUT /api/ai/prompts/:type/:version/context-config)
- Add execution profile endpoints (CRUD /api/ai/execution-profiles)
- Add sandbox RAG Prep endpoint (POST /api/ai/admin/sandbox/rag-prep)
- Create Prompt Management UI with multi-type support
- Add ContextConfigEditor, PromptEditor, RuntimeParametersPanel components
- Add SandboxTabs for 3-step workflow (OCR, Extract, RAG Prep)
- Add database deltas for ai_execution_profiles and additional prompt types
- Update quickstart.md with production backend URLs
- Add comprehensive test coverage for new features
This commit is contained in:
2026-06-14 19:55:43 +07:00
parent 56f9544cb0
commit 67da186672
64 changed files with 6327 additions and 6107 deletions
@@ -64,7 +64,7 @@ describe('rfaService', () => {
it('ควรส่ง RFA เข้า workflow', async () => {
const mockResponse = { data: { publicId: 'uuid-1', status: 'SUBMITTED' } };
vi.mocked(apiClient.post).mockResolvedValue(mockResponse);
const submitDto = { templateId: 1, reviewTeamPublicId: 'uuid-team' };
const submitDto = { reviewTeamPublicId: 'uuid-team' };
const result = await rfaService.submit('uuid-1', submitDto);
expect(apiClient.post).toHaveBeenCalledWith('/rfas/uuid-1/submit', submitDto);
expect(result).toEqual(mockResponse.data);
+55
View File
@@ -1,5 +1,6 @@
// File: lib/services/admin-ai.service.ts
// Change Log
// - 2026-06-14: เพิ่ม methods สำหรับจัดการ Prompt Versions และ RAG Prep Sandbox (T020, T030, T039)
// - 2026-05-21: เพิ่ม service สำหรับ AI Admin Console toggle API.
// - 2026-05-21: เพิ่ม service method `getHealth` สำหรับดึงข้อมูลสุขภาพของระบบ AI (T028).
// - 2026-05-21: เพิ่ม API service สำหรับ Superadmin Sandbox RAG (T037).
@@ -20,6 +21,7 @@
import api from '../api/client';
import { AiJobResponse } from '../../types/ai';
import { PromptType, PromptVersion, ContextConfig } from '../types/ai-prompts';
export interface AiAdminSettings {
aiFeaturesEnabled: boolean;
@@ -403,6 +405,59 @@ export const adminAiService = {
});
return extractData<AiJobResponse>(data);
},
listPrompts: async (type: PromptType): Promise<PromptVersion[]> => {
const { data } = await api.get(`/ai/prompts/${type}`);
return extractData<PromptVersion[]>(data);
},
createPrompt: async (
type: PromptType,
updates: { template: string; contextConfig?: ContextConfig | null; manualNote?: string }
): Promise<PromptVersion> => {
const { data } = await api.post(`/ai/prompts/${type}`, updates);
return extractData<PromptVersion>(data);
},
deletePrompt: async (type: PromptType, versionNumber: number): Promise<void> => {
await api.delete(`/ai/prompts/${type}/${versionNumber}`);
},
activatePrompt: async (type: PromptType, versionNumber: number): Promise<PromptVersion> => {
const { data } = await api.post(`/ai/prompts/${type}/${versionNumber}/activate`);
return extractData<PromptVersion>(data);
},
updatePromptNote: async (
type: PromptType,
versionNumber: number,
manualNote: string
): Promise<PromptVersion> => {
const { data } = await api.patch(`/ai/prompts/${type}/${versionNumber}/note`, { manualNote });
return extractData<PromptVersion>(data);
},
getContextConfig: async (type: PromptType, versionNumber: number): Promise<ContextConfig> => {
const { data } = await api.get(`/ai/prompts/${type}/${versionNumber}/context-config`);
return extractData<ContextConfig>(data);
},
updateContextConfig: async (
type: PromptType,
versionNumber: number,
contextConfig: ContextConfig
): Promise<ContextConfig> => {
const { data } = await api.put(`/ai/prompts/${type}/${versionNumber}/context-config`, contextConfig);
return extractData<ContextConfig>(data);
},
submitSandboxRagPrep: async (
text: string,
profileId?: string | null
): Promise<{ jobId: string; status: string }> => {
const { data } = await api.post('/ai/admin/sandbox/rag-prep', { text, profileId });
return extractData<{ jobId: string; status: string }>(data);
},
};
export interface OcrEngineResponse {
-1
View File
@@ -10,7 +10,6 @@ export interface WorkflowActionDto {
}
export interface SubmitRfaDto {
templateId: number;
reviewTeamPublicId?: string;
}