95 lines
2.3 KiB
JavaScript
95 lines
2.3 KiB
JavaScript
const express = require('express');
|
|
const router = express.Router();
|
|
const multer = require('multer');
|
|
const orderController = require('../controllers/order-controller');
|
|
const { authenticateApiToken } = require('../middleware/auth');
|
|
|
|
// Multer konfigurieren für Datei-Uploads (temporär im Speicher)
|
|
const upload = multer({
|
|
storage: multer.memoryStorage(),
|
|
limits: {
|
|
fileSize: 10 * 1024 * 1024, // 10MB max
|
|
},
|
|
fileFilter: (req, file, cb) => {
|
|
// Erlaubte Dateitypen
|
|
const allowedTypes = ['image/png', 'image/jpeg', 'image/webp', 'image/svg+xml', 'application/pdf'];
|
|
const allowedExts = ['.png', '.jpg', '.jpeg', '.webp', '.svg', '.pdf'];
|
|
|
|
const ext = file.originalname.toLowerCase().substring(file.originalname.lastIndexOf('.'));
|
|
|
|
if (allowedTypes.includes(file.mimetype) || allowedExts.includes(ext)) {
|
|
cb(null, true);
|
|
} else {
|
|
cb(new Error('Nur PNG, JPG, WEBP, SVG und PDF Dateien sind erlaubt'), false);
|
|
}
|
|
}
|
|
});
|
|
|
|
/**
|
|
* POST /api/order/finalize
|
|
* Finalize order by copying cached previews to output directory
|
|
*
|
|
* Request body:
|
|
* {
|
|
* sessionId: string,
|
|
* orderNumber: string
|
|
* }
|
|
*
|
|
* Response:
|
|
* {
|
|
* orderNumber: string,
|
|
* outputPath: string,
|
|
* files: string[],
|
|
* timestamp: string
|
|
* }
|
|
*/
|
|
router.post('/finalize', authenticateApiToken, orderController.finalizeOrder);
|
|
|
|
/**
|
|
* POST /api/order/generate
|
|
* Generate order from scratch without using cache
|
|
*
|
|
* Request body:
|
|
* {
|
|
* orderNumber: string,
|
|
* letters: [
|
|
* {
|
|
* text: string,
|
|
* format: 'a4' | 'a6p' | 'a6l' | 'c6' | 'din_lang',
|
|
* font: 'tilda' | 'alva' | 'ellie',
|
|
* type?: 'letter' | 'envelope',
|
|
* envelopeType?: 'recipient' | 'custom',
|
|
* placeholders?: { [key: string]: string }
|
|
* }
|
|
* ]
|
|
* }
|
|
*
|
|
* Response:
|
|
* {
|
|
* orderNumber: string,
|
|
* outputPath: string,
|
|
* files: string[],
|
|
* timestamp: string
|
|
* }
|
|
*/
|
|
router.post('/generate', authenticateApiToken, orderController.generateOrder);
|
|
|
|
/**
|
|
* POST /api/order/motif
|
|
* Upload a motif image for an order
|
|
*
|
|
* Request: multipart/form-data
|
|
* - motif: file (PNG, JPG, WEBP, SVG, PDF)
|
|
* - orderNumber: string
|
|
*
|
|
* Response:
|
|
* {
|
|
* success: boolean,
|
|
* filename: string,
|
|
* path: string
|
|
* }
|
|
*/
|
|
router.post('/motif', authenticateApiToken, upload.single('motif'), orderController.uploadMotif);
|
|
|
|
module.exports = router;
|