Update serverfolder enable/disable

This commit is contained in:
jeffvli
2022-10-27 00:58:59 -07:00
parent 88e716b970
commit cbbf3087ff
8 changed files with 157 additions and 14 deletions
+39
View File
@@ -162,12 +162,51 @@ const disableServerUrl = async (
return res.status(success.statusCode).json(getSuccessResponse(success)); return res.status(success.statusCode).json(getSuccessResponse(success));
}; };
const deleteServerFolder = async (
req: TypedRequest<typeof validation.servers.deleteFolder>,
res: Response
) => {
const { folderId } = req.params;
await service.servers.deleteFolderById({ id: folderId });
const success = ApiSuccess.noContent({ data: null });
return res.status(success.statusCode).json(getSuccessResponse(success));
};
const enableServerFolder = async (
req: TypedRequest<typeof validation.servers.enableFolder>,
res: Response
) => {
const { folderId } = req.params;
await service.servers.enableFolderById({ id: folderId });
const success = ApiSuccess.noContent({ data: null });
return res.status(success.statusCode).json(getSuccessResponse(success));
};
const disableServerFolder = async (
req: TypedRequest<typeof validation.servers.disableFolder>,
res: Response
) => {
const { folderId } = req.params;
await service.servers.disableFolderById({ id: folderId });
const success = ApiSuccess.noContent({ data: null });
return res.status(success.statusCode).json(getSuccessResponse(success));
};
export const serversController = { export const serversController = {
createServer, createServer,
createServerUrl, createServerUrl,
deleteServer, deleteServer,
deleteServerFolder,
deleteServerUrl, deleteServerUrl,
disableServerFolder,
disableServerUrl, disableServerUrl,
enableServerFolder,
enableServerUrl, enableServerUrl,
getServerDetail, getServerDetail,
getServerList, getServerList,
+4 -4
View File
@@ -13,7 +13,7 @@ export enum AlbumSort {
RATING = 'rating', RATING = 'rating',
} }
const include = (options: { songs?: boolean; user?: AuthUser }) => { const include = (user: AuthUser, options: { songs?: boolean }) => {
// Prisma.AlbumInclude // Prisma.AlbumInclude
const props = { const props = {
_count: { _count: {
@@ -24,17 +24,17 @@ const include = (options: { songs?: boolean; user?: AuthUser }) => {
}, },
albumArtists: true, albumArtists: true,
artists: true, artists: true,
favorites: { where: { userId: options.user?.id } }, favorites: { where: { userId: user?.id } },
genres: true, genres: true,
images: true, images: true,
ratings: { ratings: {
where: { where: {
userId: options.user?.id, userId: user?.id,
}, },
}, },
server: true, server: true,
serverFolders: true, serverFolders: true,
songs: options?.songs && songHelpers.findMany(), songs: options?.songs && songHelpers.findMany(user),
}; };
return props; return props;
+5 -3
View File
@@ -176,6 +176,7 @@ const relatedServerFolders = (items: ServerFolder[]) => {
/* eslint-disable sort-keys-fix/sort-keys-fix */ /* eslint-disable sort-keys-fix/sort-keys-fix */
id: item.id, id: item.id,
name: item.name, name: item.name,
enabled: item.enabled,
remoteId: item.remoteId, remoteId: item.remoteId,
lastScannedAt: item.lastScannedAt, lastScannedAt: item.lastScannedAt,
/* eslint-enable sort-keys-fix/sort-keys-fix */ /* eslint-enable sort-keys-fix/sort-keys-fix */
@@ -266,13 +267,14 @@ const songs = (
) => { ) => {
return ( return (
items?.map((item) => { items?.map((item) => {
const url = options.url ? options.url : item.server.serverUrls[0].url; const customUrl = item.server.serverUrls[0].url;
const baseUrl = customUrl ? customUrl : options.url;
const stream = streamUrl(options.type, { const stream = streamUrl(options.type, {
deviceId: options.deviceId, deviceId: options.deviceId,
remoteId: item.remoteId, remoteId: item.remoteId,
token: options.token, token: options.token,
url: options.url, url: baseUrl,
userId: options.userId, userId: options.userId,
}); });
@@ -294,7 +296,7 @@ const songs = (
item.images, item.images,
options.type, options.type,
ImageType.PRIMARY, ImageType.PRIMARY,
url, baseUrl,
item.remoteId item.remoteId
), ),
releaseDate: item.releaseDate, releaseDate: item.releaseDate,
+7 -2
View File
@@ -1,4 +1,5 @@
import { Prisma } from '@prisma/client'; import { Prisma } from '@prisma/client';
import { AuthUser } from '@middleware/authenticate';
const include = () => { const include = () => {
const props: Prisma.SongInclude = { const props: Prisma.SongInclude = {
@@ -16,7 +17,7 @@ const include = () => {
return props; return props;
}; };
const findMany = () => { const findMany = (user: AuthUser) => {
const props: Prisma.SongFindManyArgs = { const props: Prisma.SongFindManyArgs = {
include: { include: {
album: true, album: true,
@@ -26,7 +27,11 @@ const findMany = () => {
images: true, images: true,
ratings: true, ratings: true,
server: { server: {
include: { serverUrls: true }, include: {
serverUrls: {
where: { userServerUrls: { some: { userId: user.id } } },
},
},
}, },
}, },
orderBy: [ orderBy: [
+27
View File
@@ -85,3 +85,30 @@ router
validateRequest(validation.servers.disableUrl), validateRequest(validation.servers.disableUrl),
controller.servers.disableServerUrl controller.servers.disableServerUrl
); );
router.param('folderId', async (_req, _res, next, folderId) => {
await service.servers.findFolderById({ id: folderId });
next();
});
router
.route('/:serverId/folder/:folderId')
.delete(
authenticateAdmin,
validateRequest(validation.servers.deleteFolder),
controller.servers.deleteServerFolder
);
router
.route('/:serverId/folder/:folderId/enable')
.post(
validateRequest(validation.servers.enableFolder),
controller.servers.enableServerFolder
);
router
.route('/:serverId/folder/:folderId/disable')
.post(
validateRequest(validation.servers.disableFolder),
controller.servers.disableServerFolder
);
+4 -4
View File
@@ -9,7 +9,7 @@ const findById = async (user: AuthUser, options: { id: string }) => {
const { id } = options; const { id } = options;
const album = await prisma.album.findUnique({ const album = await prisma.album.findUnique({
include: helpers.albums.include({ songs: true }), include: helpers.albums.include(user, { songs: true }),
where: { id }, where: { id },
}); });
@@ -53,7 +53,7 @@ const findMany = async (options: AlbumFindManyOptions) => {
prisma.albumRating.findMany({ prisma.albumRating.findMany({
include: { include: {
album: { album: {
include: helpers.albums.include({ songs: false, user }), include: helpers.albums.include(user, { songs: false }),
}, },
}, },
orderBy: { value: orderBy }, orderBy: { value: orderBy },
@@ -78,7 +78,7 @@ const findMany = async (options: AlbumFindManyOptions) => {
}, },
}), }),
prisma.album.findMany({ prisma.album.findMany({
include: helpers.albums.include({ songs: false, user }), include: helpers.albums.include(user, { songs: false }),
skip, skip,
take, take,
where: { where: {
@@ -95,7 +95,7 @@ const findMany = async (options: AlbumFindManyOptions) => {
where: { OR: helpers.shared.serverFolderFilter(serverFolderIds) }, where: { OR: helpers.shared.serverFolderFilter(serverFolderIds) },
}), }),
prisma.album.findMany({ prisma.album.findMany({
include: helpers.albums.include({ songs: false, user }), include: helpers.albums.include(user, { songs: false }),
orderBy: [helpers.albums.sort(sortBy, orderBy)], orderBy: [helpers.albums.sort(sortBy, orderBy)],
skip, skip,
take, take,
+41 -1
View File
@@ -370,8 +370,10 @@ const refresh = async (options: { id: string }) => {
const fullScan = async (options: { id: string; serverFolderId?: string[] }) => { const fullScan = async (options: { id: string; serverFolderId?: string[] }) => {
const { id, serverFolderId } = options; const { id, serverFolderId } = options;
// Only allow scan of enabled folders
const server = await prisma.server.findUnique({ const server = await prisma.server.findUnique({
include: { serverFolders: true }, include: { serverFolders: { where: { enabled: true } } },
where: { id }, where: { id },
}); });
@@ -544,14 +546,52 @@ const disableUrlById = async (user: AuthUser) => {
return null; return null;
}; };
const findFolderById = async (options: { id: string }) => {
const url = await prisma.serverFolder.findUnique({
where: { id: options.id },
});
if (!url) {
throw ApiError.notFound('Folder not found.');
}
return url;
};
const deleteFolderById = async (options: { id: string }) => {
return null;
};
const enableFolderById = async (options: { id: string }) => {
await prisma.serverFolder.update({
data: { enabled: true },
where: { id: options.id },
});
return null;
};
const disableFolderById = async (options: { id: string }) => {
await prisma.serverFolder.update({
data: { enabled: false },
where: { id: options.id },
});
return null;
};
export const serversService = { export const serversService = {
create, create,
createUrl, createUrl,
deleteById, deleteById,
deleteFolderById,
deleteUrlById, deleteUrlById,
disableFolderById,
disableUrlById, disableUrlById,
enableFolderById,
enableUrlById, enableUrlById,
findById, findById,
findFolderById,
findMany, findMany,
findServerUrlById, findServerUrlById,
findUrlById, findUrlById,
+30
View File
@@ -134,17 +134,47 @@ const disableUrl = {
query: z.object({}), query: z.object({}),
}; };
const deleteFolder = {
body: z.object({}),
params: z.object({
...idValidation('serverId'),
...idValidation('folderId'),
}),
query: z.object({}),
};
const enableFolder = {
body: z.object({}),
params: z.object({
...idValidation('serverId'),
...idValidation('folderId'),
}),
query: z.object({}),
};
const disableFolder = {
body: z.object({}),
params: z.object({
...idValidation('serverId'),
...idValidation('folderId'),
}),
query: z.object({}),
};
export const serversValidation = { export const serversValidation = {
create, create,
createCredential, createCredential,
createUrl, createUrl,
deleteCredential, deleteCredential,
deleteFolder,
deleteServer, deleteServer,
deleteUrl, deleteUrl,
detail, detail,
disableCredential, disableCredential,
disableFolder,
disableUrl, disableUrl,
enableCredential, enableCredential,
enableFolder,
enableUrl, enableUrl,
getCredentialDetail, getCredentialDetail,
list, list,