Portal/rsconcept/frontend/src/features/oss/backend/api.ts

168 lines
5.4 KiB
TypeScript
Raw Normal View History

2025-01-23 19:41:31 +03:00
import { queryOptions } from '@tanstack/react-query';
2025-03-12 11:54:32 +03:00
import { axiosGet, axiosPatch, axiosPost } from '@/backend/api-transport';
import { DELAYS, KEYS } from '@/backend/configuration';
import { infoMsg } from '@/utils/labels';
2025-01-23 19:41:31 +03:00
import {
2025-04-20 18:06:18 +03:00
type IBlockCreatedResponse,
2025-02-20 20:22:05 +03:00
type IConstituentaReference,
2025-04-20 18:06:18 +03:00
type ICreateBlockDTO,
type ICreateOperationDTO,
2025-04-20 18:06:18 +03:00
type IDeleteBlockDTO,
type IDeleteOperationDTO,
2025-02-20 20:22:05 +03:00
type IInputCreatedResponse,
2025-04-23 23:18:44 +03:00
type IMoveItemsDTO,
2025-02-20 20:22:05 +03:00
type IOperationCreatedResponse,
type IOperationSchemaDTO,
2025-04-06 15:47:40 +03:00
type IOssLayout,
type IRelocateConstituentsDTO,
2025-02-20 20:22:05 +03:00
type ITargetOperation,
2025-04-20 18:06:18 +03:00
type IUpdateBlockDTO,
type IUpdateInputDTO,
type IUpdateOperationDTO,
2025-04-21 20:35:40 +03:00
schemaBlockCreatedResponse,
schemaConstituentaReference,
2025-04-13 23:13:04 +03:00
schemaInputCreatedResponse,
schemaOperationCreatedResponse,
schemaOperationSchema
} from './types';
2025-01-23 19:41:31 +03:00
export const ossApi = {
baseKey: KEYS.oss,
2025-01-23 19:41:31 +03:00
2025-02-12 15:12:59 +03:00
getOssQueryOptions: ({ itemID }: { itemID?: number }) => {
2025-01-23 19:41:31 +03:00
return queryOptions({
queryKey: KEYS.composite.ossItem({ itemID }),
2025-01-23 19:41:31 +03:00
staleTime: DELAYS.staleShort,
queryFn: meta =>
!itemID
? undefined
: axiosGet<IOperationSchemaDTO>({
schema: schemaOperationSchema,
endpoint: `/api/oss/${itemID}/details`,
options: { signal: meta.signal }
})
2025-01-23 19:41:31 +03:00
});
},
2025-04-06 15:47:40 +03:00
updateLayout: ({ itemID, data, isSilent }: { itemID: number; data: IOssLayout; isSilent?: boolean }) =>
axiosPatch({
2025-04-06 13:28:00 +03:00
endpoint: `/api/oss/${itemID}/update-layout`,
request: {
2025-04-06 15:47:40 +03:00
data: data,
successMessage: isSilent ? undefined : infoMsg.changesSaved
}
}),
2025-01-23 19:41:31 +03:00
2025-04-20 18:06:18 +03:00
createBlock: ({ itemID, data }: { itemID: number; data: ICreateBlockDTO }) =>
axiosPost<ICreateBlockDTO, IBlockCreatedResponse>({
2025-04-21 20:35:40 +03:00
schema: schemaBlockCreatedResponse,
2025-04-20 18:06:18 +03:00
endpoint: `/api/oss/${itemID}/create-block`,
request: {
data: data,
successMessage: infoMsg.changesSaved
}
}),
updateBlock: ({ itemID, data }: { itemID: number; data: IUpdateBlockDTO }) =>
axiosPatch<IUpdateBlockDTO, IOperationSchemaDTO>({
schema: schemaOperationSchema,
2025-04-22 13:58:25 +03:00
endpoint: `/api/oss/${itemID}/update-block`,
2025-04-20 18:06:18 +03:00
request: {
data: data,
successMessage: infoMsg.changesSaved
}
}),
deleteBlock: ({ itemID, data }: { itemID: number; data: IDeleteBlockDTO }) =>
axiosPatch<IDeleteBlockDTO, IOperationSchemaDTO>({
schema: schemaOperationSchema,
2025-04-21 20:35:40 +03:00
endpoint: `/api/oss/${itemID}/delete-block`,
2025-04-20 18:06:18 +03:00
request: {
data: data,
successMessage: infoMsg.operationDestroyed
}
}),
createOperation: ({ itemID, data }: { itemID: number; data: ICreateOperationDTO }) =>
axiosPost<ICreateOperationDTO, IOperationCreatedResponse>({
schema: schemaOperationCreatedResponse,
endpoint: `/api/oss/${itemID}/create-operation`,
request: {
data: data,
successMessage: response => infoMsg.newOperation(response.new_operation.alias)
}
}),
2025-04-20 18:06:18 +03:00
updateOperation: ({ itemID, data }: { itemID: number; data: IUpdateOperationDTO }) =>
axiosPatch<IUpdateOperationDTO, IOperationSchemaDTO>({
schema: schemaOperationSchema,
endpoint: `/api/oss/${itemID}/update-operation`,
request: {
data: data,
successMessage: infoMsg.changesSaved
}
}),
deleteOperation: ({ itemID, data }: { itemID: number; data: IDeleteOperationDTO }) =>
axiosPatch<IDeleteOperationDTO, IOperationSchemaDTO>({
schema: schemaOperationSchema,
endpoint: `/api/oss/${itemID}/delete-operation`,
request: {
data: data,
successMessage: infoMsg.operationDestroyed
}
}),
2025-04-20 18:06:18 +03:00
createInput: ({ itemID, data }: { itemID: number; data: ITargetOperation }) =>
axiosPatch<ITargetOperation, IInputCreatedResponse>({
2025-04-13 23:13:04 +03:00
schema: schemaInputCreatedResponse,
endpoint: `/api/oss/${itemID}/create-input`,
request: {
data: data,
successMessage: infoMsg.newLibraryItem
}
}),
updateInput: ({ itemID, data }: { itemID: number; data: IUpdateInputDTO }) =>
axiosPatch<IUpdateInputDTO, IOperationSchemaDTO>({
schema: schemaOperationSchema,
endpoint: `/api/oss/${itemID}/set-input`,
request: {
data: data,
successMessage: infoMsg.changesSaved
}
}),
executeOperation: ({ itemID, data }: { itemID: number; data: ITargetOperation }) =>
axiosPost<ITargetOperation, IOperationSchemaDTO>({
schema: schemaOperationSchema,
endpoint: `/api/oss/${itemID}/execute-operation`,
request: {
data: data,
successMessage: infoMsg.operationExecuted
}
}),
2025-04-23 23:18:44 +03:00
moveItems: ({ itemID, data }: { itemID: number; data: IMoveItemsDTO }) =>
axiosPatch<IMoveItemsDTO, IOperationSchemaDTO>({
schema: schemaOperationSchema,
endpoint: `/api/oss/${itemID}/move-items`,
request: {
data: data,
successMessage: infoMsg.moveSuccess
}
}),
relocateConstituents: (data: IRelocateConstituentsDTO) =>
axiosPost<IRelocateConstituentsDTO, IOperationSchemaDTO>({
schema: schemaOperationSchema,
2025-02-10 15:48:58 +03:00
endpoint: `/api/oss/relocate-constituents`,
request: {
data: data,
successMessage: infoMsg.changesSaved
}
}),
2025-02-22 12:20:22 +03:00
getPredecessor: (cstID: number) =>
axiosPost<{ target: number }, IConstituentaReference>({
schema: schemaConstituentaReference,
endpoint: '/api/oss/get-predecessor',
2025-02-22 12:20:22 +03:00
request: { data: { target: cstID } }
})
2025-01-23 19:41:31 +03:00
};