diff --git a/front/models/Song.ts b/front/models/Song.ts index fe98dbd..d4da7c0 100644 --- a/front/models/Song.ts +++ b/front/models/Song.ts @@ -6,12 +6,12 @@ import ResponseHandler from './ResponseHandler'; import API from '../API'; import { AlbumValidator } from './Album'; import { GenreValidator } from './Genre'; -import { SongHistoryItem, SongHistoryItemValidator } from './SongHistory'; +import { SongHistoryItemWithoutSongValidator } from './SongHistory'; export type SongInclude = 'artist' | 'album' | 'genre' | 'SongHistory' | 'likedByUsers'; export const SongValidator = yup - .object({ + .object().shape({ name: yup.string().required(), midiPath: yup.string().required(), musicXmlPath: yup.string().required(), @@ -22,7 +22,7 @@ export const SongValidator = yup details: SongDetailsValidator.required(), cover: yup.string().required(), SongHistory: yup - .lazy(() => yup.array(SongHistoryItemValidator.default(undefined))) + .lazy(() => yup.array(SongHistoryItemWithoutSongValidator.default(undefined))) .optional(), bestScore: yup.number().optional().nullable(), lastScore: yup.number().optional().nullable(), @@ -31,7 +31,7 @@ export const SongValidator = yup genre: yup.lazy(() => GenreValidator.default(undefined)).optional(), }) .concat(ModelValidator) - .transform((song: Song & { SongHistory: SongHistoryItem[] }) => ({ + .transform((song: Song) => ({ ...song, cover: `${API.baseUrl}/song/${song.id}/illustration`, details: song.difficulties, diff --git a/front/models/SongHistory.ts b/front/models/SongHistory.ts index 6e2cc9a..5858165 100644 --- a/front/models/SongHistory.ts +++ b/front/models/SongHistory.ts @@ -1,8 +1,9 @@ import * as yup from 'yup'; import ResponseHandler from './ResponseHandler'; import { ModelValidator } from './Model'; +import { SongValidator } from './Song'; -export const SongHistoryItemValidator = yup +export const SongHistoryItemWithoutSongValidator = yup .object({ songID: yup.number().required(), userID: yup.number().required(), @@ -25,6 +26,12 @@ export const SongHistoryItemValidator = yup difficulties: yup.mixed().required(), }) .concat(ModelValidator); + +export const SongHistoryItemValidator = SongHistoryItemWithoutSongValidator + .concat(yup.object({ + song: yup.lazy(() => SongValidator.default(undefined)).optional(), + })); + export type SongHistoryItem = yup.InferType; export const SongHistoryItemHandler: ResponseHandler = {