Initial commit: PC Builder AdonisJS project

This commit is contained in:
Kevin
2026-06-28 10:41:51 +02:00
commit 648d0af538
144 changed files with 18570 additions and 0 deletions
+57
View File
@@ -0,0 +1,57 @@
import type { HttpContext } from '@adonisjs/core/http'
import ComputerPicture from '#models/computer_picture'
import Computer from '#models/computer'
import { v4 as uuid } from 'uuid'
import type { Image } from '#types/UItypes'
import { existsSync, unlinkSync } from 'node:fs'
async function handlePictures(
pictures: Image[],
request: HttpContext['request'],
computer: Computer
) {
const currentPictures = await computer.related('pictures').query()
const currentPictureIds = currentPictures.map((picture) => picture.id)
const imagesToRemove = currentPictureIds.filter(
(id: number) => !pictures.some((picture) => 'id' in picture && picture.id === id)
)
await Promise.all(
pictures.map(async (picture: Image, index: number) => {
if ('id' in picture) {
const existingPicture = await ComputerPicture.findOrFail(picture.id)
existingPicture.order = picture.order
await existingPicture.save()
} else {
const image = request.file(`pictures[${index}][file]`, {
size: '2mb',
extnames: ['jpg', 'png', 'jpeg', 'svg'],
})
if (image) {
const imageName = `img_${uuid()}.${image.extname}`
await image.move(`uploads/computer_${computer.id}`, {
name: imageName,
})
await ComputerPicture.create({
computerId: computer.id,
link: `/uploads/computer_${computer.id}/${imageName}`,
order: picture.order,
})
}
}
})
)
await Promise.all(
imagesToRemove.map(async (id: number) => {
const picture = await ComputerPicture.findOrFail(id)
const filePath = `uploads/computer_${computer.id}/${picture.link.split('/').pop()}`
if (existsSync(filePath)) {
unlinkSync(filePath)
}
await picture.delete()
})
)
}
export { handlePictures }