issues/27: admin content CRUD promotions pattern

This commit is contained in:
Valery Petrov
2026-05-19 19:35:25 +03:00
committed by Valeriy Petrov
parent 5aab178eb8
commit dde8ab9ceb
28 changed files with 2917 additions and 1 deletions
+55
View File
@@ -0,0 +1,55 @@
import { API, authHeader } from './apiSlice';
export const articleApi = API.injectEndpoints({
endpoints: (build) => ({
getArticleList: build.query({
query: ({ search = '', page = '' }) => {
let queryString = '?';
if (page) queryString += `page=${page}&limit=20`;
else queryString += `limit=20`;
if (search) queryString += `&search=${encodeURIComponent(search)}`;
return {
url: `/article/list${queryString}`,
};
},
refetchOnMountOrArgChange: true,
keepUnusedDataFor: 0,
}),
getArticle: build.query({
query: ({ articleId }) => ({
url: `/article/${articleId}`,
}),
}),
createArticle: build.mutation({
query: ({ data }) => ({
url: `/article/create`,
method: 'POST',
headers: authHeader(),
body: JSON.stringify(data),
}),
}),
updateArticle: build.mutation({
query: ({ articleId, data }) => ({
url: `/article/${articleId}`,
method: 'PUT',
headers: authHeader(),
body: JSON.stringify(data),
}),
}),
deleteArticle: build.mutation({
query: ({ articleId }) => ({
url: `/article/${articleId}`,
method: 'DELETE',
headers: authHeader(),
}),
}),
}),
});
export const {
useGetArticleQuery,
useGetArticleListQuery,
useCreateArticleMutation,
useUpdateArticleMutation,
useDeleteArticleMutation,
} = articleApi;
+55
View File
@@ -0,0 +1,55 @@
import { API, authHeader } from './apiSlice';
export const diseaseApi = API.injectEndpoints({
endpoints: (build) => ({
getDiseaseList: build.query({
query: ({ search = '', page = '' }) => {
let queryString = '?';
if (page) queryString += `page=${page}&perPage=20`;
else queryString += `perPage=20`;
if (search) queryString += `&search=${encodeURIComponent(search)}`;
return {
url: `/disease/list${queryString}`,
};
},
refetchOnMountOrArgChange: true,
keepUnusedDataFor: 0,
}),
getDisease: build.query({
query: ({ diseaseId }) => ({
url: `/disease/${diseaseId}`,
}),
}),
createDisease: build.mutation({
query: ({ data }) => ({
url: `/disease/create`,
method: 'POST',
headers: authHeader(),
body: JSON.stringify(data),
}),
}),
updateDisease: build.mutation({
query: ({ diseaseId, data }) => ({
url: `/disease/${diseaseId}`,
method: 'PUT',
headers: authHeader(),
body: JSON.stringify(data),
}),
}),
deleteDisease: build.mutation({
query: ({ diseaseId }) => ({
url: `/disease/${diseaseId}`,
method: 'DELETE',
headers: authHeader(),
}),
}),
}),
});
export const {
useGetDiseaseQuery,
useGetDiseaseListQuery,
useCreateDiseaseMutation,
useUpdateDiseaseMutation,
useDeleteDiseaseMutation,
} = diseaseApi;
+55
View File
@@ -0,0 +1,55 @@
import { API, authHeader } from './apiSlice';
export const medicalCenterApi = API.injectEndpoints({
endpoints: (build) => ({
getMedicalCenterList: build.query({
query: ({ search = '', page = '' }) => {
let queryString = '?';
if (page) queryString += `page=${page}&perPage=20`;
else queryString += `perPage=20`;
if (search) queryString += `&search=${encodeURIComponent(search)}`;
return {
url: `/medical-center/list${queryString}`,
};
},
refetchOnMountOrArgChange: true,
keepUnusedDataFor: 0,
}),
getMedicalCenter: build.query({
query: ({ medicalCenterId }) => ({
url: `/medical-center/${medicalCenterId}`,
}),
}),
createMedicalCenter: build.mutation({
query: ({ data }) => ({
url: `/medical-center/create`,
method: 'POST',
headers: authHeader(),
body: JSON.stringify(data),
}),
}),
updateMedicalCenter: build.mutation({
query: ({ medicalCenterId, data }) => ({
url: `/medical-center/${medicalCenterId}`,
method: 'PUT',
headers: authHeader(),
body: JSON.stringify(data),
}),
}),
deleteMedicalCenter: build.mutation({
query: ({ medicalCenterId }) => ({
url: `/medical-center/${medicalCenterId}`,
method: 'DELETE',
headers: authHeader(),
}),
}),
}),
});
export const {
useGetMedicalCenterQuery,
useGetMedicalCenterListQuery,
useCreateMedicalCenterMutation,
useUpdateMedicalCenterMutation,
useDeleteMedicalCenterMutation,
} = medicalCenterApi;
+55
View File
@@ -0,0 +1,55 @@
import { API, authHeader } from './apiSlice';
export const newsApi = API.injectEndpoints({
endpoints: (build) => ({
getNewsList: build.query({
query: ({ search = '', page = '' }) => {
let queryString = '?';
if (page) queryString += `page=${page}&perPage=20`;
else queryString += `perPage=20`;
if (search) queryString += `&search=${encodeURIComponent(search)}`;
return {
url: `/news/list${queryString}`,
};
},
refetchOnMountOrArgChange: true,
keepUnusedDataFor: 0,
}),
getNews: build.query({
query: ({ newsId }) => ({
url: `/news/${newsId}`,
}),
}),
createNews: build.mutation({
query: ({ data }) => ({
url: `/news/create`,
method: 'POST',
headers: authHeader(),
body: JSON.stringify(data),
}),
}),
updateNews: build.mutation({
query: ({ newsId, data }) => ({
url: `/news/${newsId}`,
method: 'PUT',
headers: authHeader(),
body: JSON.stringify(data),
}),
}),
deleteNews: build.mutation({
query: ({ newsId }) => ({
url: `/news/${newsId}`,
method: 'DELETE',
headers: authHeader(),
}),
}),
}),
});
export const {
useGetNewsQuery,
useGetNewsListQuery,
useCreateNewsMutation,
useUpdateNewsMutation,
useDeleteNewsMutation,
} = newsApi;
+55
View File
@@ -0,0 +1,55 @@
import { API, authHeader } from './apiSlice';
export const promoApi = API.injectEndpoints({
endpoints: (build) => ({
getSitePromoList: build.query({
query: ({ search = '', page = '' }) => {
let queryString = '?';
if (page) queryString += `page=${page}&perPage=20`;
else queryString += `perPage=20`;
if (search) queryString += `&search=${encodeURIComponent(search)}`;
return {
url: `/promo/list${queryString}`,
};
},
refetchOnMountOrArgChange: true,
keepUnusedDataFor: 0,
}),
getSitePromo: build.query({
query: ({ promoId }) => ({
url: `/promo/${promoId}`,
}),
}),
createSitePromo: build.mutation({
query: ({ data }) => ({
url: `/promo/create`,
method: 'POST',
headers: authHeader(),
body: JSON.stringify(data),
}),
}),
updateSitePromo: build.mutation({
query: ({ promoId, data }) => ({
url: `/promo/${promoId}`,
method: 'PUT',
headers: authHeader(),
body: JSON.stringify(data),
}),
}),
deleteSitePromo: build.mutation({
query: ({ promoId }) => ({
url: `/promo/${promoId}`,
method: 'DELETE',
headers: authHeader(),
}),
}),
}),
});
export const {
useGetSitePromoQuery,
useGetSitePromoListQuery,
useCreateSitePromoMutation,
useUpdateSitePromoMutation,
useDeleteSitePromoMutation,
} = promoApi;
+55
View File
@@ -0,0 +1,55 @@
import { API, authHeader } from './apiSlice';
export const siteServicesApi = API.injectEndpoints({
endpoints: (build) => ({
getSiteServicesList: build.query({
query: ({ search = '', page = '' }) => {
let queryString = '?';
if (page) queryString += `page=${page}&perPage=20`;
else queryString += `perPage=20`;
if (search) queryString += `&search=${encodeURIComponent(search)}`;
return {
url: `/site-services/list${queryString}`,
};
},
refetchOnMountOrArgChange: true,
keepUnusedDataFor: 0,
}),
getSiteServices: build.query({
query: ({ siteServicesId }) => ({
url: `/site-services/${siteServicesId}`,
}),
}),
createSiteServices: build.mutation({
query: ({ data }) => ({
url: `/site-services/create`,
method: 'POST',
headers: authHeader(),
body: JSON.stringify(data),
}),
}),
updateSiteServices: build.mutation({
query: ({ siteServicesId, data }) => ({
url: `/site-services/${siteServicesId}`,
method: 'PUT',
headers: authHeader(),
body: JSON.stringify(data),
}),
}),
deleteSiteServices: build.mutation({
query: ({ siteServicesId }) => ({
url: `/site-services/${siteServicesId}`,
method: 'DELETE',
headers: authHeader(),
}),
}),
}),
});
export const {
useGetSiteServicesQuery,
useGetSiteServicesListQuery,
useCreateSiteServicesMutation,
useUpdateSiteServicesMutation,
useDeleteSiteServicesMutation,
} = siteServicesApi;