203 lines
5.0 KiB
JavaScript
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);
|
|
});
|
|
|