feat(review): 重构项目级单方案验收协作
This commit is contained in:
30
api/services/feedbackService.ts
Normal file
30
api/services/feedbackService.ts
Normal file
@@ -0,0 +1,30 @@
|
||||
import { database } from '../database.js';
|
||||
import type { FeedbackReply, FeedbackType } from '../../shared/types.js';
|
||||
|
||||
export type FeedbackTarget = {
|
||||
note_id: number;
|
||||
version_number: number;
|
||||
author_name: string;
|
||||
author_role: 'client' | 'operator';
|
||||
withdrawn_at: string | null;
|
||||
};
|
||||
|
||||
export async function findFeedbackTarget(workId: number, type: FeedbackType, feedbackId: number): Promise<FeedbackTarget | undefined> {
|
||||
if (type === 'image_annotation') {
|
||||
return database.one<FeedbackTarget>(`SELECT i.note_id,i.version_number,a.author_name,a.author_role,a.withdrawn_at
|
||||
FROM annotations a JOIN images i ON i.id=a.image_id WHERE a.id=? AND i.note_id=?`, [feedbackId, workId]);
|
||||
}
|
||||
const table = type === 'text_annotation' ? 'text_annotations' : 'work_comments';
|
||||
return database.one<FeedbackTarget>(`SELECT note_id,version_number,author_name,author_role,withdrawn_at FROM ${table} WHERE id=? AND note_id=?`, [feedbackId, workId]);
|
||||
}
|
||||
|
||||
export async function addFeedbackReply(target: FeedbackTarget, type: FeedbackType, feedbackId: number, content: string, authorName: string, authorRole: 'client' | 'operator'): Promise<FeedbackReply> {
|
||||
const id = await database.insertId(`INSERT INTO feedback_replies (note_id,version_number,feedback_type,feedback_id,content,author_name,author_role)
|
||||
VALUES (?,?,?,?,?,?,?)`, [target.note_id, target.version_number, type, feedbackId, content, authorName, authorRole]);
|
||||
return (await database.one<FeedbackReply>('SELECT * FROM feedback_replies WHERE id=?', [id]))!;
|
||||
}
|
||||
|
||||
export async function withdrawFeedback(type: FeedbackType, feedbackId: number): Promise<void> {
|
||||
const table = type === 'image_annotation' ? 'annotations' : type === 'text_annotation' ? 'text_annotations' : 'work_comments';
|
||||
await database.execute(`UPDATE ${table} SET withdrawn_at=CURRENT_TIMESTAMP WHERE id=? AND withdrawn_at IS NULL`, [feedbackId]);
|
||||
}
|
||||
Reference in New Issue
Block a user