feat: migrate app routes and business modules
This commit is contained in:
@@ -0,0 +1,187 @@
|
||||
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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user