Initial commit: PC Builder AdonisJS project
This commit is contained in:
@@ -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 }
|
||||
Reference in New Issue
Block a user