initial commit
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
import { Router } from 'express';
|
||||
import { upload } from '../middleware/upload.js';
|
||||
import { config } from '../config.js';
|
||||
import {
|
||||
listRoutes, getRoute, createRoute, updateRoute, appendRoute,
|
||||
listPois, getPoi, createPoi, updatePoi, softDeleteRoute, restoreRoute
|
||||
} from '../services/routes-service.js';
|
||||
|
||||
const numberOrUndefined = value => {
|
||||
if (value == null || value === '') return undefined;
|
||||
const parsed = Number.parseFloat(value);
|
||||
return Number.isFinite(parsed) ? parsed : undefined;
|
||||
};
|
||||
|
||||
export function createApiRouter(db) {
|
||||
const api = Router();
|
||||
|
||||
api.get('/health', (req, res) => {
|
||||
const sqliteVersion = db.prepare('SELECT sqlite_version() AS version').get().version;
|
||||
res.json({
|
||||
ok: true,
|
||||
service: 'wegwichtel',
|
||||
instance: config.instanceName,
|
||||
socket: `${config.host}:${config.port}`,
|
||||
sqliteVersion,
|
||||
timestamp: new Date().toISOString()
|
||||
});
|
||||
});
|
||||
|
||||
api.get('/routes', (req, res) => {
|
||||
res.json({ routes: listRoutes(db, {
|
||||
lat: numberOrUndefined(req.query.lat),
|
||||
lon: numberOrUndefined(req.query.lon),
|
||||
radiusKm: numberOrUndefined(req.query.radiusKm),
|
||||
includeDeleted: req.query.includeDeleted === 'true'
|
||||
}) });
|
||||
});
|
||||
|
||||
api.get('/routes/:id', (req, res) => {
|
||||
res.json(getRoute(db, Number(req.params.id), req.query.includeDeleted === 'true'));
|
||||
});
|
||||
|
||||
api.get('/routes/:id/pois', (req, res) => {
|
||||
getRoute(db, Number(req.params.id));
|
||||
res.json({ pois: listPois(db, Number(req.params.id)) });
|
||||
});
|
||||
|
||||
api.get('/pois/:id', (req, res) => {
|
||||
res.json(getPoi(db, Number(req.params.id)));
|
||||
});
|
||||
|
||||
api.post('/routes', upload.single('gpx'), (req, res) => {
|
||||
const route = createRoute(db, req.body, req.file);
|
||||
res.status(201).location(`/api/routes/${route.id}`).json(route);
|
||||
});
|
||||
|
||||
api.put('/routes/:id', upload.single('gpx'), (req, res) => {
|
||||
res.json(updateRoute(db, Number(req.params.id), req.body, req.file));
|
||||
});
|
||||
|
||||
api.post('/routes/:id/append', upload.single('gpx'), (req, res) => {
|
||||
res.json(appendRoute(db, Number(req.params.id), req.file));
|
||||
});
|
||||
|
||||
api.post('/routes/:id/pois', upload.fields([{ name: 'audio', maxCount: 1 }, { name: 'images', maxCount: 20 }]), (req, res) => {
|
||||
const poi = createPoi(db, Number(req.params.id), req.body, req.files);
|
||||
res.status(201).location(`/api/pois/${poi.id}`).json(poi);
|
||||
});
|
||||
|
||||
api.put('/pois/:id', upload.fields([{ name: 'audio', maxCount: 1 }, { name: 'images', maxCount: 20 }]), (req, res) => {
|
||||
res.json(updatePoi(db, Number(req.params.id), req.body, req.files));
|
||||
});
|
||||
|
||||
api.delete('/routes/:id', (req, res) => {
|
||||
res.json({ route: softDeleteRoute(db, Number(req.params.id)), softDeleted: true });
|
||||
});
|
||||
|
||||
api.post('/routes/:id/restore', (req, res) => {
|
||||
res.json({ route: restoreRoute(db, Number(req.params.id)), restored: true });
|
||||
});
|
||||
|
||||
return api;
|
||||
}
|
||||
Reference in New Issue
Block a user