feat: fix access scoping for clinic member doctors and add representation_id handling for clinics

This commit is contained in:
hamed
2026-06-19 13:42:24 +03:30
parent aeef59fe0d
commit d910a30a7e
7 changed files with 365 additions and 27 deletions
+1 -1
View File
@@ -41,7 +41,7 @@ export default function ClinicsPage() {
const [addOpen, setAddOpen] = useState(false);
const limit = 15;
const listBase = isRepresentation ? '/api/v1/clinics' : '/api/v1/admin/clinics';
const listBase = isRepresentation ? '/api/v1/representation/clinics' : '/api/v1/admin/clinics';
const { data, isLoading } = useQuery({
queryKey: ['admin-clinics', page, search, statusFilter, isRepresentation],
queryFn: () =>
+3 -21
View File
@@ -133,7 +133,7 @@ export default function DoctorsPage() {
if (search) p.set('search', search);
if (status) p.set('status', status);
if (specialtyId) p.set('specialty_id', specialtyId);
const base = isRepresentation ? '/api/v1/doctors' : '/api/v1/admin/doctors';
const base = isRepresentation ? '/api/v1/representation/doctors' : '/api/v1/admin/doctors';
return api.get<PaginatedResponse<AdminDoctor>>(`${base}?${p}`);
},
});
@@ -141,26 +141,8 @@ export default function DoctorsPage() {
const stats: DoctorStats | undefined = useMemo(
() => (statsQ.data?.data as any)?.data ?? statsQ.data?.data, [statsQ.data]
);
// endpoint عمومی /doctors شکل متفاوتی دارد؛ به شکل AdminDoctor نگاشت می‌شود تا جدول کرش نکند.
const rawItems = doctorsQ.data?.data ?? [];
const items: AdminDoctor[] = isRepresentation
// eslint-disable-next-line @typescript-eslint/no-explicit-any
? (rawItems as any[]).map((d) => ({
uuid: d.uuid,
id: d.id,
name: d.name,
gender: d.gender ?? null,
degree: d.degree ?? null,
medical_code: d.medical_code ?? null,
mobile: d.mobile ?? null,
email: d.email ?? null,
is_active: d.is_active ?? d.active ?? false,
rate: Number(d.rate ?? d.point ?? 0) || 0,
specialties: d.specialties ?? [],
profile_image: d.profile_image ?? d.img?.[0]?.url ?? null,
created_at: d.created_at ?? null,
}) as AdminDoctor)
: (rawItems as AdminDoctor[]);
// هم endpoint ادمین و هم endpoint نماینده شکل AdminDoctor را برمی‌گردانند.
const items: AdminDoctor[] = doctorsQ.data?.data ?? [];
const total = doctorsQ.data?.meta?.totalRecords ?? 0;
const specialties: SpecialtyOption[] = useMemo(
() => (specialtiesQ.data?.data as any)?.data ?? specialtiesQ.data?.data ?? [],