Prevent paintings from same author in random route

This commit is contained in:
Florian Sylvain
2023-03-08 13:16:48 +01:00
parent c5c148827a
commit 833292c5dc
+33 -5
View File
@@ -85,15 +85,43 @@ function fetchPainting(uuid: string): Promise<GraphQlPainting> {
}) })
} }
async function getRandomPaintings(limit: number): Promise<(Painting | null)[]> { async function getPaintingAuthorFullname(painting: Painting): Promise<string> {
const paintingsUUIDs = JSON.parse(fs.readFileSync("src/assets/paintingsUUID.json", "utf8")) const authorId = (
const randomUUIDs = paintingsUUIDs.paintings.sort(() => Math.random() - 0.5).slice(0, limit) await prisma.paintingAuthor.findMany({
where: { painting_id: painting.id },
select: { author_id: true },
})
)[0]?.author_id
return (await prisma.author.findUnique({ where: { id: authorId } }))?.fullname || ""
}
async function auhtorAlreadyInPaintings(
paintings: Painting[],
painting: ParsedPainting
): Promise<boolean> {
for (const p of paintings) {
if ((await getPaintingAuthorFullname(p)) === painting.author) return true
}
return false
}
function getShuffledUUIDs() {
const paintingsUUIDs = JSON.parse(fs.readFileSync("src/assets/paintingsUUID.json", "utf8"))
return paintingsUUIDs.paintings.sort(() => Math.random() - 0.5)
}
async function getRandomPaintings(limit: number): Promise<(Painting | null)[]> {
const randomUUIDs = getShuffledUUIDs()
const paintings = [] const paintings = []
for (const uuid of randomUUIDs) { let i = 0
const fetchedPainting = await fetchPainting(uuid)
while (paintings.length < limit && i < randomUUIDs.length) {
const fetchedPainting = await fetchPainting(randomUUIDs[i++])
const parsedPainting = parseGraphQlPainting(fetchedPainting) const parsedPainting = parseGraphQlPainting(fetchedPainting)
if (await auhtorAlreadyInPaintings(paintings as Painting[], parsedPainting)) continue
const painting = await getPainting(undefined, parsedPainting.name) const painting = await getPainting(undefined, parsedPainting.name)
if (!painting) { if (!painting) {
const createdPaintingAuthor = await createPainting(parsedPainting) const createdPaintingAuthor = await createPainting(parsedPainting)