/home/techb158/cosmic.abdallabala.com/src/services
Edit: /home/techb158/cosmic.abdallabala.com/src/services/dashboardService.js (2177B)
const engine = require("../../public/risk-engine.js");
const { ProjectRepository } = require("../repositories/projectRepository.js");
const { insert } = require("../storage/jsonDatabase.js");
const { scoredRiskToScoreRecord } = require("../domain/dataMapper.js");
const { toGateView } = require("./gateWorkflowService.js");
class DashboardService {
constructor(database) {
this.database = database;
this.projects = new ProjectRepository(database);
}
getDashboard(projectId) {
const data = this.projects.getAggregate(projectId);
if (!data) return null;
const dashboard = engine.calculateDashboard(data);
return { data, dashboard };
}
calculateRisk(payload) {
return engine.scoreRisk(payload);
}
evaluateGate(projectId, actorUserId = "system") {
const result = this.getDashboard(projectId);
if (!result) return null;
const gate = result.dashboard.gate;
const persistedGate = this.database.transaction(db => {
const gateRecord = insert(db, "deployment_gates", {
project_id: projectId,
status: gate.status,
review_status: "Pending review",
summary: gate.message,
evaluated_by_user_id: actorUserId,
evaluated_at: new Date().toISOString(),
reviewed_by_display_name: null,
reviewed_at: null
}, "GATE");
gate.criteria.forEach(item => {
insert(db, "gate_criteria", {
gate_id: gateRecord.id,
name: item.name,
actual_value: String(item.actual),
expected_rule: item.required,
status: item.status === "Blocked" ? "Fail" : item.status,
blocking: item.status === "Blocked",
evidence: item.evidence || "",
evidence_title: item.evidence || "",
evidence_uri: "",
reviewer_status: "Open",
reviewer_note: ""
}, "GCR");
});
result.dashboard.scoredRisks.forEach(risk => {
insert(db, "risk_scores", scoredRiskToScoreRecord(risk.id, risk), "RSCORE");
});
return toGateView(db, gateRecord);
});
return Object.assign({}, gate, { persistedGate });
}
}
module.exports = { DashboardService };