Metadata ve çeviri ile ilgili düzeltmeler. UI değişiklikleri.
This commit is contained in:
@@ -4,10 +4,11 @@ import cors from 'cors';
|
||||
import bcrypt from 'bcryptjs';
|
||||
import jwt from 'jsonwebtoken';
|
||||
import { tmpdir } from 'os';
|
||||
import { join } from 'path';
|
||||
import { dirname, join } from 'path';
|
||||
import { promises as fs } from 'fs';
|
||||
import { v4 as uuidV4 } from 'uuid';
|
||||
import Epub from 'epub-gen';
|
||||
import { fileURLToPath } from 'url';
|
||||
|
||||
const requiredEnv = [
|
||||
'SUPABASE_URL',
|
||||
@@ -22,6 +23,7 @@ requiredEnv.forEach((key) => {
|
||||
}
|
||||
});
|
||||
|
||||
const __dirname = dirname(fileURLToPath(import.meta.url));
|
||||
const app = express();
|
||||
const PORT = process.env.PORT || 4000;
|
||||
const ORIGIN = process.env.CLIENT_ORIGIN || 'http://localhost:5173';
|
||||
@@ -260,8 +262,10 @@ app.post('/translate', async (req, res) => {
|
||||
return res.status(400).json({ message: 'Çevrilecek metin bulunamadı.' });
|
||||
}
|
||||
|
||||
console.log('[Translate] İstek alındı', { length: text.length, snippet: text.slice(0, 60) });
|
||||
try {
|
||||
const translated = await translateWithGlm(text);
|
||||
console.log('[Translate] Çeviri başarıyla döndü');
|
||||
return res.json({ text: translated });
|
||||
} catch (error) {
|
||||
console.error('GLM çeviri hatası:', error);
|
||||
@@ -275,9 +279,17 @@ app.post('/generate-epub', async (req, res) => {
|
||||
return res.status(400).json({ message: 'text is required' });
|
||||
}
|
||||
|
||||
const title = meta?.title || 'imgPub OCR Export';
|
||||
const author = meta?.author || 'imgPub';
|
||||
const title = meta?.title?.trim() || 'imgPub OCR Export';
|
||||
const filename = meta?.filename || `imgpub${Date.now()}.epub`;
|
||||
const authors =
|
||||
Array.isArray(meta?.authors) && meta.authors.length
|
||||
? meta.authors.filter(Boolean)
|
||||
: meta?.author
|
||||
? [meta.author]
|
||||
: ['imgPub'];
|
||||
const publisher = meta?.publisher || 'imgPub';
|
||||
const language = meta?.language || 'tr';
|
||||
const description = meta?.description || title;
|
||||
|
||||
const content = [
|
||||
{
|
||||
@@ -288,6 +300,18 @@ app.post('/generate-epub', async (req, res) => {
|
||||
|
||||
const outputPath = join(tmpdir(), `imgpub-${uuidV4()}.epub`);
|
||||
let coverPath;
|
||||
const metadataPayload = {
|
||||
subtitle: meta?.subtitle,
|
||||
description: meta?.description,
|
||||
categories: Array.isArray(meta?.categories) ? meta.categories : [],
|
||||
publishedDate: meta?.publishedDate,
|
||||
language: meta?.language,
|
||||
pageCount: meta?.pageCount,
|
||||
averageRating: meta?.averageRating,
|
||||
ratingsCount: meta?.ratingsCount,
|
||||
identifiers: Array.isArray(meta?.identifiers) ? meta.identifiers : [],
|
||||
infoLink: meta?.infoLink,
|
||||
};
|
||||
|
||||
try {
|
||||
if (cover?.data) {
|
||||
@@ -298,7 +322,16 @@ app.post('/generate-epub', async (req, res) => {
|
||||
await fs.writeFile(coverPath, coverBuffer);
|
||||
}
|
||||
|
||||
const epubOptions = { title, author, content };
|
||||
const epubOptions = {
|
||||
title,
|
||||
author: authors,
|
||||
publisher,
|
||||
description,
|
||||
lang: language,
|
||||
content,
|
||||
bookMetadata: metadataPayload,
|
||||
customOpfTemplatePath: join(__dirname, 'templates', 'content.opf.ejs'),
|
||||
};
|
||||
if (coverPath) {
|
||||
epubOptions.cover = coverPath;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user