mirror of
https://github.com/jeffvli/feishin.git
synced 2026-05-09 20:29:36 +02:00
Add server map route
This commit is contained in:
@@ -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,
|
||||||
|
|||||||
@@ -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(
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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: {
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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,
|
||||||
|
});
|
||||||
|
};
|
||||||
Reference in New Issue
Block a user