AI Security 一个使用 Go 语言开发的 Web 应用程序,旨在为企业提供安全管理平台,帮助企业进行安全生产,有效地识别、管理和解决安全隐患,提高安全管理效率,降低安全风险。
项目目标:
- 实时安全监测: 通过边缘计算盒子实时监测安全隐患,例如识别检测到抽烟、打电话、未戴安全帽、过道停放电动车等安全问题,并自动处理图片和视频记录。
- 智能报警系统: 将识别到的安全隐患信息分类处理,进入工作流,自动分发给相关人员处理相关报警问题。
- 安全隐患管理: 对安全隐患进行记录、管理,并分配相关人员进行日常安全排查工作。
- 角色权限管理: 对企业部门、人员进行角色管理,确保不同角色拥有不同的权限,例如查看、编辑、审批等。
config
: 系统运行时相关配置, 主要存放系统运行以及业务相关配置.data
: 文件存放目录, 可挂载到Linux系统其他目录.ent
: ent框架文件, 操作数据库的各种元文件, 字段配置文件等.enums
: 枚举类型数据配置.expects
: 异常类型文件.handlers
: 业务控制器, 主要的业务处理分发单元.logs
: 日志存放目录.middlewares
: 中间件, 处理整个控制器运行周期中的咽喉与尾部操作, 如权限验证, 日志记录等.routes
: 基于Gin框架的路由配置文件.services
: 数据操作层, 主要的业务数据处理单元.structs
: 结构体存放目录, 由于go的特性, 统一将各个类别的结构体存放在此目录.tests
: 单元测试目录.utils
: 工具箱, 与业务关联度不高的公共设施.
项目代码被组织成多个包,每个包负责特定的功能,以确保代码的可维护性和可扩展性:
1. config
包:
- 包含应用程序的配置信息,例如:
- 数据库连接信息
- API 密钥
- 日志级别
- 缓存配置
- 文件存储配置
- 边缘计算盒子配置
- 工作流配置
- 角色权限配置
- 使用
.env
文件来管理环境变量,方便在不同环境下进行配置,例如开发环境、测试环境、生产环境。 - 使用配置文件管理工具,例如 Viper,可以方便地读取和解析配置文件,并支持多种配置文件格式,例如 YAML、JSON、TOML 等。
2. middlewares
包:
- 包含中间件函数,用于处理常见的请求处理流程,例如:
- 请求日志记录: 记录请求的详细信息,例如请求时间、请求方法、请求路径、请求参数、响应状态码等,方便调试和分析。
- 身份验证: 验证用户的身份,确保只有授权用户才能访问特定的资源。可以使用 JWT (JSON Web Token) 或其他身份验证机制。
- 错误处理: 处理应用程序运行过程中发生的错误,例如数据库连接错误、API 调用错误等,并返回友好的错误信息给用户。
- 请求限流: 限制用户请求的频率,防止恶意攻击或资源耗尽。
- 安全检查: 检查请求参数和数据,防止 SQL 注入、跨站脚本攻击等安全漏洞。
- 中间件可以拦截请求和响应,执行一些预处理或后处理操作,提高代码的复用性和可读性。
3. routes
包:
- 定义应用程序的 HTTP 路由,将不同的 URL 路径映射到相应的处理函数。
- 使用 Gin 框架的路由功能,可以轻松定义和管理应用程序的 API 接口。
- 遵循 RESTful API 设计原则,设计清晰、易于理解的 API 接口,方便用户使用。
- 提供以下 API 接口:
- 边缘计算盒子数据接收接口: 用于接收边缘计算盒子实时监测到的安全隐患报警信息,包括图片、视频、报警信息等。
- 安全隐患管理接口: 用于管理安全隐患信息,例如添加、删除、修改、查询等。
- 工作流管理接口: 用于管理安全隐患处理流程,例如创建、编辑、审批等。
- 角色权限管理接口: 用于管理企业部门、人员的角色权限。
4. utils
包:
- 包含一些通用的工具函数,例如:
- 数据库操作: 提供与数据库交互的函数,例如查询、插入、更新、删除等。
- 日志记录: 提供日志记录功能,方便调试和分析应用程序运行过程中的信息。
- 字符串处理: 提供字符串处理函数,例如格式化、验证、加密等。
- 缓存操作: 提供缓存操作函数,例如获取缓存数据、设置缓存数据、删除缓存数据等。
- 文件操作: 提供文件操作函数,例如读取文件、写入文件、删除文件等。
- 图片处理: 提供图片处理函数,例如缩放、裁剪、压缩等。
- 视频处理: 提供视频处理函数,例如提取帧、转码等。
- 工作流引擎: 提供工作流引擎,用于管理安全隐患处理流程。
- 微信API: 提供微信公众号相关操作,用于任务分配的提醒、安全报警信息接收等。
- 这些工具函数可以方便地在其他包中调用,提高代码的复用性和可读性。
5. structs
包:
- 定义应用程序中使用的各种数据结构,例如:
- 用户模型: 定义用户的属性,例如用户名、密码、邮箱地址、角色等。
- 边缘计算盒子模型: 定义边缘计算盒子的属性,例如设备 ID、设备类型、连接状态等。
- 安全隐患模型: 定义安全隐患的属性,例如类型、时间、地点、描述、图片、视频、处理状态等。
- 工作流模型: 定义安全隐患处理流程的步骤、负责人、审批条件等。
- 角色模型: 定义角色的属性,例如角色名称、权限等。
- 定义清晰的数据结构可以提高代码的可读性和可维护性,并方便数据传递和处理。
6. tests
包:
- 包含对应用程序各个组件的单元测试,确保代码的正确性和可靠性。
- 编写单元测试可以提高代码的质量,并减少代码错误,提高代码的稳定性和可靠性。
技术栈:
- Gin 框架: Gin 框架是一个 Go 语言的 HTTP 框架,它提供了一个高效且易于使用的 API 用于处理 HTTP 请求,并提供路由、中间件、错误处理等功能,简化了 Web 应用程序的开发。
- Ent 框架: Ent 是一款 Go 语言的数据库 ORM 框架,它提供了一种类型安全且简洁的方式与数据库交互,简化了数据库操作,并提高了代码的可读性和可维护性。选择 Ent 的原因:
1. 关系映射:
- Ent 支持关系映射,可以轻松地定义数据库表之间的关系,例如一对一、一对多、多对多等关系。
- Ent 提供了方便的 API 用于处理关系数据,例如查询关联数据、创建关联数据、删除关联数据等。
2. 数据验证:
- Ent 支持数据验证,可以定义数据字段的验证规则,例如非空验证、长度验证、格式验证等。
- Ent 会自动执行数据验证,确保数据的正确性和完整性。
3. 可扩展性:
- Ent 提供了丰富的扩展机制,可以自定义数据模型、操作方法、验证规则等。
- Ent 支持插件机制,可以方便地扩展 Ent 的功能。
4. 生成的代码:
- Ent 会根据数据模型自动生成 Go 代码,包括数据模型结构、数据库操作方法、数据验证方法等。
- 生成的代码类型安全、易于阅读和维护。
5. 强大的工具:
-
Ent 提供了强大的工具,例如 Ent CLI,可以帮助你创建数据模型、生成代码、运行迁移等。
-
PostgreSQL: 项目使用 PostgreSQL 作为数据库,PostgreSQL 是一种功能强大的开源关系型数据库管理系统,提供事务处理、数据完整性约束、并发控制等特性,提供更丰富的数据类型,包括数组、JSON、XML、几何类型等,更适合复杂数据结构。
设计模式:
- MVC (模型-视图-控制器): 项目结构遵循 MVC 模式的一种变体,
routes
充当控制器,structs
代表模型,handlers
负责视图。MVC 模式可以将应用程序逻辑、数据和界面分离,提高代码的可维护性和可扩展性。 - 依赖注入: 项目使用依赖注入,将依赖关系从代码中分离出来,提高代码的可测试性和可维护性。依赖注入可以将对象的创建和管理委托给外部容器,简化了代码的编写和维护。
- 配置管理: 项目使用
.env
文件来管理环境变量,这是一种常见的配置管理方式,方便在不同环境下进行配置,例如开发环境、测试环境、生产环境。 - 中间件: 项目使用了 Gin 框架的中间件机制,用于处理常见的请求处理流程,例如请求日志记录、身份验证、错误处理等。中间件可以拦截请求和响应,执行一些预处理或后处理操作,提高代码的复用性和可读性。
其他:
- 单元测试: 项目包含
tests
目录,表明项目使用了单元测试来保证代码质量。单元测试可以确保代码的正确性和可靠性,提高代码的质量和稳定性。 - 持续集成/持续交付 (CI/CD): 项目使用了 CI/CD 工具,用于自动化构建、测试和部署流程,提高开发效率和代码质量。CI/CD 可以确保代码的变更能够快速、安全地部署到生产环境中。
贡献:
欢迎贡献!请确保更新相应的测试,并遵循代码风格指南,以确保代码质量和一致性。
许可证:
MIT
- 确保PostgreSQL数据库已配置好.
- 正确配置 .env 文件.
- 编译运行.
- 运行前端react项目, 测试访问后端接口.