Files
aiameiba_com_new/src/routes/publicApiRoutes.js
T

150 lines
4.3 KiB
JavaScript

const express = require('express');
const router = express.Router();
const PublicApiService = require('../services/PublicApiService');
const { getDb } = require('../config/database');
// 获取前台展示配置(只读)
router.get('/settings', async (req, res) => {
try {
const rows = getDb().prepare('SELECT setting_key, setting_value FROM site_settings').all();
res.json(Object.fromEntries(rows.map(row => [row.setting_key, row.setting_value])));
} catch (error) {
res.status(500).json({ error: error.message });
}
});
// 获取已发布的实体列表
router.get('/entities', async (req, res) => {
try {
const { page = 1, pageSize = 10, orderBy } = req.query;
const offset = (parseInt(page) - 1) * parseInt(pageSize);
const entities = PublicApiService.getPublishedEntities({
orderBy,
limit: parseInt(pageSize),
offset
});
res.json(entities);
} catch (error) {
res.status(500).json({ error: error.message });
}
});
// 获取已发布的实体详情
router.get('/entities/:id', async (req, res) => {
try {
const entity = PublicApiService.getPublishedEntityById(req.params.id);
if (!entity) {
return res.status(404).json({ error: '实体不存在' });
}
res.json(entity);
} catch (error) {
res.status(500).json({ error: error.message });
}
});
// 获取实体的已发布关系
router.get('/entities/:id/relationships', async (req, res) => {
try {
const sourceRelationships = PublicApiService.getPublishedRelationshipsBySource(req.params.id);
const targetRelationships = PublicApiService.getPublishedRelationshipsByTarget(req.params.id);
res.json({
source: sourceRelationships,
target: targetRelationships
});
} catch (error) {
res.status(500).json({ error: error.message });
}
});
// 获取实体的已发布内容
router.get('/entities/:id/contents', async (req, res) => {
try {
const contents = PublicApiService.getEntityPublishedContents(req.params.id);
res.json(contents);
} catch (error) {
res.status(500).json({ error: error.message });
}
});
// 获取已发布的内容列表
router.get('/contents', async (req, res) => {
try {
const { type, page = 1, pageSize = 10, orderBy } = req.query;
const offset = (parseInt(page) - 1) * parseInt(pageSize);
const contents = PublicApiService.getPublishedContents(type, {
orderBy,
limit: parseInt(pageSize),
offset
});
res.json(contents);
} catch (error) {
res.status(500).json({ error: error.message });
}
});
// 获取已发布的内容详情
router.get('/contents/:id', async (req, res) => {
try {
const content = PublicApiService.getPublishedContentById(req.params.id);
if (!content) {
return res.status(404).json({ error: '内容不存在或未发布' });
}
res.json(content);
} catch (error) {
res.status(500).json({ error: error.message });
}
});
// 获取内容的实体关联
router.get('/contents/:id/entities', async (req, res) => {
try {
const entities = PublicApiService.getContentEntities(req.params.id);
res.json(entities);
} catch (error) {
res.status(500).json({ error: error.message });
}
});
// 搜索实体
router.get('/search/entities', async (req, res) => {
try {
const { keyword, page = 1, pageSize = 10, orderBy } = req.query;
if (!keyword) {
return res.status(400).json({ error: '搜索关键词不能为空' });
}
const offset = (parseInt(page) - 1) * parseInt(pageSize);
const entities = PublicApiService.searchEntities(keyword, {
orderBy,
limit: parseInt(pageSize),
offset
});
res.json(entities);
} catch (error) {
res.status(500).json({ error: error.message });
}
});
// 搜索内容
router.get('/search/contents', async (req, res) => {
try {
const { keyword, type, page = 1, pageSize = 10, orderBy } = req.query;
if (!keyword) {
return res.status(400).json({ error: '搜索关键词不能为空' });
}
const offset = (parseInt(page) - 1) * parseInt(pageSize);
const contents = PublicApiService.searchContents(keyword, type, {
orderBy,
limit: parseInt(pageSize),
offset
});
res.json(contents);
} catch (error) {
res.status(500).json({ error: error.message });
}
});
module.exports = router;