ca-grow-ops-manager/frontend/src/lib/messagingApi.ts
fullsizemalt 86ad94f812
Some checks are pending
Deploy to Production / deploy (push) Waiting to run
Test / backend-test (push) Waiting to run
Test / frontend-test (push) Waiting to run
fix: resolve API prefix double-url bugs and stabilize 3D viewer
2025-12-12 23:28:59 -08:00

88 lines
2.6 KiB
TypeScript

import api from './api';
export interface Announcement {
id: string;
title: string;
body: string;
priority: 'INFO' | 'WARNING' | 'CRITICAL';
requiresAck: boolean;
targetRoles: string[];
expiresAt?: string;
createdBy: { id: string; name: string };
createdAt: string;
isRead?: boolean;
isAcknowledged?: boolean;
}
export interface ShiftNote {
id: string;
roomId?: string;
batchId?: string;
content: string;
importance: 'LOW' | 'NORMAL' | 'HIGH' | 'URGENT';
createdBy: { id: string; name: string };
createdAt: string;
isRead?: boolean;
}
export const messagingApi = {
// Announcements
async getAnnouncements(): Promise<Announcement[]> {
const response = await api.get('/messaging/announcements');
return response.data;
},
async getPendingAnnouncements(): Promise<{ count: number; announcements: Announcement[] }> {
const response = await api.get('/messaging/announcements/pending');
return response.data;
},
async createAnnouncement(data: {
title: string;
body: string;
priority?: 'INFO' | 'WARNING' | 'CRITICAL';
requiresAck?: boolean;
targetRoles?: string[];
expiresAt?: string;
}): Promise<Announcement> {
const response = await api.post('/messaging/announcements', data);
return response.data;
},
async markRead(id: string): Promise<void> {
await api.post(`/messaging/announcements/${id}/read`);
},
async acknowledge(id: string): Promise<{ success: boolean; acknowledgedAt: string }> {
const response = await api.post(`/messaging/announcements/${id}/acknowledge`);
return response.data;
},
async getAcknowledgements(id: string): Promise<any> {
const response = await api.get(`/messaging/announcements/${id}/acks`);
return response.data;
},
// Shift Notes
async getShiftNotes(params?: { date?: string; limit?: number; roomId?: string; batchId?: string }): Promise<ShiftNote[]> {
const response = await api.get('/messaging/shift-notes', { params });
return response.data;
},
async createShiftNote(data: {
content: string;
roomId?: string;
batchId?: string;
importance?: 'LOW' | 'NORMAL' | 'HIGH' | 'URGENT';
expiresAt?: string;
}): Promise<ShiftNote> {
const response = await api.post('/messaging/shift-notes', data);
return response.data;
},
async markShiftNoteRead(id: string): Promise<void> {
await api.post(`/messaging/shift-notes/${id}/read`);
}
};