parent
8941fef04d
commit
55dd935302
@ -0,0 +1,32 @@
|
||||
import MusicBrainz from '@server/api/musicbrainz';
|
||||
import { MediaType } from '@server/constants/media';
|
||||
import Media from '@server/entity/Media';
|
||||
import logger from '@server/logger';
|
||||
import { mapArtistResult } from '@server/models/Search';
|
||||
import { Router } from 'express';
|
||||
|
||||
const musicRoutes = Router();
|
||||
|
||||
musicRoutes.get('/artist/:id', async (req, res, next) => {
|
||||
const mb = new MusicBrainz();
|
||||
|
||||
try {
|
||||
const artist = await mb.getArtist(req.params.id);
|
||||
|
||||
const media = await Media.getMedia(artist.id, MediaType.MUSIC);
|
||||
|
||||
return res.status(200).json(mapArtistResult(artist, media));
|
||||
} catch (e) {
|
||||
logger.debug('Something went wrong retrieving movie', {
|
||||
label: 'API',
|
||||
errorMessage: e.message,
|
||||
movieId: req.params.id,
|
||||
});
|
||||
return next({
|
||||
status: 500,
|
||||
message: 'Unable to retrieve movie.',
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
export default musicRoutes;
|
@ -0,0 +1,81 @@
|
||||
import TitleCard from '@app/components/TitleCard';
|
||||
import { Permission, useUser } from '@app/hooks/useUser';
|
||||
import type { ArtistResult,
|
||||
ReleaseGroupResult,
|
||||
ReleaseResult,
|
||||
WorkResult,
|
||||
RecordingResult } from '@server/models/Search';
|
||||
import { da } from 'date-fns/locale';
|
||||
import e from 'express';
|
||||
import { has } from 'lodash';
|
||||
import { useInView } from 'react-intersection-observer';
|
||||
import useSWR from 'swr';
|
||||
|
||||
export interface MusicBrainTitleCardProps {
|
||||
id: number;
|
||||
mbId: string;
|
||||
mediaType: 'music';
|
||||
type?: 'artist' | 'release-group' | 'release' | 'recording' | 'work';
|
||||
canExpand?: boolean;
|
||||
}
|
||||
|
||||
const TmdbTitleCard = ({
|
||||
id,
|
||||
mbId,
|
||||
mediaType,
|
||||
canExpand,
|
||||
type='artist'
|
||||
}: MusicBrainTitleCardProps) => {
|
||||
const { hasPermission } = useUser();
|
||||
|
||||
const { ref, inView } = useInView({
|
||||
triggerOnce: true,
|
||||
});
|
||||
const url = `/api/v1/music/${type}/${mbId}`;
|
||||
const { data, error } = useSWR<ArtistResult | ReleaseGroupResult | ReleaseResult | WorkResult | RecordingResult>(
|
||||
inView ? `${url}` : null
|
||||
);
|
||||
|
||||
if (!data && !error) {
|
||||
return (
|
||||
<div ref={ref}>
|
||||
<TitleCard.Placeholder canExpand={canExpand} />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
if (!data) {
|
||||
return hasPermission(Permission.ADMIN) ? (
|
||||
<TitleCard.ErrorCard
|
||||
id={id}
|
||||
mbId={mbId}
|
||||
type='music'
|
||||
/>
|
||||
) : null;
|
||||
}
|
||||
|
||||
if (data.mediaType === 'artist') {
|
||||
const newData = data as ArtistResult;
|
||||
return (
|
||||
<TitleCard
|
||||
id={id}
|
||||
status={newData.mediaInfo?.status}
|
||||
title={newData.name}
|
||||
mediaType={mediaType}
|
||||
canExpand={canExpand}
|
||||
/>
|
||||
);
|
||||
} else if (data.mediaType === 'release-group' || data.mediaType === 'release') {
|
||||
return (<TitleCard
|
||||
id={data.id}
|
||||
image={data.posterPath}
|
||||
status={data.mediaInfo?.status}
|
||||
title={data.title}
|
||||
mediaType={data.mediaType}
|
||||
canExpand={canExpand}
|
||||
/>)
|
||||
}
|
||||
return null;
|
||||
};
|
||||
|
||||
export default TmdbTitleCard;
|
Loading…
Reference in new issue