Skip to content

Commit

Permalink
犇犇保存单页
Browse files Browse the repository at this point in the history
  • Loading branch information
wxh06 committed Aug 25, 2023
1 parent a279df0 commit 5bb79c2
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 13 deletions.
30 changes: 21 additions & 9 deletions packages/archive/src/lib/activity.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,11 @@ interface Body {
};
}

export default async function saveActivities(
export async function saveActivityPage(
logger: BaseLogger,
prisma: PrismaClient,
page = 1,
operations: Array<PrismaPromise<unknown>> = [],
page: number,
operations: Array<PrismaPromise<unknown>>,
) {
const res = await getResponse(
logger,
Expand All @@ -48,11 +48,23 @@ export default async function saveActivities(
}),
);
});
return res;
}

export default async function saveActivities(
logger: BaseLogger,
prisma: PrismaClient,
) {
let res: Body;
let page = 0;
const operations: Array<PrismaPromise<unknown>> = [];
const last = await prisma.activity.findFirst({ orderBy: { id: "desc" } });
if (
res.feeds.result.length !== res.feeds.perPage ||
(last && res.feeds.result[res.feeds.result.length - 1].id <= last.id)
)
return prisma.$transaction(operations);
return saveActivities(logger, prisma, page + 1, operations);
do
// eslint-disable-next-line no-plusplus, no-await-in-loop
res = await saveActivityPage(logger, prisma, ++page, operations);
while (
res.feeds.result.length === res.feeds.perPage &&
(!last || res.feeds.result[res.feeds.result.length - 1].id > last.id)
);
await prisma.$transaction(operations);
}
22 changes: 18 additions & 4 deletions packages/archive/src/plugins/routes.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import { once } from "node:events";
import type { FastifyPluginCallback } from "fastify";
import type { PrismaPromise } from "@prisma/client";
import { emitters, startTask } from "../lib/discussion";
import saveJudgements from "../lib/judgement";
import savePaste from "../lib/paste";
import saveActivities from "../lib/activity";
import saveActivities, { saveActivityPage } from "../lib/activity";

export default (function routes(fastify, options, done) {
fastify.get("/", () => ({ tasks: Object.keys(emitters) }));
Expand Down Expand Up @@ -46,14 +47,27 @@ export default (function routes(fastify, options, done) {
.catch((err: Error) => reply.code(500).send({ error: err.message }));
});

/*
fastify.get("/activity", (request, reply) =>
saveActivities(fastify.log, fastify.prisma).then(() =>
reply.code(201).send({}),
),
);
*/

fastify.get<{ Params: { page: string } }>(
"/activity/:page(\\d+)",
(request, reply) =>
saveActivities(
async (request, reply) => {
const operations: Array<PrismaPromise<unknown>> = [];
const res = await saveActivityPage(
fastify.log,
fastify.prisma,
parseInt(request.params.page, 10),
).then(() => reply.code(201).send({})),
operations,
);
await fastify.prisma.$transaction(operations);
return reply.code(201).send(res);
},
);

done();
Expand Down

0 comments on commit 5bb79c2

Please sign in to comment.