Fix: Signature POST to PocketBase

Use PocketBase SDK for signature creation and handle empty signature input.
This commit is contained in:
gpt-engineer-app[bot]
2025-06-14 16:13:31 +00:00
parent dcb6daa77d
commit 8f266459ad

View File

@@ -5,14 +5,16 @@ import { toast } from "@/hooks/use-toast";
import { useQueryClient } from "@tanstack/react-query"; import { useQueryClient } from "@tanstack/react-query";
import SystemTracker from "@/components/SystemTracker"; import SystemTracker from "@/components/SystemTracker";
import RegionMap from "@/components/RegionMap"; import RegionMap from "@/components/RegionMap";
import pb from "@/lib/pocketbase";
interface Signature { interface Signature {
identifier: string; identifier: string;
type: string; type: string;
signame: string; name: string;
system: string; system: string;
sysid: string; sysid: string;
dangerous?: boolean; dangerous?: boolean;
scanned?: string;
} }
const SystemView = () => { const SystemView = () => {
@@ -29,10 +31,17 @@ const SystemView = () => {
const parts = text.split('\t'); const parts = text.split('\t');
if (parts.length < 4) return null; if (parts.length < 4) return null;
// Validate signature identifier format (3 letters, dash, 3 numbers)
const signatureIdentifierRegex = /^\w{3}-\d{3}$/;
if (!signatureIdentifierRegex.test(parts[0])) {
return null;
}
return { return {
identifier: parts[0], identifier: parts[0],
type: parts[2], type: parts[2],
signame: parts[3], name: parts[3],
scanned: parts.length > 4 ? parts[4] : undefined,
dangerous: false // TODO: Implement dangerous signature detection dangerous: false // TODO: Implement dangerous signature detection
}; };
}; };
@@ -49,40 +58,35 @@ const SystemView = () => {
}; };
const saveSignature = async (signature: Signature): Promise<void> => { const saveSignature = async (signature: Signature): Promise<void> => {
try {
// Check if signature already exists // Check if signature already exists
const existingUrl = `https://evebase.site.quack-lab.dev/api/collections/sigview/records?filter=(identifier='${signature.identifier}' && system='${signature.system}')`; const existingRecords = await pb.collection('signature').getList(1, 1, {
const existingResponse = await fetch(existingUrl); filter: `identifier='${signature.identifier}' && system='${signature.system}'`
const existingData = await existingResponse.json();
if (existingData.items && existingData.items.length > 0) {
// Update existing signature
const existingId = existingData.items[0].id;
const updateUrl = `https://evebase.site.quack-lab.dev/api/collections/sigview/records/${existingId}`;
const updateResponse = await fetch(updateUrl, {
method: 'PATCH',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
signame: signature.signame,
type: signature.type,
dangerous: signature.dangerous
})
}); });
if (!updateResponse.ok) { if (existingRecords.items && existingRecords.items.length > 0) {
throw new Error(`Failed to update signature: ${updateResponse.status}`); // Update existing signature
} const existingId = existingRecords.items[0].id;
await pb.collection('signature').update(existingId, {
name: signature.name,
type: signature.type,
dangerous: signature.dangerous,
scanned: signature.scanned
});
} else { } else {
// Create new signature // Create new signature
const createUrl = 'https://evebase.site.quack-lab.dev/api/collections/sigview/records'; await pb.collection('signature').create({
const createResponse = await fetch(createUrl, { system: signature.system,
method: 'POST', identifier: signature.identifier,
headers: { 'Content-Type': 'application/json' }, name: signature.name,
body: JSON.stringify(signature) type: signature.type,
dangerous: signature.dangerous,
scanned: signature.scanned
}); });
if (!createResponse.ok) {
throw new Error(`Failed to create signature: ${createResponse.status}`);
} }
} catch (error) {
console.error('Failed to save signature:', error);
throw error;
} }
}; };
@@ -101,7 +105,7 @@ const SystemView = () => {
if (parsed) { if (parsed) {
parsedSignatures.push({ parsedSignatures.push({
...parsed, ...parsed,
system, system: systemId,
sysid: systemId sysid: systemId
}); });
} }
@@ -110,7 +114,7 @@ const SystemView = () => {
if (parsedSignatures.length === 0) { if (parsedSignatures.length === 0) {
toast({ toast({
title: "No Valid Signatures", title: "No Valid Signatures",
description: "No valid signatures found in the pasted data.", description: "No valid signatures found in the pasted data. Signatures must follow the format: ABC-123.",
variant: "destructive" variant: "destructive"
}); });
return; return;