ConceptPortal-public/rsconcept/frontend/src/features/rsform/backend/api.ts

157 lines
5.2 KiB
TypeScript
Raw Normal View History

import { queryOptions } from '@tanstack/react-query';
2025-03-12 11:55:43 +03:00
import { axiosGet, axiosPatch, axiosPost } from '@/backend/api-transport';
import { DELAYS, KEYS } from '@/backend/configuration';
import { infoMsg } from '@/utils/labels';
import {
type ICheckConstituentaDTO,
type IConstituentaBasicsDTO,
type IConstituentaList,
type ICstCreatedResponse,
type ICstCreateDTO,
type ICstMoveDTO,
type ICstRenameDTO,
type ICstSubstitutionsDTO,
type ICstUpdateDTO,
type IExpressionParseDTO,
type IInlineSynthesisDTO,
type IProduceStructureResponse,
type IRSFormDTO,
type IRSFormUploadDTO,
schemaConstituentaBasics,
schemaCstCreatedResponse,
schemaExpressionParse,
schemaProduceStructureResponse,
schemaRSForm
} from './types';
2025-02-12 02:12:08 +03:00
export const rsformsApi = {
baseKey: KEYS.rsform,
2025-02-12 15:13:37 +03:00
getRSFormQueryOptions: ({ itemID, version }: { itemID?: number; version?: number }) => {
return queryOptions({
queryKey: KEYS.composite.rsItem({ itemID, version }),
staleTime: DELAYS.staleShort,
queryFn: meta =>
!itemID
? undefined
: axiosGet<IRSFormDTO>({
schema: schemaRSForm,
endpoint: version ? `/api/library/${itemID}/versions/${version}` : `/api/rsforms/${itemID}/details`,
options: { signal: meta.signal }
})
});
},
2025-02-12 15:13:37 +03:00
download: ({ itemID, version }: { itemID: number; version?: number }) =>
axiosGet<Blob>({
endpoint: version ? `/api/versions/${version}/export-file` : `/api/rsforms/${itemID}/export-trs`,
options: { responseType: 'blob' }
}),
upload: (data: IRSFormUploadDTO) =>
axiosPatch<IRSFormUploadDTO, IRSFormDTO>({
schema: schemaRSForm,
endpoint: `/api/rsforms/${data.itemID}/load-trs`,
request: {
data: data,
successMessage: infoMsg.uploadSuccess
},
options: {
headers: {
'Content-Type': 'multipart/form-data'
}
}
}),
2025-02-12 15:13:37 +03:00
cstCreate: ({ itemID, data }: { itemID: number; data: ICstCreateDTO }) =>
axiosPost<ICstCreateDTO, ICstCreatedResponse>({
schema: schemaCstCreatedResponse,
endpoint: `/api/rsforms/${itemID}/create-cst`,
request: {
data: data,
successMessage: response => infoMsg.newConstituent(response.new_cst.alias)
}
}),
2025-02-12 15:13:37 +03:00
cstUpdate: ({ itemID, data }: { itemID: number; data: ICstUpdateDTO }) =>
axiosPatch<ICstUpdateDTO, IConstituentaBasicsDTO>({
schema: schemaConstituentaBasics,
endpoint: `/api/rsforms/${itemID}/update-cst`,
request: {
data: data,
successMessage: infoMsg.changesSaved
}
}),
2025-02-12 15:13:37 +03:00
cstDelete: ({ itemID, data }: { itemID: number; data: IConstituentaList }) =>
axiosPatch<IConstituentaList, IRSFormDTO>({
schema: schemaRSForm,
endpoint: `/api/rsforms/${itemID}/delete-multiple-cst`,
request: {
data: data,
successMessage: infoMsg.constituentsDestroyed(data.items.length)
}
}),
2025-02-12 15:13:37 +03:00
cstRename: ({ itemID, data }: { itemID: number; data: ICstRenameDTO }) =>
axiosPatch<ICstRenameDTO, ICstCreatedResponse>({
schema: schemaCstCreatedResponse,
endpoint: `/api/rsforms/${itemID}/rename-cst`,
request: {
data: data,
successMessage: infoMsg.changesSaved
}
}),
2025-02-12 15:13:37 +03:00
cstSubstitute: ({ itemID, data }: { itemID: number; data: ICstSubstitutionsDTO }) =>
2025-02-12 02:12:08 +03:00
axiosPatch<ICstSubstitutionsDTO, IRSFormDTO>({
schema: schemaRSForm,
endpoint: `/api/rsforms/${itemID}/substitute`,
request: {
data: data,
successMessage: infoMsg.substituteSingle
}
}),
2025-02-12 15:13:37 +03:00
cstMove: ({ itemID, data }: { itemID: number; data: ICstMoveDTO }) =>
axiosPatch<ICstMoveDTO, IRSFormDTO>({
schema: schemaRSForm,
endpoint: `/api/rsforms/${itemID}/move-cst`,
request: { data: data }
}),
2025-02-22 12:20:47 +03:00
produceStructure: ({ itemID, cstID }: { itemID: number; cstID: number }) =>
axiosPatch<{ target: number }, IProduceStructureResponse>({
schema: schemaProduceStructureResponse,
endpoint: `/api/rsforms/${itemID}/produce-structure`,
request: {
2025-02-22 12:20:47 +03:00
data: { target: cstID },
successMessage: response => infoMsg.addedConstituents(response.cst_list.length)
}
}),
inlineSynthesis: (data: IInlineSynthesisDTO) =>
axiosPatch<IInlineSynthesisDTO, IRSFormDTO>({
schema: schemaRSForm,
endpoint: `/api/rsforms/inline-synthesis`,
request: {
data: data,
successMessage: infoMsg.inlineSynthesisComplete
}
}),
2025-02-12 15:13:37 +03:00
restoreOrder: ({ itemID }: { itemID: number }) =>
axiosPatch<undefined, IRSFormDTO>({
schema: schemaRSForm,
endpoint: `/api/rsforms/${itemID}/restore-order`,
request: { successMessage: infoMsg.reorderComplete }
}),
2025-02-12 15:13:37 +03:00
resetAliases: ({ itemID }: { itemID: number }) =>
axiosPatch<undefined, IRSFormDTO>({
schema: schemaRSForm,
endpoint: `/api/rsforms/${itemID}/reset-aliases`,
request: { successMessage: infoMsg.reindexComplete }
}),
2025-02-12 15:13:37 +03:00
checkConstituenta: ({ itemID, data }: { itemID: number; data: ICheckConstituentaDTO }) =>
axiosPost<ICheckConstituentaDTO, IExpressionParseDTO>({
schema: schemaExpressionParse,
endpoint: `/api/rsforms/${itemID}/check-constituenta`,
request: { data: data }
})
};