Add server map route

This commit is contained in:
jeffvli
2022-11-15 13:31:11 -08:00
parent 8d5a05c329
commit 758e9d4d2c
8 changed files with 58 additions and 8 deletions
+8 -1
View File
@@ -1,10 +1,16 @@
import { ServerType } from '@prisma/client'; import { ServerType } from '@prisma/client';
import { Response } from 'express'; import { Request, Response } from 'express';
import { ApiError, ApiSuccess, getSuccessResponse } from '@/utils'; import { ApiError, ApiSuccess, getSuccessResponse } from '@/utils';
import { toApiModel } from '@helpers/api-model'; import { toApiModel } from '@helpers/api-model';
import { service } from '@services/index'; import { service } from '@services/index';
import { TypedRequest, validation } from '@validations/index'; import { TypedRequest, validation } from '@validations/index';
const getServerListMap = async (req: Request, res: Response) => {
const data = await service.servers.getServerListMap();
const success = ApiSuccess.ok({ data });
return res.status(success.statusCode).json(getSuccessResponse(success));
};
const getServerDetail = async ( const getServerDetail = async (
req: TypedRequest<typeof validation.servers.detail>, req: TypedRequest<typeof validation.servers.detail>,
res: Response res: Response
@@ -351,6 +357,7 @@ export const serversController = {
fullScanServer, fullScanServer,
getServerDetail, getServerDetail,
getServerList, getServerList,
getServerListMap,
quickScanServer, quickScanServer,
refreshServer, refreshServer,
updateServer, updateServer,
+2
View File
@@ -21,6 +21,8 @@ router
controller.servers.createServer controller.servers.createServer
); );
router.route('/map').get(controller.servers.getServerListMap);
router router
.route('/:serverId') .route('/:serverId')
.get( .get(
+13
View File
@@ -76,6 +76,18 @@ const remoteServerLogin = async (options: {
throw ApiError.badRequest('Server type invalid.'); throw ApiError.badRequest('Server type invalid.');
}; };
const getServerListMap = async () => {
const servers = await prisma.server.findMany({});
return servers.reduce((acc, server) => {
acc[server.id] = {
name: server.name,
type: server.type,
};
return acc;
}, {} as Record<string, { name: string; type: string }>);
};
const findById = async (user: AuthUser, options: { id: string }) => { const findById = async (user: AuthUser, options: { id: string }) => {
const { id } = options; const { id } = options;
@@ -626,6 +638,7 @@ export const serversService = {
findServerUrlById, findServerUrlById,
findUrlById, findUrlById,
fullScan, fullScan,
getServerListMap,
refresh, refresh,
remoteServerLogin, remoteServerLogin,
update, update,
+1
View File
@@ -18,6 +18,7 @@ export const queryKeys = {
}, },
servers: { servers: {
list: (params?: any) => ['servers', 'list', params] as const, list: (params?: any) => ['servers', 'list', params] as const,
map: () => ['servers', 'map'] as const,
root: ['servers'], root: ['servers'],
}, },
tasks: { tasks: {
+11
View File
@@ -2,12 +2,22 @@ import {
BaseResponse, BaseResponse,
NullResponse, NullResponse,
Server, Server,
ServerMap,
ServerPermissionType, ServerPermissionType,
ServerType, ServerType,
ServerUrl, ServerUrl,
} from '@/renderer/api/types'; } from '@/renderer/api/types';
import { ax } from '@/renderer/lib/axios'; import { ax } from '@/renderer/lib/axios';
export type ServerMapResponse = BaseResponse<ServerMap>;
const getServerMap = async (signal?: AbortSignal) => {
const { data } = await ax.get<ServerMapResponse>('/servers/map', {
signal,
});
return data;
};
export type ServerListResponse = BaseResponse<Server[]>; export type ServerListResponse = BaseResponse<Server[]>;
const getServerList = async ( const getServerList = async (
@@ -238,6 +248,7 @@ export const serversApi = {
enableUrl, enableUrl,
fullScan, fullScan,
getServerList, getServerList,
getServerMap,
quickScan, quickScan,
updateServer, updateServer,
updateServerPermission, updateServerPermission,
+7
View File
@@ -4,6 +4,13 @@ export enum ServerType {
SUBSONIC = 'SUBSONIC', SUBSONIC = 'SUBSONIC',
} }
export type ServerMap = {
[key: string]: {
name: string;
type: ServerType;
};
};
export enum ServerPermissionType { export enum ServerPermissionType {
ADMIN = 'ADMIN', ADMIN = 'ADMIN',
EDITOR = 'EDITOR', EDITOR = 'EDITOR',
@@ -24,13 +24,7 @@ export const useCreateServer = () => {
}, },
onSettled: () => { onSettled: () => {
queryClient.invalidateQueries(queryKeys.servers.list()); queryClient.invalidateQueries(queryKeys.servers.list());
}, queryClient.invalidateQueries(queryKeys.servers.map());
onSuccess: (data) => {
toast.show({
message: `${data.data.name} was added successfully`,
title: 'Server added',
type: 'success',
});
}, },
}); });
}; };
@@ -0,0 +1,15 @@
import { useQuery } from '@tanstack/react-query';
import { api } from '@/renderer/api';
import { queryKeys } from '@/renderer/api/query-keys';
import { ServerMapResponse } from '@/renderer/api/servers.api';
import { QueryOptions } from '@/renderer/lib/react-query';
export const useServerMap = (options?: QueryOptions<ServerMapResponse>) => {
return useQuery<ServerMapResponse>({
cacheTime: Infinity,
queryFn: ({ signal }) => api.servers.getServerMap(signal),
queryKey: queryKeys.servers.map(),
staleTime: Infinity,
...options,
});
};