feature: users with treatment edit permission should now have working hours defined. the appointment grid is now being drawn based on the doctor's working hours.

This commit is contained in:
2026-06-10 19:44:09 +03:30
parent 468572a50f
commit 48ecfd05e1
22 changed files with 1571 additions and 116 deletions

View File

@@ -1,5 +1,6 @@
import { apiClient } from './client';
import type { AppointmentColumnProvider, AppointmentRecord } from '@/types/appointment';
import { toDateInputValue } from '@/components/appointments/appointmentTime';
export interface CreateAppointmentBody {
patientId: string;
@@ -12,8 +13,11 @@ export interface CreateAppointmentBody {
export type UpdateAppointmentBody = Partial<CreateAppointmentBody>;
export const appointmentsApi = {
columnProviders: async (): Promise<{ success: boolean; data: AppointmentColumnProvider[] }> => {
const response = await apiClient.get('/appointments/column-providers');
columnProviders: async (
scheduleDate?: Date,
): Promise<{ success: boolean; data: AppointmentColumnProvider[] }> => {
const params = scheduleDate ? { date: toDateInputValue(scheduleDate) } : undefined;
const response = await apiClient.get('/appointments/column-providers', { params });
return response.data;
},

View File

@@ -120,4 +120,29 @@ export const staffApi = {
const response = await apiClient.delete(`/staff/members/${membershipId}`);
return response.data;
},
getWorkingHours: async (
membershipId: string,
): Promise<{
success: boolean;
data: {
autoRepeatWeekly: boolean;
blocks: { dayOfWeek: number; startMinute: number; endMinute: number; sortOrder?: number }[];
hasWorkingHours: boolean;
};
}> => {
const response = await apiClient.get(`/staff/members/${membershipId}/working-hours`);
return response.data;
},
upsertWorkingHours: async (
membershipId: string,
body: {
autoRepeatWeekly: boolean;
blocks: { dayOfWeek: number; startMinute: number; endMinute: number; sortOrder?: number }[];
},
): Promise<{ success: boolean; message: string }> => {
const response = await apiClient.put(`/staff/members/${membershipId}/working-hours`, body);
return response.data;
},
};