From 7c7c593faadb02197d9d5f8b69ffc6c51b85e02b Mon Sep 17 00:00:00 2001 From: Simon Pamies Date: Sat, 8 Feb 2025 19:30:28 +0100 Subject: [PATCH] Fix/update correspondent to not fail (#202) * Updated CONTRIBUTING.md as such that it runs the full package and not main.go * Check if a correspondent is already created * Added a script to ease running the backend quickly * Changed run script to comply with suggestions by code rabbit --- CONTRIBUTING.md | 13 ++++++++++++- build-and-run.sh | 7 +++++++ paperless.go | 27 ++++++++++++++++++--------- 3 files changed, 37 insertions(+), 10 deletions(-) create mode 100755 build-and-run.sh diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 7c00de7..eed14d0 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -91,9 +91,20 @@ We welcome pull requests (PRs). Please follow these guidelines: 4. **Run the backend server**: ```bash - go run main.go + mkdir dist + touch dist/index.html + go build + ./paperless-gpt ``` +5. **Run the backend server with frontend built in**: + + ```bash + cd web-app && npm install && npm run build && cp -r dist .. + go build + ./paperless-gpt + ``` + ### Frontend Setup 1. **Navigate to the frontend directory**: diff --git a/build-and-run.sh b/build-and-run.sh new file mode 100755 index 0000000..56fe3ed --- /dev/null +++ b/build-and-run.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash +set -o allexport +source .env +set +o allexport + +go build +./paperless-gpt diff --git a/paperless.go b/paperless.go index 1ef2ca9..58ad5cb 100644 --- a/paperless.go +++ b/paperless.go @@ -365,12 +365,12 @@ func (client *PaperlessClient) UpdateDocuments(ctx context.Context, documents [] updatedFields["correspondent"] = correspondentID } else { newCorrespondent := instantiateCorrespondent(document.SuggestedCorrespondent) - newCorrespondentID, err := client.CreateCorrespondent(context.Background(), newCorrespondent) + newCorrespondentID, err := client.CreateOrGetCorrespondent(context.Background(), newCorrespondent) if err != nil { - log.Errorf("Error creating correspondent with name %s: %v\n", document.SuggestedCorrespondent, err) + log.Errorf("Error creating/getting correspondent with name %s: %v\n", document.SuggestedCorrespondent, err) return err } - log.Infof("Created correspondent with name %s and ID %d\n", document.SuggestedCorrespondent, newCorrespondentID) + log.Infof("Using correspondent with name %s and ID %d\n", document.SuggestedCorrespondent, newCorrespondentID) updatedFields["correspondent"] = newCorrespondentID } } @@ -612,17 +612,27 @@ func instantiateCorrespondent(name string) Correspondent { } } -// CreateCorrespondent creates a new correspondent in Paperless-NGX -func (client *PaperlessClient) CreateCorrespondent(ctx context.Context, correspondent Correspondent) (int, error) { - url := "api/correspondents/" +// CreateOrGetCorrespondent creates a new correspondent or returns existing one if name already exists +func (client *PaperlessClient) CreateOrGetCorrespondent(ctx context.Context, correspondent Correspondent) (int, error) { + // First try to find existing correspondent + correspondents, err := client.GetAllCorrespondents(ctx) + if err != nil { + return 0, fmt.Errorf("error fetching correspondents: %w", err) + } - // Marshal the correspondent data to JSON + // Check if correspondent already exists + if id, exists := correspondents[correspondent.Name]; exists { + log.Infof("Using existing correspondent with name %s and ID %d", correspondent.Name, id) + return id, nil + } + + // If not found, create new correspondent + url := "api/correspondents/" jsonData, err := json.Marshal(correspondent) if err != nil { return 0, err } - // Send the POST request resp, err := client.Do(ctx, "POST", url, bytes.NewBuffer(jsonData)) if err != nil { return 0, err @@ -634,7 +644,6 @@ func (client *PaperlessClient) CreateCorrespondent(ctx context.Context, correspo return 0, fmt.Errorf("error creating correspondent: %d, %s", resp.StatusCode, string(bodyBytes)) } - // Decode the response body to get the ID of the created correspondent var createdCorrespondent struct { ID int `json:"id"` }