sunnymh-backend/db_api.jsx
2025-05-14 16:19:08 +08:00

203 lines
5.0 KiB
JavaScript

const express = require('express');
const databaseService = require('./src/services/database.service');
// Configuration
const PORT = process.env.PORT || 4000;
// Initialize Express app
const app = express();
app.use(express.json());
async function initializeDatabases() {
try {
await databaseService.createConnection();
} catch (error) {
process.exit(1);
}
}
// Routes
app.get('/manga/:id', async (req, res) => {
const mangaId = req.params.id;
try {
const sqlQuery = 'SELECT * FROM mangas WHERE mangaId = ?';
const mySQLResults = await databaseService.query(sqlQuery, [mangaId]);
if (!mySQLResults || mySQLResults.length === 0) {
return res.status(404).json({ error: 'Manga not found' });
}
res.json({ data: mySQLResults[0] });
} catch (error) {
console.error('Error fetching manga:', error);
res.status(500).json({ error: 'Internal server error' });
}
});
app.get('/getMangaId/:mangaName', async (req, res) => {
const mangaName = req.params.mangaName;
try {
const sqlQuery = 'SELECT mangaId FROM mangas WHERE mangaName = ?';
const mySQLResults = await databaseService.query(sqlQuery, [mangaName]);
if (!mySQLResults || mySQLResults.length === 0) {
return res.status(404).json({ error: 'Manga not found' });
}
res.json({ data: mySQLResults[0] });
} catch (error) {
console.error('Error getting manga ID:', error);
res.status(500).json({ error: 'Internal server error' });
}
});
app.get('/getGenres/:genre', async (req, res) => {
const genre = req.params.genre;
try {
const sqlQuery = 'SELECT genreId FROM genres WHERE genreName = ?';
const mySQLResults = await databaseService.query(sqlQuery, [genre]);
if (!mySQLResults || mySQLResults.length === 0) {
return res.status(404).json({ error: 'Genre not found' });
}
res.json({ data: mySQLResults[0] });
} catch (error) {
console.error('Error getting genre:', error);
res.status(500).json({ error: 'Internal server error' });
}
});
app.post('/insertGenre', async (req, res) => {
const genre = req.body;
try {
const sqlQuery = 'INSERT INTO genres (genreName) VALUES (?)';
const mySQLResults = await databaseService.query(sqlQuery, [genre.genreName]);
res.json({
success: true,
message: 'Genre inserted successfully',
genreId: mySQLResults.insertId
});
} catch (error) {
console.error('Error inserting genre:', error);
res.status(500).json({ error: 'Internal server error' });
}
});
app.post('/insertMangaGenres', async (req, res) => {
const genres = req.body;
try {
const sqlQuery = `
INSERT INTO manga_genres (
mangaId,
genreId
) VALUES (?, ?)
`;
const params = [
genres.mangaId,
genres.genreId
];
await databaseService.query(sqlQuery, params);
res.json({
success: true,
message: 'Manga genres inserted successfully',
});
} catch (error) {
console.error('Error inserting manga genres:', error);
res.status(500).json({ error: 'Internal server error' });
}
});
app.post('/insertMangaChapter', async (req, res) => {
const chapterInfo = req.body;
try {
const sqlQuery = `
INSERT INTO chapters (
mangaId,
chapterOrder,
chapterName
) VALUES (?, ?, ?)
`;
const params = [
chapterInfo.mangaId,
chapterInfo.chapterOrder,
chapterInfo.chapterName
];
await databaseService.query(sqlQuery, params);
res.json({
success: true,
message: 'Chapter inserted successfully',
});
} catch (error) {
console.error('Error inserting chapter:', error);
res.status(500).json({ error: 'Internal server error' });
}
});
app.post('/insertMangaInfo', async (req, res) => {
const mangaInfo = req.body;
try {
const sqlQuery = `
INSERT INTO mangas (
mangaId,
mangaName,
mangaAuthor,
mangaNickname,
mangaStatus
) VALUES (?, ?, ?, ?, ?)
ON DUPLICATE KEY UPDATE
mangaName = VALUES(mangaName),
mangaAuthor = VALUES(mangaAuthor),
mangaNickname = VALUES(mangaNickname),
mangaStatus = VALUES(mangaStatus)
`;
const params = [
mangaInfo.mangaId,
mangaInfo.name,
mangaInfo.author,
JSON.stringify(mangaInfo.nickNames),
mangaInfo.status
];
await databaseService.query(sqlQuery, params);
res.json({
success: true,
message: 'Manga details inserted successfully',
});
} catch (error) {
console.error('Error inserting manga details:', error);
res.status(500).json({ error: 'Internal server error' });
}
});
// Error handling middleware
app.use((err, req, res, next) => {
console.error('Unhandled error:', err);
res.status(500).json({ error: 'Internal server error' });
});
// Start server
initializeDatabases()
.then(() => {
app.listen(PORT, () => {
console.log(`API server listening at http://localhost:${PORT}`);
});
})
.catch(error => {
console.error('Failed to start server:', error);
process.exit(1);
});