|
import { Request, Response } from 'express'; |
|
import { ApiResponse } from '../types/index.js'; |
|
import { |
|
getAllGroups, |
|
getGroupByIdOrName, |
|
createGroup, |
|
updateGroup, |
|
updateGroupServers, |
|
deleteGroup, |
|
addServerToGroup, |
|
removeServerFromGroup, |
|
getServersInGroup |
|
} from '../services/groupService.js'; |
|
|
|
|
|
export const getGroups = (_: Request, res: Response): void => { |
|
try { |
|
const groups = getAllGroups(); |
|
const response: ApiResponse = { |
|
success: true, |
|
data: groups, |
|
}; |
|
res.json(response); |
|
} catch (error) { |
|
res.status(500).json({ |
|
success: false, |
|
message: 'Failed to get groups information', |
|
}); |
|
} |
|
}; |
|
|
|
|
|
export const getGroup = (req: Request, res: Response): void => { |
|
try { |
|
const { id } = req.params; |
|
if (!id) { |
|
res.status(400).json({ |
|
success: false, |
|
message: 'Group ID is required', |
|
}); |
|
return; |
|
} |
|
|
|
const group = getGroupByIdOrName(id); |
|
if (!group) { |
|
res.status(404).json({ |
|
success: false, |
|
message: 'Group not found', |
|
}); |
|
return; |
|
} |
|
|
|
const response: ApiResponse = { |
|
success: true, |
|
data: group, |
|
}; |
|
res.json(response); |
|
} catch (error) { |
|
res.status(500).json({ |
|
success: false, |
|
message: 'Failed to get group information', |
|
}); |
|
} |
|
}; |
|
|
|
|
|
export const createNewGroup = (req: Request, res: Response): void => { |
|
try { |
|
const { name, description, servers } = req.body; |
|
if (!name) { |
|
res.status(400).json({ |
|
success: false, |
|
message: 'Group name is required', |
|
}); |
|
return; |
|
} |
|
|
|
const serverList = Array.isArray(servers) ? servers : []; |
|
const newGroup = createGroup(name, description, serverList); |
|
if (!newGroup) { |
|
res.status(400).json({ |
|
success: false, |
|
message: 'Failed to create group or group name already exists', |
|
}); |
|
return; |
|
} |
|
|
|
const response: ApiResponse = { |
|
success: true, |
|
data: newGroup, |
|
message: 'Group created successfully', |
|
}; |
|
res.status(201).json(response); |
|
} catch (error) { |
|
res.status(500).json({ |
|
success: false, |
|
message: 'Internal server error', |
|
}); |
|
} |
|
}; |
|
|
|
|
|
export const updateExistingGroup = (req: Request, res: Response): void => { |
|
try { |
|
const { id } = req.params; |
|
const { name, description, servers } = req.body; |
|
if (!id) { |
|
res.status(400).json({ |
|
success: false, |
|
message: 'Group ID is required', |
|
}); |
|
return; |
|
} |
|
|
|
|
|
const updateData: any = {}; |
|
if (name !== undefined) updateData.name = name; |
|
if (description !== undefined) updateData.description = description; |
|
if (servers !== undefined) updateData.servers = servers; |
|
|
|
if (Object.keys(updateData).length === 0) { |
|
res.status(400).json({ |
|
success: false, |
|
message: 'At least one field (name, description, or servers) is required to update', |
|
}); |
|
return; |
|
} |
|
|
|
const updatedGroup = updateGroup(id, updateData); |
|
if (!updatedGroup) { |
|
res.status(404).json({ |
|
success: false, |
|
message: 'Group not found or name already exists', |
|
}); |
|
return; |
|
} |
|
|
|
const response: ApiResponse = { |
|
success: true, |
|
data: updatedGroup, |
|
message: 'Group updated successfully', |
|
}; |
|
res.json(response); |
|
} catch (error) { |
|
res.status(500).json({ |
|
success: false, |
|
message: 'Internal server error', |
|
}); |
|
} |
|
}; |
|
|
|
|
|
export const updateGroupServersBatch = (req: Request, res: Response): void => { |
|
try { |
|
const { id } = req.params; |
|
const { servers } = req.body; |
|
|
|
if (!id) { |
|
res.status(400).json({ |
|
success: false, |
|
message: 'Group ID is required', |
|
}); |
|
return; |
|
} |
|
|
|
if (!Array.isArray(servers)) { |
|
res.status(400).json({ |
|
success: false, |
|
message: 'Servers must be an array of server names', |
|
}); |
|
return; |
|
} |
|
|
|
const updatedGroup = updateGroupServers(id, servers); |
|
if (!updatedGroup) { |
|
res.status(404).json({ |
|
success: false, |
|
message: 'Group not found', |
|
}); |
|
return; |
|
} |
|
|
|
const response: ApiResponse = { |
|
success: true, |
|
data: updatedGroup, |
|
message: 'Group servers updated successfully', |
|
}; |
|
res.json(response); |
|
} catch (error) { |
|
res.status(500).json({ |
|
success: false, |
|
message: 'Internal server error', |
|
}); |
|
} |
|
}; |
|
|
|
|
|
export const deleteExistingGroup = (req: Request, res: Response): void => { |
|
try { |
|
const { id } = req.params; |
|
if (!id) { |
|
res.status(400).json({ |
|
success: false, |
|
message: 'Group ID is required', |
|
}); |
|
return; |
|
} |
|
|
|
const success = deleteGroup(id); |
|
if (!success) { |
|
res.status(404).json({ |
|
success: false, |
|
message: 'Group not found or failed to delete', |
|
}); |
|
return; |
|
} |
|
|
|
res.json({ |
|
success: true, |
|
message: 'Group deleted successfully', |
|
}); |
|
} catch (error) { |
|
res.status(500).json({ |
|
success: false, |
|
message: 'Internal server error', |
|
}); |
|
} |
|
}; |
|
|
|
|
|
export const addServerToExistingGroup = (req: Request, res: Response): void => { |
|
try { |
|
const { id } = req.params; |
|
const { serverName } = req.body; |
|
if (!id) { |
|
res.status(400).json({ |
|
success: false, |
|
message: 'Group ID is required', |
|
}); |
|
return; |
|
} |
|
|
|
if (!serverName) { |
|
res.status(400).json({ |
|
success: false, |
|
message: 'Server name is required', |
|
}); |
|
return; |
|
} |
|
|
|
const updatedGroup = addServerToGroup(id, serverName); |
|
if (!updatedGroup) { |
|
res.status(404).json({ |
|
success: false, |
|
message: 'Group or server not found', |
|
}); |
|
return; |
|
} |
|
|
|
const response: ApiResponse = { |
|
success: true, |
|
data: updatedGroup, |
|
message: 'Server added to group successfully', |
|
}; |
|
res.json(response); |
|
} catch (error) { |
|
res.status(500).json({ |
|
success: false, |
|
message: 'Internal server error', |
|
}); |
|
} |
|
}; |
|
|
|
|
|
export const removeServerFromExistingGroup = (req: Request, res: Response): void => { |
|
try { |
|
const { id, serverName } = req.params; |
|
if (!id || !serverName) { |
|
res.status(400).json({ |
|
success: false, |
|
message: 'Group ID and server name are required', |
|
}); |
|
return; |
|
} |
|
|
|
const updatedGroup = removeServerFromGroup(id, serverName); |
|
if (!updatedGroup) { |
|
res.status(404).json({ |
|
success: false, |
|
message: 'Group not found', |
|
}); |
|
return; |
|
} |
|
|
|
const response: ApiResponse = { |
|
success: true, |
|
data: updatedGroup, |
|
message: 'Server removed from group successfully', |
|
}; |
|
res.json(response); |
|
} catch (error) { |
|
res.status(500).json({ |
|
success: false, |
|
message: 'Internal server error', |
|
}); |
|
} |
|
}; |
|
|
|
|
|
export const getGroupServers = (req: Request, res: Response): void => { |
|
try { |
|
const { id } = req.params; |
|
if (!id) { |
|
res.status(400).json({ |
|
success: false, |
|
message: 'Group ID is required', |
|
}); |
|
return; |
|
} |
|
|
|
const group = getGroupByIdOrName(id); |
|
if (!group) { |
|
res.status(404).json({ |
|
success: false, |
|
message: 'Group not found', |
|
}); |
|
return; |
|
} |
|
|
|
const response: ApiResponse = { |
|
success: true, |
|
data: group.servers, |
|
}; |
|
res.json(response); |
|
} catch (error) { |
|
res.status(500).json({ |
|
success: false, |
|
message: 'Failed to get group servers', |
|
}); |
|
} |
|
}; |