Mahek2710/Sahaay
GitHub: Mahek2710/Sahaay
Sahaay 是一个基于角色的实时紧急事件报告与响应协调平台,解决高压场景下市民快速上报和救援资源统一调度的问题。
Stars: 0 | Forks: 0
# Sahaay — 紧急可视化与响应平台
这是一个为高紧急、时间紧迫情况构建的实时紧急报告与响应平台。其设计理念基于这样一个假设:处于压力下的用户需要以尽可能少的步骤来报告事件并获取帮助。
## 技术栈
- **前端** — React (Vite)、shadcn/ui、Mapbox GL JS
- **后端** — Node.js、Express
- **数据库** — MongoDB
- **实时通信** — Socket.io
- **测试** — Selenium (Java + TestNG)、Playwright、Cypress
## 功能
**市民门户**
- 单屏事件报告 — 类别、严重程度、位置、备注
- 交互式 Mapbox 地图,用于精确定位
- 根据事件类型动态生成的表单字段
- 实时提交并即时确认
**响应工作台**
- 带有按严重程度颜色编码标记的实时地图
- 包含状态管理的事件详情视图
- 响应能力追踪(可用 / 已部署 / 不可用)
- 通过 Socket.io 在所有打开的会话中实时更新
## 测试
该应用程序拥有一个专门的 QA 自动化测试套件,涵盖功能测试、跨浏览器测试和 API 测试。
**Selenium (Java + TestNG)** — 使用页面对象模型(Page Object Model)模式的功能 UI 测试。涵盖身份验证流程、基于角色的访问控制(在 URL 级别进行验证,而不仅是 UI 层面)、事件提交和表单验证。包含通过 TestNG `@DataProvider` 实现的由数据驱动的测试,具有 20 多种输入组合,以及对所有输入字段的安全探测(SQL 注入、XSS)。
**Playwright** — 在 Chromium、Firefox 和 WebKit 上并行运行的跨浏览器测试。包含视觉回归测试(截图差异对比)、用于测试后端故障下 UI 行为的网络拦截,以及通过 axe-playwright 进行的可访问性检查。
**Cypress** — 针对所有后端 endpoint 的 API 契约测试。验证响应结构、HTTP 状态码、JWT 格式以及安全属性(例如,响应 body 中绝不可返回密码字段)。自定义的 `cy.loginAs()` 命令抽象了跨测试文件的身份验证。
所有三个测试套件都已接入 GitHub Actions CI pipeline,在每次 push 时运行,支持并行执行并生成 Allure 报告。
## 数据模型
**Incident**
```
category String
detail String
severity Low | Medium | High | Critical
notes String (optional)
lat, lng Number
timestamp Date
status Active | Resolved
```
**Response Capability**
```
domain String
description String
status Available | Deployed | Unavailable
lat, lng Number
```
## 设置
**后端**
```
cd backend
npm install
# .env (提供默认值)
# MONGODB_URI=mongodb://localhost:27017/sahaay
# FRONTEND_URL=http://localhost:5173
# PORT=3000
npm run dev
```
**前端**
```
cd frontend
npm install
npm run dev
```
前端 → `http://localhost:5173`
后端 → `http://localhost:3000`
## 设计思路
深色与浅色高对比度主题切换。大面积的触控区域。无装饰性元素。红色被专门保留用于标识“严重”(Critical)级别。该界面的设计基于这样一个假设:使用它的人正处于压力之中 —— 每一次交互只需一步,而不是三步。
标签:MITM代理, RBAC权限控制, 事件报告, 实时地图, 应急救援平台, 特征检测, 自定义脚本