import axios from './instance' import { TAGGING_POINT_LIST, DELETE_TAGGING_POINT, UPDATE_TAGGING_POINT, INSERT_TAGGING_POINT } from './constant' import type { Model } from './model' import type { Tagging } from './tagging' interface ServicePosition { "id": number, "tagId": number, "modelId": number "tagPoint": SceneLocalPos, } export interface TaggingPosition { id: string, taggingId: Tagging['id'] modelId: Model['id'] localPos: SceneLocalPos } export type TaggingPositions = TaggingPosition[] const serviceToLocal = (position: ServicePosition, taggingId?: Tagging['id']): TaggingPosition => ({ id: position.id.toString(), modelId: position.modelId.toString(), taggingId: taggingId || position.tagId.toString(), localPos: position.tagPoint }) const localToService = (position: TaggingPosition, update = false): PartialProps => ({ "id": update ? Number(position.id) : undefined, "tagId": Number(position.taggingId), "modelId": Number(position.modelId), "tagPoint": position.localPos, }) export const fetchTaggingPositions = async (taggingId: Tagging['id']) => { const positions = await axios.post(`${TAGGING_POINT_LIST}${taggingId}`, {}) return positions.map(position => serviceToLocal(position, taggingId)) } export const postAddTaggingPosition = async (position: TaggingPosition) => { const servicePosition = await axios.post(INSERT_TAGGING_POINT, localToService(position)) return serviceToLocal(servicePosition) } export const postUpdateTaggingPosition = (position: TaggingPosition) => { return axios.post(UPDATE_TAGGING_POINT, localToService(position, true)) } export const postDeleteTaggingPosition = (position: TaggingPosition) => { return axios.post(DELETE_TAGGING_POINT, { ids: [position.id] }) }