Skip to content

Commit

Permalink
Merge branch 'meeting-api' into develop
Browse files Browse the repository at this point in the history
  • Loading branch information
TPReal committed Dec 3, 2023
2 parents d279ae5 + 1c5574e commit 849a771
Show file tree
Hide file tree
Showing 2 changed files with 92 additions and 0 deletions.
59 changes: 59 additions & 0 deletions resources/js/data-access/memo-api/groups/FacilityMeeting.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
import {useQueryClient} from "@tanstack/solid-query";
import {activeFacilityId} from "state/activeFacilityId.state";
import {V1} from "../config";
import {SolidQueryOpts} from "../query_utils";
import {MeetingResource} from "../resources/meeting.resource";
import {Api} from "../types";
import {ListInParam, createGetFromList, createListRequest, parseGetListResponse} from "../utils";

/**
* @see {@link https://test-memo.fdds.pl/api/documentation#/Facility%20meeting production docs}
* @see {@link http://localhost:9081/api/documentation#/Facility%20meeting local docs}
*/
export namespace FacilityMeeting {
const getMeetingsListBase = (request: Api.Request.GetListParams, config?: Api.Config) =>
V1.get<Api.Response.GetList<MeetingResource>>(`/facility/${activeFacilityId()}/meeting/list`, {
...config,
params: request,
});
const getMeetingsList = (request: Api.Request.GetListParams, config?: Api.Config) =>
getMeetingsListBase(request, config).then(parseGetListResponse);
const getMeeting = createGetFromList(getMeetingsListBase);

export const createMeeting = (meeting: Api.Request.Create<MeetingResource>, config?: Api.Config) =>
V1.post<Api.Response.Post>(`/facility/${activeFacilityId()}/meeting`, meeting, config);
export const updateMeeting = (meeting: Api.Request.Patch<MeetingResource>, config?: Api.Config) =>
V1.patch(`/facility/${activeFacilityId()}/meeting/${meeting.id}`, meeting, config);
export const deleteMeeting = (meetingId: Api.Id, config?: Api.Config) =>
V1.delete(`/facility/${activeFacilityId()}/meeting/${meetingId}`, config);

export const keys = {
meeting: () => ["meeting"] as const,
// The key contains the active facility id because the list depends on it.
meetingList: (request: Api.Request.GetListParams) =>
[...keys.meeting(), "list", request, activeFacilityId()] as const,
// The key does not contain the facility id because it already contains the meeting id, which is already unique.
meetingGet: (id: Api.Id) => [...keys.meeting(), "list", createListRequest(id)] as const,
};

export const meetingsQueryOptions = (ids: ListInParam) => {
const request = createListRequest(ids);
return {
queryFn: ({signal}) => getMeetingsList(request, {signal}),
queryKey: keys.meetingList(request),
} satisfies SolidQueryOpts<MeetingResource[]>;
};

export const meetingQueryOptions = (id: Api.Id) =>
({
queryFn: ({signal}) => getMeeting(id, {signal}),
queryKey: keys.meetingGet(id),
}) satisfies SolidQueryOpts<MeetingResource>;

export function useInvalidator() {
const queryClient = useQueryClient();
return {
meetings: () => queryClient.invalidateQueries({queryKey: keys.meeting()}),
};
}
}
33 changes: 33 additions & 0 deletions resources/js/data-access/memo-api/resources/meeting.resource.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
/**
* The meeting resource.
* @see `/help/tables/meetings.md`
* @see `/app/Http/Resources/MeetingResource.php`
*/
export interface MeetingResource {
id: string;
facilityId: string;
typeDictId: string;
notes: string;
date: string;
startDayminute: number;
durationMinutes: number;
statusDictId: string;
createdBy: string;
isRemote: boolean;
attendants: MeetingAttendantResource[];
resources: MeetingResourceResource[];
}

export interface MeetingAttendantResource {
id: string;
meetingId: string;
userId: string;
attendanceType: string;
attendanceStatusDictId: string;
}

export interface MeetingResourceResource {
id: string;
meetingId: string;
resourceDictId: string;
}

0 comments on commit 849a771

Please sign in to comment.