Files
Chromacase/front/models/SongHistory.ts
Clément Le Bihan 00d097f643 Fixes prettier
2023-12-20 12:01:55 +01:00

54 lines
1.6 KiB
TypeScript

import * as yup from 'yup';
import ResponseHandler from './ResponseHandler';
import { ModelValidator } from './Model';
import { SongValidator } from './Song';
export const SongHistoryItemWithoutSongValidator = yup
.object({
songID: yup.number().required(),
userID: yup.number().required(),
info: yup
.object({
good: yup.number().required(),
great: yup.number().required(),
score: yup.number().required(),
wrong: yup.number().required(),
missed: yup.number().required(),
perfect: yup.number().required(),
max_score: yup.number().required(),
max_streak: yup.number().required(),
// there's also a current streak key but it doesn't
// conceptually makes sense outside of the played game
})
.required(),
score: yup.number().required(),
playDate: yup.date().required(),
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<typeof SongHistoryItemValidator>;
export const SongHistoryItemHandler: ResponseHandler<SongHistoryItem> = {
validator: SongHistoryItemValidator,
};
export const SongHistoryValidator = yup.object({
best: yup.number().required().nullable(),
history: yup.array(SongHistoryItemValidator).required(),
});
export type SongHistory = yup.InferType<typeof SongHistoryValidator>;
export const SongHistoryHandler: ResponseHandler<SongHistory> = {
validator: SongHistoryValidator,
};
export default SongHistory;