Multi-thread support for applyTemplate

This commit is contained in:
oom 2026-11-03 14:48:37 +07:00
parent f7e84e3ee7
commit bfb07c633d
10 changed files with 1260 additions and 154 deletions

View file

@ -6,8 +6,11 @@ import { NextRequest, NextResponse } from 'next/server';
import {readFile} from 'fs/promises';
import path from 'path';
import {DocumentTemplate,applyTemplate} from "@/lib/lib-tmpl";
import { docxPool } from '@/lib/docx-pool';
export const runtime = 'nodejs';
const EXTERNAL_API_KEY = process.env.EXTERNAL_API_KEY || 'secret-api-key-1234';
const EXTERNAL_API_KEY = process.env.EXTERNAL_API_KEY || '';
const PRIVATE_KEY_HEX = process.env.PRIVATE_KEY_HEX ||''
const SECRET = process.env.SECRET || 'super_secret'
const TMPL_PATH = process.env.TMPL_PATH || "./public/tmpl";
@ -64,7 +67,16 @@ export async function POST(request: NextRequest) {
const tmplPath = path.join(TMPL_PATH, `${path.basename(tid)}.docx`);
let templateBuffer: Buffer = await readFile(tmplPath)
const output = await applyTemplate(templateBuffer, templateData, SECRET, PRIVATE_KEY_HEX, TICKET_SEC);
// const output = await applyTemplate(templateBuffer, templateData, SECRET, PRIVATE_KEY_HEX, TICKET_SEC);
const output = await docxPool.run({
templateBuffer,
templateData,
secret: SECRET,
privateKeyHex: PRIVATE_KEY_HEX,
ticketSec: TICKET_SEC
});
const outputBuffer = Buffer.from(output);
// สร้าง ReadableStream ของไฟล์ .docx
// ในโค้ดจริง ส่วนนี้จะดึง Binary Buffer จาก Library เช่น docx, docxtemplater หรืออ่านจาก File System
@ -72,7 +84,7 @@ export async function POST(request: NextRequest) {
const docxStream = new ReadableStream({
start(controller) {
controller.enqueue(output);
controller.enqueue(outputBuffer);
controller.close();
},
});