mirror of
https://github.com/Floriansylvain/ParisMuseesQuizz.git
synced 2026-08-19 11:43:22 +02:00
Prevent paintings from same author in random route
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user