import { isArray } from "underscore"; import Http from "../utilities/http"; import makeErrorsPretty from "../utilities/make_errors_pretty"; import type { ApiPhotoArea, ApiPhotoLocation, ApiPhotoLocation3d, ApiPhotoSession, User } from "../models"; import type { AssociationIds } from "type_aliases"; export default class PhotoAreaApi { static createPhotoLocations({ projectId, photoAreaId, photoSessionId }: AssociationIds, locations: ApiPhotoLocation[], user: User): Promise { let url = `${Http.baseUrl()}/projects/${projectId}/photo-areas/${photoAreaId}/locations`; if (photoSessionId) { url += `?photoSessionId=${photoSessionId}`; } return Http.post(url, user, locations) as unknown as Promise; } static listPhotoAreasForProject({ projectId, integrationProjectId }: AssociationIds, user: User): Promise { let url = `${Http.baseUrl()}/projects/${projectId}/photo-areas`; if (integrationProjectId != null) { url += `?integrationProjectId=${integrationProjectId}`; } return Http.get(url, user) as unknown as Promise; } static listPhotoLocations({ projectId, photoAreaId, photoSessionId }: AssociationIds, user: User): Promise { let url = `${Http.baseUrl()}/projects/${projectId}/photo-areas/${photoAreaId}/locations`; if (photoSessionId) { if (isArray(photoSessionId)) { url += `?photoSessionId=${photoSessionId.join(",")}`; } else { url += `?photoSessionId=${photoSessionId}`; } } return Http.get(url, user) as unknown as Promise; } static listPhotoSessionsForPhotoArea({ projectId, photoAreaId }: AssociationIds, user: User): Promise { let url = `${Http.baseUrl()}/projects/${projectId}/photo-areas/${photoAreaId}/sessions`; return Http.get(url, user) as unknown as Promise; } static updatePhotoLocationPositionAndOrientation({ projectId, floorId, photoLocationId }: AssociationIds, coordinates: ApiPhotoLocation3d, user: User): Promise { let url = `${Http.baseUrl()}/projects/${projectId}/floors/${floorId}/photo-locations/${photoLocationId}/bim`; return Http.patch(url, user, coordinates) as unknown as Promise; } static updatePhotoLocation({ projectId, photoAreaId }: AssociationIds, location: ApiPhotoLocation, user: User): Promise { let url = `${Http.baseUrl()}/projects/${projectId}/photo-areas/${photoAreaId}/locations/${location.id}`; return Http.patch(url, user, location) as unknown as Promise; } static updatePhotoLocations({ projectId, photoAreaId }: AssociationIds, locations: ApiPhotoLocation[], user: User): Promise { let url = `${Http.baseUrl()}/projects/${projectId}/photo-areas/${photoAreaId}/locations`; return Http.put(url, user, locations) as unknown as Promise; } static deletePhotoLocations({ projectId, photoAreaId }: AssociationIds, locationIds: number[], user: User): Promise { let url = `${Http.baseUrl()}/projects/${projectId}/photo-areas/${photoAreaId}/locations`; return Http.delete(url, user, locationIds) as unknown as Promise; } } makeErrorsPretty(PhotoAreaApi);