Run calendar module in isolated persistent container
This commit is contained in:
@@ -1,13 +1,14 @@
|
||||
'use strict';
|
||||
const fs = require('node:fs');
|
||||
const path = require('node:path');
|
||||
const os = require('node:os');
|
||||
const { DatabaseSync } = require('node:sqlite');
|
||||
const { createModuleServer, loadManifest, createLogger } = require('./platform-module-sdk');
|
||||
process.umask(0o077);
|
||||
const manifest = loadManifest(path.join(__dirname, '..', 'module.json'));
|
||||
const logger = createLogger({ moduleId: manifest.id });
|
||||
const db = new DatabaseSync(path.join(os.tmpdir(), manifest.id + '.sqlite'));
|
||||
const dataDirectory = process.env.MPM_MODULE_DATA_DIR || path.join(__dirname, '..', 'data');
|
||||
fs.mkdirSync(dataDirectory, { recursive: true, mode: 0o700 });
|
||||
const db = new DatabaseSync(path.join(dataDirectory, manifest.id + '.sqlite'));
|
||||
db.exec('CREATE TABLE IF NOT EXISTS events (id INTEGER PRIMARY KEY AUTOINCREMENT, user_id TEXT NOT NULL, title TEXT NOT NULL CHECK(length(title)<=120), event_date TEXT NOT NULL, notes TEXT NOT NULL DEFAULT "" CHECK(length(notes)<=1000), created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP)');
|
||||
const listEvents = db.prepare('SELECT id,title,event_date,notes FROM events WHERE user_id=? AND event_date>=? AND event_date<? ORDER BY event_date,title');
|
||||
const insertEvent = db.prepare('INSERT INTO events(user_id,title,event_date,notes) VALUES(?,?,?,?)');
|
||||
@@ -31,4 +32,10 @@ const server = createModuleServer({manifest,logger,routes:async(req,res,{path:pa
|
||||
if(pathname.startsWith('/api/'))return json(res,404,{error:'Route nicht gefunden.'});
|
||||
res.writeHead(404,{'content-type':'text/plain; charset=utf-8'});res.end('Nicht gefunden');
|
||||
}});
|
||||
server.listen(Number(process.env.PORT||manifest.port),'127.0.0.1',()=>logger.info('Kalender MVP gestartet',{port:Number(process.env.PORT||manifest.port)}));
|
||||
server.listen(Number(process.env.PORT||manifest.port),'0.0.0.0',()=>logger.info('Kalender MVP gestartet',{port:Number(process.env.PORT||manifest.port)}));
|
||||
|
||||
function shutdown() {
|
||||
try { db.close(); } finally { server.close(() => process.exit(0)); }
|
||||
}
|
||||
process.once('SIGTERM', shutdown);
|
||||
process.once('SIGINT', shutdown);
|
||||
|
||||
Reference in New Issue
Block a user