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

123 lines
4.0 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-02-20 20:22:05 +03:00
type IConstituentaReference,
type ICstRelocateDTO,
type IInputCreatedResponse,
type IInputUpdateDTO,
type IOperationCreatedResponse,
type IOperationCreateDTO,
type IOperationDeleteDTO,
type IOperationSchemaDTO,
type IOperationUpdateDTO,
2025-04-06 15:47:40 +03:00
type IOssLayout,
2025-02-20 20:22:05 +03:00
type ITargetOperation,
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-02-12 15:12:59 +03:00
operationCreate: ({ itemID, data }: { itemID: number; data: IOperationCreateDTO }) =>
axiosPost<IOperationCreateDTO, IOperationCreatedResponse>({
schema: schemaOperationCreatedResponse,
endpoint: `/api/oss/${itemID}/create-operation`,
request: {
data: data,
successMessage: response => infoMsg.newOperation(response.new_operation.alias)
}
}),
2025-02-12 15:12:59 +03:00
operationDelete: ({ itemID, data }: { itemID: number; data: IOperationDeleteDTO }) =>
2025-02-11 12:34:28 +03:00
axiosPatch<IOperationDeleteDTO, IOperationSchemaDTO>({
schema: schemaOperationSchema,
endpoint: `/api/oss/${itemID}/delete-operation`,
request: {
data: data,
successMessage: infoMsg.operationDestroyed
}
}),
2025-02-12 15:12:59 +03:00
inputCreate: ({ 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
}
}),
2025-02-12 15:12:59 +03:00
inputUpdate: ({ itemID, data }: { itemID: number; data: IInputUpdateDTO }) =>
axiosPatch<IInputUpdateDTO, IOperationSchemaDTO>({
schema: schemaOperationSchema,
endpoint: `/api/oss/${itemID}/set-input`,
request: {
data: data,
successMessage: infoMsg.changesSaved
}
}),
2025-02-12 15:12:59 +03:00
operationUpdate: ({ itemID, data }: { itemID: number; data: IOperationUpdateDTO }) =>
axiosPatch<IOperationUpdateDTO, IOperationSchemaDTO>({
schema: schemaOperationSchema,
endpoint: `/api/oss/${itemID}/update-operation`,
request: {
data: data,
successMessage: infoMsg.changesSaved
}
}),
2025-02-12 15:12:59 +03:00
operationExecute: ({ itemID, data }: { itemID: number; data: ITargetOperation }) =>
axiosPost<ITargetOperation, IOperationSchemaDTO>({
schema: schemaOperationSchema,
endpoint: `/api/oss/${itemID}/execute-operation`,
request: {
data: data,
successMessage: infoMsg.operationExecuted
}
}),
2025-02-10 15:48:58 +03:00
relocateConstituents: (data: ICstRelocateDTO) =>
axiosPost<ICstRelocateDTO, 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
};