From 9226bcc571a7db2b84d4d84a63e3aee51ecf9cb7 Mon Sep 17 00:00:00 2001 From: Kirill Date: Sun, 17 May 2026 17:47:02 +0500 Subject: [PATCH] feat(server): add POST /api/admin/gallery/:id/resize endpoint --- server/src/routes/api/admin-gallery.js | 37 ++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/server/src/routes/api/admin-gallery.js b/server/src/routes/api/admin-gallery.js index 0d13deb..8f02b23 100644 --- a/server/src/routes/api/admin-gallery.js +++ b/server/src/routes/api/admin-gallery.js @@ -52,6 +52,43 @@ export async function registerAdminGalleryRoutes(fastify) { }, ) + fastify.post( + '/api/admin/gallery/:id/resize', + { preHandler: [fastify.verifyAdmin] }, + async (request, reply) => { + const { id } = request.params + const row = await prisma.galleryImage.findUnique({ where: { id } }) + if (!row) { + return reply.code(404).send({ error: 'Изображение не найдено' }) + } + if (row.isResized) { + return reply.code(409).send({ error: 'Изображение уже обработано' }) + } + + const urlParts = row.url.replace(/^\//, '').split('/') + const fileName = urlParts[urlParts.length - 1] + const uuid = path.parse(fileName).name + + try { + const { generateAllSizes, convertOriginalToWebp } = await import('../../lib/image-resize.js') + + const fullPath = path.join(process.cwd(), urlParts.slice(0, -1).join('/'), fileName) + await generateAllSizes(uuid, '', fullPath) + const newUrl = await convertOriginalToWebp(uuid, '') + + await prisma.galleryImage.update({ + where: { id }, + data: { url: newUrl, isResized: true }, + }) + + return { url: newUrl } + } catch (error) { + request.log.error(error, 'Resize failed') + return reply.code(500).send({ error: 'Ошибка обработки изображения' }) + } + }, + ) + fastify.delete( '/api/admin/gallery/:id', { preHandler: [fastify.verifyAdmin] },