lty/qy-lty-admin/lib/api/adapters.ts
2026-03-17 13:17:02 +08:00

72 lines
2.7 KiB
TypeScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import type { Song as ApiSong } from "./types"
import type { Song as ComponentSong } from "@/components/songs/song-detail-dialog"
/**
* 将API歌曲类型转换为组件歌曲类型
*/
export function apiSongToComponentSong(apiSong: ApiSong): ComponentSong {
// 优先使用rawData中的数据这样可以确保编辑时加载所有原始数据
const rawData = apiSong.rawData;
const attributes = rawData?.attributes || {};
return {
id: apiSong.id,
name: apiSong.name,
composer: apiSong.composer || attributes.composer || "",
lyricist: apiSong.lyricist || attributes.lyricist || "",
duration: apiSong.duration || attributes.duration || "",
releaseDate: apiSong.releaseDate,
status: apiSong.status || rawData?.status_display || "",
image: apiSong.image || rawData?.image_url || undefined,
audioUrl: apiSong.audioUrl || attributes.audio_file || "",
description: apiSong.description || rawData?.description || "",
rarity: apiSong.rarity || rawData?.rarity_display || "",
cardType: apiSong.cardType || rawData?.card_type_display || "",
genre: apiSong.genre || attributes.genre || "",
lyrics: apiSong.lyrics || attributes.lyrics || "",
bpm: apiSong.bpm || attributes.bpm || 0
}
}
/**
* 将组件歌曲类型转换为API歌曲类型保留原始数据
*/
export function componentSongToApiSong(componentSong: ComponentSong, originalApiSong?: ApiSong): ApiSong {
// 获取原始数据
const rawData = originalApiSong?.rawData;
return {
id: componentSong.id,
name: componentSong.name,
composer: componentSong.composer,
lyricist: componentSong.lyricist,
duration: componentSong.duration,
releaseDate: componentSong.releaseDate,
status: componentSong.status,
image: componentSong.image,
audioUrl: componentSong.audioUrl,
description: componentSong.description,
rarity: componentSong.rarity,
cardType: componentSong.cardType,
genre: componentSong.genre,
lyrics: componentSong.lyrics,
bpm: typeof componentSong.bpm === 'string' ? parseInt(componentSong.bpm, 10) : componentSong.bpm,
// 保留原始数据
rawData: rawData ? {
...rawData,
// 更新原始数据中的相关字段
name: componentSong.name,
description: componentSong.description || rawData.description,
attributes: {
...rawData.attributes,
composer: componentSong.composer,
lyricist: componentSong.lyricist,
duration: componentSong.duration,
genre: componentSong.genre,
lyrics: componentSong.lyrics,
bpm: typeof componentSong.bpm === 'string' ? parseInt(componentSong.bpm, 10) : componentSong.bpm,
audio_file: componentSong.audioUrl
}
} : undefined
}
}