/
home
/
techb158
/
trellopowerup.abdallabala.com
/
src
/
/home/techb158/trellopowerup.abdallabala.com/src
mkdir
upload
Name
Size
Mode
Actions
assessmentAnalytics.js
7144
0644
edit
dl
rm
riskEngine.js
5756
0644
edit
dl
rm
server.js
7079
0644
edit
dl
rm
store.js
3545
0644
edit
dl
rm
Edit:
/home/techb158/trellopowerup.abdallabala.com/src/store.js
(3545B)
import fs from 'node:fs'; import path from 'node:path'; import { fileURLToPath } from 'node:url'; import { v4 as uuidv4 } from 'uuid'; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const defaultStoreFile = path.join(__dirname, '..', 'data', 'store.json'); const storeFile = process.env.COSMIC_STORE_FILE || defaultStoreFile; const boards = new Map(); const cards = new Map(); const assessments = new Map(); function ensureStoreDirectory() { fs.mkdirSync(path.dirname(storeFile), { recursive: true }); } function mapValues(map) { return [...map.values()]; } function loadCollection(map, values = []) { for (const item of values) { const id = item.id || item.boardId || item.cardId; if (id) map.set(id, item); } } function loadStore() { if (!fs.existsSync(storeFile)) return; try { const data = JSON.parse(fs.readFileSync(storeFile, 'utf8')); loadCollection(boards, data.boards); loadCollection(cards, data.cards); loadCollection(assessments, data.assessments); } catch (error) { console.warn(`COSMIC store could not be loaded from ${storeFile}:`, error.message); } } function persistStore() { ensureStoreDirectory(); const payload = { version: 1, updatedAt: new Date().toISOString(), boards: mapValues(boards), cards: mapValues(cards), assessments: mapValues(assessments) }; const tempFile = `${storeFile}.${process.pid}.${Date.now()}.tmp`; fs.writeFileSync(tempFile, `${JSON.stringify(payload, null, 2)}\n`); fs.renameSync(tempFile, storeFile); } loadStore(); export function upsertBoard(boardId, data) { const current = boards.get(boardId) || { boardId, createdAt: new Date().toISOString() }; const next = { ...current, ...data, boardId, updatedAt: new Date().toISOString() }; boards.set(boardId, next); persistStore(); return next; } export function upsertCard(cardId, data) { const current = cards.get(cardId) || { cardId, createdAt: new Date().toISOString() }; const next = { ...current, ...data, cardId, updatedAt: new Date().toISOString() }; cards.set(cardId, next); persistStore(); return next; } export function saveAssessment(data) { const id = data.id || uuidv4(); const assessment = { id, ...data, createdAt: data.createdAt || new Date().toISOString(), updatedAt: new Date().toISOString() }; assessments.set(id, assessment); persistStore(); return assessment; } function newestFirst(items) { return items.sort((a, b) => new Date(b.createdAt) - new Date(a.createdAt)); } export function listAssessmentsByBoard(boardId) { return newestFirst([...assessments.values()].filter((item) => item.boardId === boardId)); } export function listAssessmentsByCard(cardId) { return newestFirst([...assessments.values()].filter((item) => item.cardId === cardId)); } export function listAssessmentsByBoardCard(boardId, cardId) { return newestFirst([...assessments.values()].filter((item) => item.boardId === boardId && item.cardId === cardId)); } export function deleteAssessmentsByCard(boardId, cardId) { const matching = [...assessments.values()].filter((item) => item.boardId === boardId && item.cardId === cardId); for (const item of matching) { assessments.delete(item.id); } if (matching.length) persistStore(); return { deleted: matching.length }; } export function getStoreInfo() { return { mode: 'json-file', file: storeFile, boards: boards.size, cards: cards.size, assessments: assessments.size }; }
Save
cmd:
run