36 lines
879 B
TypeScript
36 lines
879 B
TypeScript
import Model, { ModelValidator } from './Model';
|
|
import * as yup from 'yup';
|
|
import ResponseHandler from './ResponseHandler';
|
|
|
|
export const SearchType = ['song', 'artist', 'album', 'genre'] as const;
|
|
export type SearchType = (typeof SearchType)[number];
|
|
|
|
const SearchHistoryValidator = yup
|
|
.object({
|
|
query: yup.string().required(),
|
|
type: yup.mixed<SearchType>().oneOf(SearchType).required(),
|
|
userId: yup.number().required(),
|
|
searchDate: yup.date().required(),
|
|
})
|
|
.concat(ModelValidator);
|
|
|
|
export const SearchHistoryHandler: ResponseHandler<
|
|
yup.InferType<typeof SearchHistoryValidator>,
|
|
SearchHistory
|
|
> = {
|
|
validator: SearchHistoryValidator,
|
|
transformer: (value) => ({
|
|
...value,
|
|
timestamp: value.searchDate,
|
|
}),
|
|
};
|
|
|
|
interface SearchHistory extends Model {
|
|
query: string;
|
|
type: SearchType;
|
|
userId: number;
|
|
timestamp: Date;
|
|
}
|
|
|
|
export default SearchHistory;
|