Files
jiapuapp/services/api/family-media-service.js
T

188 lines
8.2 KiB
JavaScript

import { listPreviewFamilyAlbums } from '@/data/preview/family-content.js'
import { hasRemoteConfig } from '@/utils/runtime-config.js'
import {
normalizeAlbumCreatePayload,
normalizeAlbumPhotoCreatePayload,
normalizeAppAlbum,
normalizeAppAlbumPhotos,
normalizeAppAlbums,
normalizeAppVideo,
normalizeAppVideos,
normalizeVideoPayload,
projectPreviewAlbums
} from './family-media-contract.js'
import { normalizeGenealogyPathId } from './genealogy-contract.js'
import { normalizeResourcePathId } from './request-normalizers.js'
import { createRequestError, requestStrict } from './request-client.js'
const requireRemoteMedia = (message, code) => {
if (hasRemoteConfig()) return
throw createRequestError(message, code)
}
export const familyMediaApi = {
async createAlbum(genealogyId, payload, requestOptions = {}) {
requireRemoteMedia('相册创建需要真实服务,当前本地预览不会伪造创建成功', 'REMOTE_WRITE_REQUIRED')
const normalizedGenealogyId = normalizeGenealogyPathId(genealogyId)
return requestStrict({
url: `/genealogy/app/genealogies/${normalizedGenealogyId}/albums`,
method: 'POST',
data: normalizeAlbumCreatePayload(payload)
}, {
requestController: requestOptions.requestController ?? null
})
},
async updateAlbum(genealogyId, albumId, payload, requestOptions = {}) {
const normalizedGenealogyId = normalizeGenealogyPathId(genealogyId)
const normalizedAlbumId = normalizeResourcePathId(albumId, '相册标识')
requireRemoteMedia('修改相册需要真实服务,当前本地预览不会伪造保存成功', 'REMOTE_WRITE_REQUIRED')
const album = await requestStrict({
url: `/genealogy/app/genealogies/${normalizedGenealogyId}/albums/${normalizedAlbumId}`,
method: 'PUT',
data: normalizeAlbumCreatePayload(payload)
}, {
requestController: requestOptions.requestController ?? null
})
return normalizeAppAlbum(album, normalizedGenealogyId)
},
async deleteAlbum(genealogyId, albumId, requestOptions = {}) {
const normalizedGenealogyId = normalizeGenealogyPathId(genealogyId)
const normalizedAlbumId = normalizeResourcePathId(albumId, '相册标识')
requireRemoteMedia('删除相册需要真实服务,当前本地预览不会伪造删除成功', 'REMOTE_WRITE_REQUIRED')
await requestStrict({
url: `/genealogy/app/genealogies/${normalizedGenealogyId}/albums/${normalizedAlbumId}`,
method: 'DELETE'
}, {
requireData: false,
requestController: requestOptions.requestController ?? null
})
return null
},
async createAlbumPhoto(genealogyId, albumId, payload, requestOptions = {}) {
const normalizedGenealogyId = normalizeGenealogyPathId(genealogyId)
const normalizedAlbumId = normalizeResourcePathId(albumId, '相册标识')
requireRemoteMedia('上传相册照片需要真实服务,当前本地预览不会伪造保存成功', 'REMOTE_WRITE_REQUIRED')
return requestStrict({
url: `/genealogy/app/genealogies/${normalizedGenealogyId}/albums/${normalizedAlbumId}/photos`,
method: 'POST',
data: normalizeAlbumPhotoCreatePayload(payload)
}, {
requestController: requestOptions.requestController ?? null
})
},
async deleteAlbumPhoto(genealogyId, albumId, photoId, requestOptions = {}) {
const normalizedGenealogyId = normalizeGenealogyPathId(genealogyId)
const normalizedAlbumId = normalizeResourcePathId(albumId, '相册标识')
const normalizedPhotoId = normalizeResourcePathId(photoId, '照片标识')
requireRemoteMedia('删除相册照片需要真实服务,当前本地预览不会伪造删除成功', 'REMOTE_WRITE_REQUIRED')
await requestStrict({
url: `/genealogy/app/genealogies/${normalizedGenealogyId}/albums/${normalizedAlbumId}/photos/${normalizedPhotoId}`,
method: 'DELETE'
}, {
requireData: false,
requestController: requestOptions.requestController ?? null
})
return null
},
async getAlbums(genealogyId, requestOptions = {}) {
const normalizedGenealogyId = normalizeGenealogyPathId(genealogyId)
if (!hasRemoteConfig()) {
return projectPreviewAlbums(
listPreviewFamilyAlbums(normalizedGenealogyId),
normalizedGenealogyId
)
}
const albums = await requestStrict({
url: `/genealogy/app/genealogies/${normalizedGenealogyId}/albums`,
method: 'GET'
}, {
requestController: requestOptions.requestController ?? null
})
return normalizeAppAlbums(albums, normalizedGenealogyId)
},
async getAlbumPhotos(genealogyId, albumId, requestOptions = {}) {
const normalizedGenealogyId = normalizeGenealogyPathId(genealogyId)
const normalizedAlbumId = normalizeResourcePathId(albumId, '相册标识')
requireRemoteMedia('相册照片需要真实读取服务,当前本地预览不会伪造照片列表', 'REMOTE_READ_REQUIRED')
const photos = await requestStrict({
url: `/genealogy/app/genealogies/${normalizedGenealogyId}/albums/${normalizedAlbumId}/photos`,
method: 'GET'
}, {
requestController: requestOptions.requestController ?? null
})
return normalizeAppAlbumPhotos(photos, normalizedGenealogyId, normalizedAlbumId)
},
async getVideos(genealogyId, requestOptions = {}) {
const normalizedGenealogyId = normalizeGenealogyPathId(genealogyId)
requireRemoteMedia('家族视频读取需要真实服务,当前本地预览不会伪造结果', 'REMOTE_READ_REQUIRED')
const videos = await requestStrict({
url: `/genealogy/app/genealogies/${normalizedGenealogyId}/videos`,
method: 'GET'
}, {
requestController: requestOptions.requestController ?? null
})
return normalizeAppVideos(videos, normalizedGenealogyId)
},
async getVideoDetail(genealogyId, videoId, requestOptions = {}) {
const normalizedGenealogyId = normalizeGenealogyPathId(genealogyId)
const normalizedVideoId = normalizeResourcePathId(videoId, '视频标识')
requireRemoteMedia('家族视频详情读取需要真实服务,当前本地预览不会伪造结果', 'REMOTE_READ_REQUIRED')
const video = await requestStrict({
url: `/genealogy/app/genealogies/${normalizedGenealogyId}/videos/${normalizedVideoId}`,
method: 'GET'
}, {
requestController: requestOptions.requestController ?? null
})
return normalizeAppVideo(video, normalizedGenealogyId, normalizedVideoId)
},
async createVideo(genealogyId, payload, requestOptions = {}) {
const normalizedGenealogyId = normalizeGenealogyPathId(genealogyId)
requireRemoteMedia('家族视频写入需要真实服务,当前本地预览不会伪造结果', 'REMOTE_WRITE_REQUIRED')
const video = await requestStrict({
url: `/genealogy/app/genealogies/${normalizedGenealogyId}/videos`,
method: 'POST',
data: normalizeVideoPayload(payload)
}, {
requestController: requestOptions.requestController ?? null
})
return normalizeAppVideo(video, normalizedGenealogyId)
},
async updateVideo(genealogyId, videoId, payload, requestOptions = {}) {
const normalizedGenealogyId = normalizeGenealogyPathId(genealogyId)
const normalizedVideoId = normalizeResourcePathId(videoId, '视频标识')
requireRemoteMedia('家族视频写入需要真实服务,当前本地预览不会伪造结果', 'REMOTE_WRITE_REQUIRED')
const video = await requestStrict({
url: `/genealogy/app/genealogies/${normalizedGenealogyId}/videos/${normalizedVideoId}`,
method: 'PUT',
data: normalizeVideoPayload(payload)
}, {
requestController: requestOptions.requestController ?? null
})
return normalizeAppVideo(video, normalizedGenealogyId, normalizedVideoId)
},
async deleteVideo(genealogyId, videoId, requestOptions = {}) {
const normalizedGenealogyId = normalizeGenealogyPathId(genealogyId)
const normalizedVideoId = normalizeResourcePathId(videoId, '视频标识')
requireRemoteMedia('家族视频写入需要真实服务,当前本地预览不会伪造结果', 'REMOTE_WRITE_REQUIRED')
await requestStrict({
url: `/genealogy/app/genealogies/${normalizedGenealogyId}/videos/${normalizedVideoId}`,
method: 'DELETE'
}, {
requireData: false,
requestController: requestOptions.requestController ?? null
})
return null
}
}