계약 DTO SSOT 3차

This commit is contained in:
Yun Chan 2026-06-27 18:27:30 +09:00
parent 1007eaf7d9
commit 480fbd543a
10 changed files with 90 additions and 162 deletions

View file

@ -197,10 +197,7 @@ export type SessionEndResponse = ApiSchema<"SessionEndResponse">;
export type CrisisResource = ApiSchema<"CrisisResourceResponse">;
export type LearnerSessionSummary = ApiSchema<"LearnerSessionSummary">;
export interface LearnerSessionsResponse {
source: string;
sessions: LearnerSessionSummary[];
}
export type LearnerSessionsResponse = ApiSchema<"LearnerSessionsResponse">;
export type SessionDetailTurn = ApiSchema<"SessionDetailTurn">;
@ -224,16 +221,7 @@ export type ReviewTechnique = ApiSchema<"ReviewTechnique">;
export type ReviewNonverbalEvent = ApiSchema<"ReviewNonverbalEvent">;
export type ReviewNote = ApiSchema<"ReviewNote">;
export interface ReviewTurn {
id: string;
ts: string;
speaker: "learner" | "client";
who: string;
text: string;
techniques: ReviewTechnique[];
nonverbal: ReviewNonverbalEvent[];
note?: ReviewNote | null;
}
export type ReviewTurn = ApiSchema<"ReviewTurn">;
export type ReviewPhaseSegment = ApiSchema<"ReviewPhaseSegment">;
export type ReviewValencePoint = ApiSchema<"ReviewValencePoint">;
@ -241,56 +229,10 @@ export type ReviewRubricRow = ApiSchema<"ReviewRubricRow">;
export type ReviewPoint = ApiSchema<"ReviewPoint">;
export type ReviewWorksheetEvidence = ApiSchema<"ReviewWorksheetEvidence">;
export interface ReviewWorksheetItem {
key: string;
label: string;
value?: string | null;
evidence: ReviewWorksheetEvidence[];
confidence: "none" | "low" | "medium";
emptyReason?: string | null;
}
export interface ReviewWorksheetSection {
key: string;
title: string;
items: ReviewWorksheetItem[];
}
export interface ReviewCaseWorksheet {
status: "empty" | "draft_from_transcript";
generatedBy: string;
sections: ReviewWorksheetSection[];
limitations: string[];
}
export interface SessionReviewResponse {
session_id: string;
client: ReviewClient;
date: string;
durationLabel: string;
durationSeconds: number;
reachedPhase: string;
sessionSignal: string;
supervisorState: string;
supervisorName: string;
summary: string;
phases: ReviewPhaseSegment[];
phaseAxis: string[];
valenceAxis: string[];
clientValence: ReviewValencePoint[];
counselorBaseline: ReviewValencePoint[];
turns: ReviewTurn[];
rubric: ReviewRubricRow[];
goodMoments: ReviewPoint[];
growthPoints: ReviewPoint[];
caseWorksheet?: ReviewCaseWorksheet | null;
nextLine?: string | null;
clientFeedback?: string | null;
audioUrl?: string | null;
pdfExportUrl?: string | null;
degraded: boolean;
reviewReady: boolean;
}
export type ReviewWorksheetItem = ApiSchema<"ReviewWorksheetItem">;
export type ReviewWorksheetSection = ApiSchema<"ReviewWorksheetSection">;
export type ReviewCaseWorksheet = ApiSchema<"ReviewCaseWorksheet">;
export type SessionReviewResponse = ApiSchema<"SessionReviewResponse">;
/* =====================================================================
SSE POST /sessions/{id}/stream
@ -528,53 +470,13 @@ export const adminUsersApi = {
}),
};
export interface TeacherSessionSummary {
session_id: string;
learner_id: string;
learner_label: string;
persona_code: string;
persona_name: string;
session_no: number;
status: "active" | "ended" | string;
stage: string;
turn_count: number;
learner_turn_count: number;
client_turn_count: number;
started_at: string;
ended_at: string | null;
}
export type TeacherSessionSummary = ApiSchema<"TeacherSessionSummary">;
export type TeacherSafetyAlert = ApiSchema<"TeacherSafetyAlert">;
export type TeacherGrowthPoint = ApiSchema<"TeacherGrowthPoint">;
export interface TeacherLearnerGrowth {
learner_id: string;
learner_label: string;
sessions: number;
ended_sessions: number;
latest_at: string;
first_score: number | null;
latest_score: number | null;
score_delta: number | null;
avg_score: number | null;
avg_rapport: number | null;
trend: "up" | "down" | "flat" | "insufficient" | string;
top_techniques: string[];
points: TeacherGrowthPoint[];
}
export interface TeacherDashboardResponse {
source: string;
cohort_label: string;
total_learners: number;
active_sessions: number;
ended_sessions: number;
safety_alerts: TeacherSafetyAlert[];
learner_growth: TeacherLearnerGrowth[];
pending_reviews: TeacherSessionSummary[];
recent_sessions: TeacherSessionSummary[];
message: string;
}
export type TeacherLearnerGrowth = ApiSchema<"TeacherLearnerGrowth">;
export type TeacherDashboardResponse = ApiSchema<"TeacherDashboardResponse">;
export const teacherApi = {
dashboard: () => api.get<TeacherDashboardResponse>("/teacher/dashboard"),