69 行
1.8 KiB
TypeScript
69 行
1.8 KiB
TypeScript
import { apiRequestData } from "./http";
|
|
|
|
export type WeeklyReport = {
|
|
id: string;
|
|
employeeId: string;
|
|
weekStart: string;
|
|
status: "draft" | "submitted";
|
|
highlightsText: string;
|
|
blockersText: string;
|
|
nextWeekText: string;
|
|
needsHelp: boolean;
|
|
submittedAt: string | null;
|
|
createdAt: string | null;
|
|
updatedAt: string | null;
|
|
};
|
|
|
|
export type WeeklyReportTeamItem = {
|
|
employee: {
|
|
id: string;
|
|
employeeNo: string;
|
|
name: string;
|
|
title: string;
|
|
department: { id: string; name: string } | null;
|
|
};
|
|
report: WeeklyReport | null;
|
|
};
|
|
|
|
export type WeeklyReportTeamSummary = {
|
|
totalEmployees: number;
|
|
submittedCount: number;
|
|
draftCount: number;
|
|
missingCount: number;
|
|
needsHelpCount: number;
|
|
};
|
|
|
|
export async function fetchMyWeeklyReport(weekStart?: string) {
|
|
const suffix = weekStart ? `?weekStart=${encodeURIComponent(weekStart)}` : "";
|
|
return apiRequestData<{ item: WeeklyReport }>(`/api/weekly-reports/me${suffix}`);
|
|
}
|
|
|
|
export async function updateMyWeeklyReport(payload: {
|
|
weekStart?: string;
|
|
highlightsText?: string;
|
|
blockersText?: string;
|
|
nextWeekText?: string;
|
|
needsHelp?: boolean;
|
|
}) {
|
|
return apiRequestData<{ item: WeeklyReport }>("/api/weekly-reports/me", {
|
|
method: "PUT",
|
|
body: JSON.stringify(payload),
|
|
});
|
|
}
|
|
|
|
export async function submitMyWeeklyReport(payload: { weekStart?: string } = {}) {
|
|
return apiRequestData<{ item: WeeklyReport }>("/api/weekly-reports/me/submit", {
|
|
method: "POST",
|
|
body: JSON.stringify(payload),
|
|
});
|
|
}
|
|
|
|
export async function fetchTeamWeeklyReports(weekStart?: string) {
|
|
const suffix = weekStart ? `?weekStart=${encodeURIComponent(weekStart)}` : "";
|
|
return apiRequestData<{
|
|
weekStart: string;
|
|
summary: WeeklyReportTeamSummary;
|
|
items: WeeklyReportTeamItem[];
|
|
}>(`/api/weekly-reports/team${suffix}`);
|
|
}
|