Run calendar module in isolated persistent container

This commit is contained in:
ayde64
2026-10-07 22:41:18 +02:00
parent bc5cac32df
commit 67d5d5bb36
5 changed files with 37 additions and 12 deletions

View File

@@ -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);