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

197 lines
6.6 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 ICreateSchemaDTO,
type ICreateSynthesisDTO,
2025-04-20 18:06:18 +03:00
type IDeleteBlockDTO,
type IDeleteOperationDTO,
type IImportSchemaDTO,
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,
2025-07-23 16:13:11 +03:00
type IOssLayoutDTO,
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 }) =>
2025-07-23 16:13:11 +03:00
axiosPatch<IOssLayoutDTO, IOperationSchemaDTO>({
2025-04-06 13:28:00 +03:00
endpoint: `/api/oss/${itemID}/update-layout`,
request: {
2025-06-11 16:38:56 +03:00
data: { 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,
2025-04-24 13:15:57 +03:00
successMessage: infoMsg.blockDestroyed
2025-04-20 18:06:18 +03:00
}
}),
createSchema: ({ itemID, data }: { itemID: number; data: ICreateSchemaDTO }) =>
axiosPost<ICreateSchemaDTO, IOperationCreatedResponse>({
schema: schemaOperationCreatedResponse,
endpoint: `/api/oss/${itemID}/create-schema`,
request: {
data: data,
successMessage: response => {
const alias = response.oss.operations.find(op => op.id === response.new_operation)?.alias;
return infoMsg.newOperation(alias ?? 'ОШИБКА');
}
}
}),
createSynthesis: ({ itemID, data }: { itemID: number; data: ICreateSynthesisDTO }) =>
axiosPost<ICreateSynthesisDTO, IOperationCreatedResponse>({
schema: schemaOperationCreatedResponse,
endpoint: `/api/oss/${itemID}/create-synthesis`,
request: {
data: data,
successMessage: response => {
const alias = response.oss.operations.find(op => op.id === response.new_operation)?.alias;
return infoMsg.newOperation(alias ?? 'ОШИБКА');
}
}
}),
importSchema: ({ itemID, data }: { itemID: number; data: IImportSchemaDTO }) =>
axiosPost<IImportSchemaDTO, IOperationCreatedResponse>({
schema: schemaOperationCreatedResponse,
endpoint: `/api/oss/${itemID}/import-schema`,
request: {
data: data,
successMessage: response => {
const alias = response.oss.operations.find(op => op.id === response.new_operation)?.alias;
return infoMsg.newOperation(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>({
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-04-30 01:10:01 +03:00
} as const;