tagging-position.ts 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import axios from './instance'
  2. import {
  3. TAGGING_POINT_LIST,
  4. DELETE_TAGGING_POINT,
  5. UPDATE_TAGGING_POINT,
  6. INSERT_TAGGING_POINT
  7. } from './constant'
  8. import type { Model } from './model'
  9. import type { Tagging } from './tagging'
  10. interface ServicePosition {
  11. "id": number,
  12. "tagId": number,
  13. "modelId": number
  14. "tagPoint": SceneLocalPos,
  15. }
  16. export interface TaggingPosition {
  17. id: string,
  18. taggingId: Tagging['id']
  19. modelId: Model['id']
  20. localPos: SceneLocalPos
  21. }
  22. export type TaggingPositions = TaggingPosition[]
  23. const serviceToLocal = (position: ServicePosition, taggingId?: Tagging['id']): TaggingPosition => ({
  24. id: position.id.toString(),
  25. modelId: position.modelId.toString(),
  26. taggingId: taggingId || position.tagId.toString(),
  27. localPos: position.tagPoint
  28. })
  29. const localToService = (position: TaggingPosition, update = false): PartialProps<ServicePosition, 'id'> => ({
  30. "id": update ? Number(position.id) : undefined,
  31. "tagId": Number(position.taggingId),
  32. "modelId": Number(position.modelId),
  33. "tagPoint": position.localPos,
  34. })
  35. export const fetchTaggingPositions = async (taggingId: Tagging['id']) => {
  36. const positions = await axios.post<ServicePosition[]>(`${TAGGING_POINT_LIST}${taggingId}`, {})
  37. return positions.map(position => serviceToLocal(position, taggingId))
  38. }
  39. export const postAddTaggingPosition = async (position: TaggingPosition) => {
  40. const servicePosition = await axios.post<ServicePosition>(INSERT_TAGGING_POINT, localToService(position))
  41. return serviceToLocal(servicePosition)
  42. }
  43. export const postUpdateTaggingPosition = (position: TaggingPosition) => {
  44. return axios.post<undefined>(UPDATE_TAGGING_POINT, localToService(position, true))
  45. }
  46. export const postDeleteTaggingPosition = (position: TaggingPosition) => {
  47. return axios.post<undefined>(DELETE_TAGGING_POINT, { ids: [position.id] })
  48. }