|
1 | | -import { combineDataProviders, DataProvider, fetchUtils, RaRecord, UpdateResult } from "react-admin"; |
2 | | -import HTTPMethod from "http-method-enum"; |
3 | | -import { stringify } from "query-string"; |
4 | | -import { OWNERS } from "@constants/resources"; |
| 1 | +import { fetchUtils, UpdateResult } from "react-admin"; |
| 2 | +import { GetOwnersListParams } from "@models/api/GetOwnersListParams"; |
5 | 3 | import { LAST_NAME } from "@constants/searchParams"; |
6 | | -import { GetListParams } from "@models/api/GetListParams"; |
| 4 | +import { stringify } from "query-string"; |
| 5 | +import HTTPMethod from "http-method-enum"; |
| 6 | +import { OwnersDataProvider } from "@models/api/OwnersDataProvider"; |
| 7 | +import { PETS } from "@constants/resources"; |
7 | 8 |
|
8 | 9 | const apiUrl = import.meta.env.VITE_SPRING_PETCLINIC_REST_API_URL; |
9 | 10 |
|
10 | 11 | const httpClient = fetchUtils.fetchJson; |
11 | 12 |
|
12 | | -/** |
13 | | - * The following data was made to manage api calls dedicated to owners path ("/api/owner"). |
14 | | - * For other endpoints, it would be ideal to manage them in separate data providers. |
15 | | - * @author Firas Regaieg |
16 | | - */ |
17 | | -const ownersDataProvider: DataProvider = { |
18 | | - getList: async (resource, { filter, signal }: GetListParams) => { |
| 13 | +export default { |
| 14 | + getList: async (resource, { filter, signal }: GetOwnersListParams) => { |
19 | 15 | const url = new URL(`${apiUrl}/${resource}`); |
20 | 16 |
|
21 | 17 | const searchParams = new URLSearchParams(); |
@@ -72,7 +68,6 @@ const ownersDataProvider: DataProvider = { |
72 | 68 | }); |
73 | 69 | return { data: json }; |
74 | 70 | }, |
75 | | - |
76 | 71 | update: async (resource, params) => { |
77 | 72 | const url = `${apiUrl}/${resource}/${params.id}`; |
78 | 73 | await httpClient(url, { |
@@ -112,16 +107,28 @@ const ownersDataProvider: DataProvider = { |
112 | 107 | method: HTTPMethod.DELETE |
113 | 108 | }); |
114 | 109 | return { data: json }; |
115 | | - } |
116 | | -}; |
| 110 | + }, |
| 111 | + createPet: async (resource: string, { meta: { ownerId }, data }) => { |
| 112 | + const { json } = await httpClient(`${apiUrl}/${resource}/${ownerId}/${PETS}`, { |
| 113 | + method: HTTPMethod.POST, |
| 114 | + body: JSON.stringify(data) |
| 115 | + }); |
| 116 | + return { data: json }; |
| 117 | + }, |
| 118 | + getPet: async (resource: string, { id, meta: { petId } }) => { |
| 119 | + const { json } = await httpClient(`${apiUrl}/${resource}/${id}/${PETS}/${petId}`, { |
| 120 | + method: HTTPMethod.GET |
| 121 | + }); |
117 | 122 |
|
118 | | -const dataProviders = combineDataProviders((resource) => { |
119 | | - switch (resource) { |
120 | | - case OWNERS: |
121 | | - return ownersDataProvider; |
122 | | - default: |
123 | | - throw new Error(`Unknown resource: ${resource}`); |
124 | | - } |
125 | | -}); |
| 123 | + return { data: json }; |
| 124 | + }, |
| 125 | + // TODO: create endpoint handler to edit pet owner |
| 126 | + editPet: async (resource: string, { meta: { ownerId }, data: { petId, ...body } }) => { |
| 127 | + const { json } = await httpClient(`${apiUrl}/${resource}/${ownerId}/${PETS}/${petId}`, { |
| 128 | + method: HTTPMethod.PUT, |
| 129 | + body: JSON.stringify(body) |
| 130 | + }); |
126 | 131 |
|
127 | | -export default dataProviders; |
| 132 | + return { data: json }; |
| 133 | + } |
| 134 | +} as OwnersDataProvider; |
0 commit comments