Fixing a Paperless bug

This commit is contained in:
Samuel Andert 2023-10-17 09:42:09 +02:00
parent 19674310e7
commit af15eb1d0b
8 changed files with 9087 additions and 13754 deletions

View File

@ -10,10 +10,8 @@ export default createOperation.query({
headers: { headers: {
Authorization: process.env.PAPERLESS_TOKEN, Authorization: process.env.PAPERLESS_TOKEN,
}, },
}); });
// Add download link, thumbnail link, preview link, PDF data, and metadata to each document // Add download link, thumbnail link, preview link, PDF data, and metadata to each document
const documentsWithLinksDataAndMetadata = await Promise.all(data.results.map(async doc => { const documentsWithLinksDataAndMetadata = await Promise.all(data.results.map(async doc => {
const response = await axios.get(`https://paperless.andert.me/api/documents/${doc.id}/preview/`, { const response = await axios.get(`https://paperless.andert.me/api/documents/${doc.id}/preview/`, {
@ -25,26 +23,35 @@ export default createOperation.query({
const pdfData = Buffer.from(response.data, 'binary').toString('base64'); const pdfData = Buffer.from(response.data, 'binary').toString('base64');
const correspondentResponse = await axios.get(`https://paperless.andert.me/api/correspondents/${doc.correspondent}/`, { let correspondent = null;
headers: { if (doc.correspondent) {
Authorization: process.env.PAPERLESS_TOKEN, const correspondentResponse = await axios.get(`https://paperless.andert.me/api/correspondents/${doc.correspondent}/`, {
}, headers: {
}); Authorization: process.env.PAPERLESS_TOKEN,
const correspondent = correspondentResponse.data; },
});
correspondent = correspondentResponse.data;
}
const tagsResponse = await Promise.all(doc.tags.map(tag => axios.get(`https://paperless.andert.me/api/tags/${tag}/`, { let tags = [];
headers: { if (doc.tags) {
Authorization: process.env.PAPERLESS_TOKEN, const tagsResponse = await Promise.all(doc.tags.map(tag => axios.get(`https://paperless.andert.me/api/tags/${tag}/`, {
}, headers: {
}))); Authorization: process.env.PAPERLESS_TOKEN,
const tags = tagsResponse.map(response => response.data); },
})));
tags = tagsResponse.map(response => response.data);
}
const documentTypeResponse = await axios.get(`https://paperless.andert.me/api/document_types/${doc.document_type}/`, { let documentType = null;
headers: { if (doc.document_type) {
Authorization: process.env.PAPERLESS_TOKEN, const documentTypeResponse = await axios.get(`https://paperless.andert.me/api/document_types/${doc.document_type}/`, {
}, headers: {
}); Authorization: process.env.PAPERLESS_TOKEN,
const documentType = documentTypeResponse.data; },
});
documentType = documentTypeResponse.data;
}
return { return {
...doc, ...doc,
@ -54,7 +61,7 @@ export default createOperation.query({
pdfData, pdfData,
correspondent, correspondent,
tags, tags,
document_type: documentType, documentType,
}; };
})); }));

View File

@ -0,0 +1,57 @@
// .wundergraph/operations/paper.ts
import { createOperation, z } from '../generated/wundergraph.factory';
import axios from 'axios';
export default createOperation.query({
input: z.object({}),
handler: async () => {
console.log('Making request to Paperless API');
const { data } = await axios.get('https://paperless.andert.me/api/documents/', {
headers: {
Authorization: process.env.PAPERLESS_TOKEN,
},
});
// Fetch additional metadata for each document
const documents = await Promise.all(data.results.map(async doc => {
let correspondent = null;
if (doc.correspondent) {
const correspondentResponse = await axios.get(`https://paperless.andert.me/api/correspondents/${doc.correspondent}/`, {
headers: {
Authorization: process.env.PAPERLESS_TOKEN,
},
});
correspondent = correspondentResponse.data;
}
let tags = [];
if (doc.tags) {
const tagsResponse = await Promise.all(doc.tags.map(tag => axios.get(`https://paperless.andert.me/api/tags/${tag}/`, {
headers: {
Authorization: process.env.PAPERLESS_TOKEN,
},
})));
tags = tagsResponse.map(response => response.data);
}
let documentType = null;
if (doc.document_type) {
const documentTypeResponse = await axios.get(`https://paperless.andert.me/api/document_types/${doc.document_type}/`, {
headers: {
Authorization: process.env.PAPERLESS_TOKEN,
},
});
documentType = documentTypeResponse.data;
}
return {
...doc,
correspondent,
tags,
documentType,
};
}));
return documents;
},
});

File diff suppressed because it is too large Load Diff

View File

@ -1,8 +1,9 @@
<script lang="ts"> <script lang="ts">
import HeaderMain from "$lib/layouts/HeaderMain.svelte"; import HeaderMain from "$lib/layouts/HeaderMain.svelte";
import { createQuery } from "../../lib/wundergraph";
import { Avatar } from "@skeletonlabs/skeleton"; import { Avatar } from "@skeletonlabs/skeleton";
import { createQuery } from "../../lib/wundergraph";
const meQuery = createQuery({ const meQuery = createQuery({
operationName: "Me", operationName: "Me",
}); });

View File

@ -0,0 +1,15 @@
<script lang="ts">
import { createQuery } from "../../../lib/wundergraph";
const paperQuery = createQuery({
operationName: "paper",
});
</script>
{#if $paperQuery.isLoading}
<p>Loading...</p>
{:else if $paperQuery.error}
<pre>Error: {JSON.stringify($paperQuery.error, null, 2)}</pre>
{:else}
{JSON.stringify($paperQuery.data)}
{/if}

View File

@ -27,10 +27,6 @@
</script> </script>
<HeaderMain> <HeaderMain>
<!-- <div slot="header">
<h1>Paperless Documents</h1>
</div> -->
<div slot="main" class="h-full w-full overflow-scroll flex"> <div slot="main" class="h-full w-full overflow-scroll flex">
<div class="w-1/4 h-full overflow-scroll"> <div class="w-1/4 h-full overflow-scroll">
{#if $paperlessQuery.isLoading} {#if $paperlessQuery.isLoading}
@ -46,9 +42,12 @@
<h2 class="text-lg font-semibold"> <h2 class="text-lg font-semibold">
{document.archived_file_name} {document.archived_file_name}
</h2> </h2>
<p>Correspondent: {document.correspondent.name}</p> <p>Correspondent: {document.correspondent?.name || "N/A"}</p>
<p>Tags: {document.tags.map((tag) => tag.name).join(", ")}</p> <p>
<p>{document.document_type.name}</p> Tags: {document.tags?.map((tag) => tag.name).join(", ") ||
"N/A"}
</p>
<p>{document.documentType?.name || "N/A"}</p>
</div> </div>
</a> </a>
{/each} {/each}

View File

@ -1,7 +1,6 @@
import { sveltekit } from '@sveltejs/kit/vite'; import { sveltekit } from '@sveltejs/kit/vite';
import { defineConfig } from 'vite'; import { defineConfig } from 'vite';
import { fetchSchemas } from './.wundergraph/schemas/fetch-schemas'; import { fetchSchemas } from './.wundergraph/schemas/fetch-schemas';
import { vitePreprocess } from '@sveltejs/kit/vite';
export default defineConfig({ export default defineConfig({
plugins: [ plugins: [
@ -16,4 +15,4 @@ export default defineConfig({
}, },
}, },
], ],
}); });

8978
yarn.lock Normal file

File diff suppressed because it is too large Load Diff