mirror of
https://github.com/9technologygroup/patchmon.net.git
synced 2025-11-05 06:23:22 +00:00
Fixed agent version display issue
This commit is contained in:
@@ -1098,26 +1098,48 @@ router.delete('/agent/versions/:versionId', authenticateToken, requireManageSett
|
|||||||
try {
|
try {
|
||||||
const { versionId } = req.params;
|
const { versionId } = req.params;
|
||||||
|
|
||||||
|
// Validate versionId format
|
||||||
|
if (!versionId || versionId.length < 10) {
|
||||||
|
return res.status(400).json({
|
||||||
|
error: 'Invalid agent version ID format',
|
||||||
|
details: 'The provided ID does not match expected format'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
const agentVersion = await prisma.agent_versions.findUnique({
|
const agentVersion = await prisma.agent_versions.findUnique({
|
||||||
where: { id: versionId }
|
where: { id: versionId }
|
||||||
});
|
});
|
||||||
|
|
||||||
if (!agentVersion) {
|
if (!agentVersion) {
|
||||||
return res.status(404).json({ error: 'Agent version not found' });
|
return res.status(404).json({
|
||||||
|
error: 'Agent version not found',
|
||||||
|
details: `No agent version found with ID: ${versionId}`,
|
||||||
|
suggestion: 'Please refresh the page to get the latest agent versions'
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (agentVersion.is_current) {
|
if (agentVersion.is_current) {
|
||||||
return res.status(400).json({ error: 'Cannot delete current agent version' });
|
return res.status(400).json({
|
||||||
|
error: 'Cannot delete current agent version',
|
||||||
|
details: `Version ${agentVersion.version} is currently active`,
|
||||||
|
suggestion: 'Set another version as current before deleting this one'
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
await prisma.agent_versions.delete({
|
await prisma.agent_versions.delete({
|
||||||
where: { id: versionId }
|
where: { id: versionId }
|
||||||
});
|
});
|
||||||
|
|
||||||
res.json({ message: 'Agent version deleted successfully' });
|
res.json({
|
||||||
|
message: 'Agent version deleted successfully',
|
||||||
|
deletedVersion: agentVersion.version
|
||||||
|
});
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Delete agent version error:', error);
|
console.error('Delete agent version error:', error);
|
||||||
res.status(500).json({ error: 'Failed to delete agent version' });
|
res.status(500).json({
|
||||||
|
error: 'Failed to delete agent version',
|
||||||
|
details: error.message
|
||||||
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
1
backend/test-agent-delete.js
Normal file
1
backend/test-agent-delete.js
Normal file
@@ -0,0 +1 @@
|
|||||||
|
|
||||||
@@ -169,6 +169,20 @@ const Settings = () => {
|
|||||||
mutationFn: (id) => agentVersionAPI.delete(id).then(res => res.data),
|
mutationFn: (id) => agentVersionAPI.delete(id).then(res => res.data),
|
||||||
onSuccess: () => {
|
onSuccess: () => {
|
||||||
queryClient.invalidateQueries(['agentVersions']);
|
queryClient.invalidateQueries(['agentVersions']);
|
||||||
|
},
|
||||||
|
onError: (error) => {
|
||||||
|
console.error('Delete agent version error:', error);
|
||||||
|
|
||||||
|
// Show user-friendly error message
|
||||||
|
if (error.response?.data?.error === 'Agent version not found') {
|
||||||
|
alert('Agent version not found. Please refresh the page to get the latest data.');
|
||||||
|
// Force refresh the agent versions list
|
||||||
|
queryClient.invalidateQueries(['agentVersions']);
|
||||||
|
} else if (error.response?.data?.error === 'Cannot delete current agent version') {
|
||||||
|
alert('Cannot delete the current agent version. Please set another version as current first.');
|
||||||
|
} else {
|
||||||
|
alert(`Failed to delete agent version: ${error.response?.data?.error || error.message}`);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -654,14 +668,14 @@ const Settings = () => {
|
|||||||
<CheckCircle className="h-4 w-4 text-green-600 dark:text-green-400" />
|
<CheckCircle className="h-4 w-4 text-green-600 dark:text-green-400" />
|
||||||
<span className="text-sm font-medium text-secondary-700 dark:text-secondary-300">Current Version:</span>
|
<span className="text-sm font-medium text-secondary-700 dark:text-secondary-300">Current Version:</span>
|
||||||
<span className="text-sm text-secondary-900 dark:text-white font-mono">
|
<span className="text-sm text-secondary-900 dark:text-white font-mono">
|
||||||
{agentVersions.find(v => v.isCurrent)?.version || 'None'}
|
{agentVersions.find(v => v.is_current)?.version || 'None'}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<div className="flex items-center gap-2">
|
<div className="flex items-center gap-2">
|
||||||
<Star className="h-4 w-4 text-yellow-600 dark:text-yellow-400" />
|
<Star className="h-4 w-4 text-yellow-600 dark:text-yellow-400" />
|
||||||
<span className="text-sm font-medium text-secondary-700 dark:text-secondary-300">Default Version:</span>
|
<span className="text-sm font-medium text-secondary-700 dark:text-secondary-300">Default Version:</span>
|
||||||
<span className="text-sm text-secondary-900 dark:text-white font-mono">
|
<span className="text-sm text-secondary-900 dark:text-white font-mono">
|
||||||
{agentVersions.find(v => v.isDefault)?.version || 'None'}
|
{agentVersions.find(v => v.is_default)?.version || 'None'}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -692,22 +706,22 @@ const Settings = () => {
|
|||||||
<h3 className="text-lg font-medium text-secondary-900 dark:text-white">
|
<h3 className="text-lg font-medium text-secondary-900 dark:text-white">
|
||||||
Version {version.version}
|
Version {version.version}
|
||||||
</h3>
|
</h3>
|
||||||
{version.isDefault && (
|
{version.is_default && (
|
||||||
<span className="inline-flex items-center px-2 py-1 rounded-full text-xs font-medium bg-primary-100 text-primary-800 dark:bg-primary-900 dark:text-primary-200">
|
<span className="inline-flex items-center px-2 py-1 rounded-full text-xs font-medium bg-primary-100 text-primary-800 dark:bg-primary-900 dark:text-primary-200">
|
||||||
<Star className="h-3 w-3 mr-1" />
|
<Star className="h-3 w-3 mr-1" />
|
||||||
Default
|
Default
|
||||||
</span>
|
</span>
|
||||||
)}
|
)}
|
||||||
{version.isCurrent && (
|
{version.is_current && (
|
||||||
<span className="inline-flex items-center px-2 py-1 rounded-full text-xs font-medium bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200">
|
<span className="inline-flex items-center px-2 py-1 rounded-full text-xs font-medium bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200">
|
||||||
Current
|
Current
|
||||||
</span>
|
</span>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
{version.releaseNotes && (
|
{version.release_notes && (
|
||||||
<div className="text-sm text-secondary-500 dark:text-secondary-300 mt-1">
|
<div className="text-sm text-secondary-500 dark:text-secondary-300 mt-1">
|
||||||
<p className="line-clamp-3 whitespace-pre-line">
|
<p className="line-clamp-3 whitespace-pre-line">
|
||||||
{version.releaseNotes}
|
{version.release_notes}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
@@ -729,7 +743,7 @@ const Settings = () => {
|
|||||||
</button>
|
</button>
|
||||||
<button
|
<button
|
||||||
onClick={() => setCurrentAgentVersionMutation.mutate(version.id)}
|
onClick={() => setCurrentAgentVersionMutation.mutate(version.id)}
|
||||||
disabled={version.isCurrent || setCurrentAgentVersionMutation.isPending}
|
disabled={version.is_current || setCurrentAgentVersionMutation.isPending}
|
||||||
className="btn-outline text-xs flex items-center gap-1"
|
className="btn-outline text-xs flex items-center gap-1"
|
||||||
>
|
>
|
||||||
<CheckCircle className="h-3 w-3" />
|
<CheckCircle className="h-3 w-3" />
|
||||||
@@ -737,7 +751,7 @@ const Settings = () => {
|
|||||||
</button>
|
</button>
|
||||||
<button
|
<button
|
||||||
onClick={() => setDefaultAgentVersionMutation.mutate(version.id)}
|
onClick={() => setDefaultAgentVersionMutation.mutate(version.id)}
|
||||||
disabled={version.isDefault || setDefaultAgentVersionMutation.isPending}
|
disabled={version.is_default || setDefaultAgentVersionMutation.isPending}
|
||||||
className="btn-outline text-xs flex items-center gap-1"
|
className="btn-outline text-xs flex items-center gap-1"
|
||||||
>
|
>
|
||||||
<Star className="h-3 w-3" />
|
<Star className="h-3 w-3" />
|
||||||
@@ -745,7 +759,7 @@ const Settings = () => {
|
|||||||
</button>
|
</button>
|
||||||
<button
|
<button
|
||||||
onClick={() => deleteAgentVersionMutation.mutate(version.id)}
|
onClick={() => deleteAgentVersionMutation.mutate(version.id)}
|
||||||
disabled={version.isDefault || version.isCurrent || deleteAgentVersionMutation.isPending}
|
disabled={version.is_default || version.is_current || deleteAgentVersionMutation.isPending}
|
||||||
className="btn-danger text-xs flex items-center gap-1"
|
className="btn-danger text-xs flex items-center gap-1"
|
||||||
>
|
>
|
||||||
<Trash2 className="h-3 w-3" />
|
<Trash2 className="h-3 w-3" />
|
||||||
|
|||||||
Reference in New Issue
Block a user