mirror of
https://github.com/jeffvli/feishin.git
synced 2026-05-09 20:29:36 +02:00
87 lines
1.7 KiB
TypeScript
87 lines
1.7 KiB
TypeScript
import { AuthUser } from '@/middleware';
|
|
import { SortOrder } from '@/types/types';
|
|
import { songHelpers } from '@helpers/songs.helpers';
|
|
|
|
export enum AlbumSort {
|
|
DATE_ADDED = 'added',
|
|
DATE_ADDED_REMOTE = 'addedRemote',
|
|
DATE_RELEASED = 'released',
|
|
DATE_RELEASED_YEAR = 'year',
|
|
FAVORITE = 'favorite',
|
|
NAME = 'name',
|
|
RANDOM = 'random',
|
|
RATING = 'rating',
|
|
}
|
|
|
|
const include = (user: AuthUser, options: { songs?: boolean }) => {
|
|
// Prisma.AlbumInclude
|
|
const props = {
|
|
_count: {
|
|
select: {
|
|
favorites: true,
|
|
songs: true,
|
|
},
|
|
},
|
|
albumArtists: true,
|
|
artists: true,
|
|
favorites: { where: { userId: user?.id } },
|
|
genres: true,
|
|
images: true,
|
|
ratings: {
|
|
where: {
|
|
userId: user?.id,
|
|
},
|
|
},
|
|
server: true,
|
|
serverFolders: { where: { enabled: true } },
|
|
songs: options?.songs && songHelpers.findMany(user),
|
|
};
|
|
|
|
return props;
|
|
};
|
|
|
|
const sort = (sortBy: AlbumSort, orderBy: SortOrder) => {
|
|
let order;
|
|
|
|
switch (sortBy) {
|
|
case AlbumSort.NAME:
|
|
order = { name: orderBy };
|
|
break;
|
|
|
|
case AlbumSort.DATE_ADDED:
|
|
order = { createdAt: orderBy };
|
|
break;
|
|
|
|
case AlbumSort.DATE_ADDED_REMOTE:
|
|
order = { remoteCreatedAt: orderBy };
|
|
break;
|
|
|
|
case AlbumSort.DATE_RELEASED:
|
|
order = { releaseDate: orderBy, year: orderBy };
|
|
break;
|
|
|
|
case AlbumSort.DATE_RELEASED_YEAR:
|
|
order = { releaseYear: orderBy };
|
|
break;
|
|
|
|
case AlbumSort.RATING:
|
|
order = { rating: orderBy };
|
|
break;
|
|
|
|
case AlbumSort.FAVORITE:
|
|
order = { favorite: orderBy };
|
|
break;
|
|
|
|
default:
|
|
order = { title: orderBy };
|
|
break;
|
|
}
|
|
|
|
return order;
|
|
};
|
|
|
|
export const albumHelpers = {
|
|
include,
|
|
sort,
|
|
};
|