Refactor ResultsArticle to handle optional num_files
This commit is contained in:
parent
89c5b04fa8
commit
9cd47ceeb0
1 changed files with 20 additions and 12 deletions
|
|
@ -12,18 +12,30 @@ import { userService } from "./user";
|
||||||
import { outputDir } from "..";
|
import { outputDir } from "..";
|
||||||
import { sendFileToErugo } from "../helpers/erugo";
|
import { sendFileToErugo } from "../helpers/erugo";
|
||||||
|
|
||||||
|
type JobsWithOptionalNumFiles = Jobs & {
|
||||||
|
num_files?: number;
|
||||||
|
};
|
||||||
|
|
||||||
function ResultsArticle({
|
function ResultsArticle({
|
||||||
job,
|
job,
|
||||||
files,
|
files,
|
||||||
outputPath,
|
outputPath,
|
||||||
}: {
|
}: {
|
||||||
job: Jobs;
|
job: JobsWithOptionalNumFiles;
|
||||||
files: Filename[];
|
files: Filename[];
|
||||||
outputPath: string;
|
outputPath: string;
|
||||||
}) {
|
}) {
|
||||||
const maxFiles = Number((job as any).num_files ?? 0);
|
// If the DB schema includes jobs.num_files use it; otherwise fall back to files.length
|
||||||
const doneFiles = Number(files.filter((f: any) => String((f as any).status || '').toLowerCase() === 'done').length);
|
const maxFiles =
|
||||||
const isDone = doneFiles === maxFiles;
|
typeof job.num_files === "number" && Number.isFinite(job.num_files)
|
||||||
|
? Number(job.num_files)
|
||||||
|
: Number(files.length);
|
||||||
|
|
||||||
|
const doneFiles = Number(
|
||||||
|
files.filter((f) => String(f.status ?? "").toLowerCase() === "done").length,
|
||||||
|
);
|
||||||
|
|
||||||
|
const isDone = maxFiles > 0 ? doneFiles >= maxFiles : true;
|
||||||
|
|
||||||
const disabledLinkClass = "pointer-events-none opacity-50";
|
const disabledLinkClass = "pointer-events-none opacity-50";
|
||||||
const busyAttrs = { disabled: true, "aria-busy": "true" } as const;
|
const busyAttrs = { disabled: true, "aria-busy": "true" } as const;
|
||||||
|
|
@ -467,7 +479,7 @@ export const results = new Elysia()
|
||||||
const job = db
|
const job = db
|
||||||
.query("SELECT * FROM jobs WHERE user_id = ? AND id = ?")
|
.query("SELECT * FROM jobs WHERE user_id = ? AND id = ?")
|
||||||
.as(Jobs)
|
.as(Jobs)
|
||||||
.get(user.id, params.jobId);
|
.get(user.id, params.jobId) as JobsWithOptionalNumFiles | null;
|
||||||
|
|
||||||
if (!job) {
|
if (!job) {
|
||||||
set.status = 404;
|
set.status = 404;
|
||||||
|
|
@ -514,7 +526,7 @@ export const results = new Elysia()
|
||||||
const job = db
|
const job = db
|
||||||
.query("SELECT * FROM jobs WHERE user_id = ? AND id = ?")
|
.query("SELECT * FROM jobs WHERE user_id = ? AND id = ?")
|
||||||
.as(Jobs)
|
.as(Jobs)
|
||||||
.get(user.id, params.jobId);
|
.get(user.id, params.jobId) as JobsWithOptionalNumFiles | null;
|
||||||
|
|
||||||
if (!job) {
|
if (!job) {
|
||||||
set.status = 404;
|
set.status = 404;
|
||||||
|
|
@ -547,9 +559,7 @@ export const results = new Elysia()
|
||||||
}
|
}
|
||||||
|
|
||||||
const file = db
|
const file = db
|
||||||
.query(
|
.query("SELECT * FROM file_names WHERE job_id = ? AND output_file_name = ?")
|
||||||
"SELECT * FROM file_names WHERE job_id = ? AND output_file_name = ?",
|
|
||||||
)
|
|
||||||
.as(Filename)
|
.as(Filename)
|
||||||
.get(params.jobId, body.fileName);
|
.get(params.jobId, body.fileName);
|
||||||
|
|
||||||
|
|
@ -575,7 +585,7 @@ export const results = new Elysia()
|
||||||
|
|
||||||
const result = await sendFileToErugo(payload);
|
const result = await sendFileToErugo(payload);
|
||||||
return result;
|
return result;
|
||||||
} catch (err: any) {
|
} catch (err: unknown) {
|
||||||
console.error(err);
|
console.error(err);
|
||||||
set.status = 500;
|
set.status = 500;
|
||||||
return { message: "Failed to share with Erugo" };
|
return { message: "Failed to share with Erugo" };
|
||||||
|
|
@ -591,5 +601,3 @@ export const results = new Elysia()
|
||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue