基于DeepSeek的代码评测和自动纠错优化系统-Gin开发层次结构与项目个人开发总结
本项目旨在开发一个基于 Go 语言和 Gin 框架构建的简易在线评测系统(Online Judge),命名为“deepjudge”。平台主要面向编程初学者、算法竞赛选手和教学辅助场景,支持多语言编程提交、题目管理、代码评测与结构分析等功能。系统整体采用前后端分离架构设计,后端基于 Gin,前端可使用 Vue.js 实现基本交互,后期支持 API 扩展及深度分析能力。
一、项目任务概述
本项目旨在开发一个基于 Go 语言和 Gin 框架构建的简易在线评测系统(Online Judge),命名为“deepjudge”。平台主要面向编程初学者、算法竞赛选手和教学辅助场景,支持多语言编程提交、题目管理、代码评测与结构分析等功能。系统整体采用前后端分离架构设计,后端基于 Gin,前端可使用 Vue.js 实现基本交互,后期支持 API 扩展及深度分析能力。
本项目按照功能模块拆分为四个核心部分:用户系统、题目管理、代码提交与评测、DeepSeek API 分析,并为每一部分制定了可考核、可量化的技术指标,以保障系统开发质量与后期维护能力。
本人参与了其中数据库总体设计,负责平台整体数据库的设计与建模;并规划提交表数据分析表等关键数据结构;
二、技术选型
后端框架:Gin
数据库:SQLite
缓存:Redis
三,gin开发流程记录
基本模块分为Model,router和service的三层

Model层是数据访问层,主要包括了类型的定义(对象结构体),获取类的相关方法,并返回对象数组
type Problem struct {
gorm.Model
ID uint `json:"id"`
Title string `json:"title"`
Description string `json:"description"` // 题目描述
Input string `json:"input"` // 输入描述
Output string `json:"output"` // 输出描述
SampleInput string `json:"sample_input"`
SampleOutput string `json:"sample_output"`
Difficulty string `json:"difficulty"` // easy / medium / hard
}
routes层主要是将方法映射到相应的请求路径上,在Gin框架中,可以通过路由分组实现接口分类。将公用接口和受保护接口分开管理,例如将题目和提交相关的接口划分为不同路由组。
例如,利用gin框架将题目和提交区别为受保护接口和公用接口,将操作方法映射到相应的请求路径,实现增删改查
func SetupRoutes(r *gin.Engine) {
r.POST("/register", controllers.Register) //注册
r.POST("/login", controllers.Login) //登陆
// 公共题目接口
r.GET("/problems", controllers.GetProblems) //查看题目列表
r.GET("/problems/:id", controllers.GetProblemByID) //查看题目
// 受保护接口
auth := r.Group("/auth", middleware.AuthMiddleware())
{
problems := auth.Group("/problems")
{
problems.POST("/:id/submit", middleware.RateLimitMiddleware(2, 10*time.Second), // 10 秒最多 2 次
controllers.SubmitCode) //提交代码
problems.GET("/:id/all_submissions", controllers.GetProblemSubmissions)
problems.GET("/:id/submissions", controllers.GetProblemSubmissions)
}
edit := auth.Group("/edit")
{
edit.POST("/add", controllers.CreateProblem) //创建题目
edit.PUT("/:id", controllers.UpdateProblem) //编辑题目
edit.DELETE("/:id", controllers.DeleteProblem) //删除题目
edit.POST("/:id/upload", controllers.UploadTestcases) //上传测试用例
}
// 与用户相关的通用接口
auth.GET("/submissions", controllers.GetUserSubmissions) // 获取当前用户所有提交记录
auth.GET("/submissions/:id/results", controllers.GetTestcaseResults) // 查看测试点结果
// 分析结果接口
auth.POST("/submissions/:id/analyze", controllers.TriggerAnalysis) // 提交分析请求
auth.GET("/submissions/:id/analysis", controllers.GetAllAnalyses) // 查看分析结果
}
}
service层提供了应用方法,其中包括了对数据库操作方法的调用,这里的调用请求经过routes层处理变成了可执行的方法
例如,service中定义的调用DeepSeek接口分析提交代码的方法中,向数据库发送了查询提交记录的请求
func AnalyzeCodeWithDeepSeek(submissionID uint) (AnalysisResult, error) {
// fmt.Println ("I m working")
// 获取提交记录
var submission models.Submission
if err := utils.DB.Where("id = ?", submissionID).First(&submission).Error; err != nil {
return AnalysisResult{}, fmt.Errorf("提交记录未找到:%v", err)
}
}
更多数据库的相应操作可以在GROM提供方法中找到
四,数据库建立
数据库设计步骤
基于DeepSeek的代码评测和自动纠错优化系统-数据库架构的初步设计和流程_deepseek code review-CSDN博客
基于DeepSeek的代码评测和自动纠错优化系统-需求分析与关系图-CSDN博客
基于DeepSeek的代码评测和自动纠错优化系统-数据库逻辑结构设计-CSDN博客
基于DeepSeek的代码评测和自动纠错优化系统-数据库物理结构设计与实施-CSDN博客
基于DeepSeek的代码评测与自动纠错优化系统-基于索引优化搜索结构-CSDN博客
五,优化流程
使用了ORM
基于DeepSeek的ai代码自动纠错和优化评测系统-ORM处理数据库-CSDN博客
用Reddis作为缓存实现异步控制与并发
基于DeepSeek的代码评测和自动纠错优化系统-Redis异步队列实现-CSDN博客
基于索引优化搜索结构基于DeepSeek的代码评测与自动纠错优化系统-基于索引优化搜索结构-CSDN博客
六,实现心得
数据库开发的过程围绕如何高效健壮地支撑核心业务(用户系统、题目管理、代码评测与分析)展开,并时刻关注未来的可扩展性。开发核心点在于清晰地将业务实体(用户、题目、提交记录、分析结果)及其关系映射为合理的表结构,特别是用户与提交(1:N)、题目与提交(1:N)以及提交与分析(1:1)这些关键关联的精确设计。
在题目表中使用 JSON 字段存储题目标签、难度参数等动态元数据,这充分利用了 Gin 处理 JSON 数据结构的便捷性,方便服务层通过 binding 或 mapstructure 等机制高效解析与注入业务逻辑,特别针对与 DeepSeek API 的集成需求,设计了结构清晰、独立的分析结果表,该表设计兼容以结构化 JSON 或 TEXT 格式存储深度分析数据,使 Gin 应用服务层能够高效地接收、存储和按需查询复杂的分析结果集,为后续基于 Gin API 扩展更复杂的评测报告、代码结构洞察等深度分析功能,奠定了坚实的数据基础。
性能优化是处理高频代码提交场景的重中之重。提交记录表将成为核心压力点,因此对其进行了重点设计:对高频查询字段(如user_id, problem_id, created_at, status)建立了必要的索引,状态字段采用枚举类型以提高效率,同时谨慎权衡读写性能,避免过度索引影响写入速度。安全与一致性也贯穿设计始终,包括对用户密码进行强哈希(如bcrypt)处理,并在关键数据关联(如submissions.problem_id -> problems.id)处使用外键约束来强制保证数据完整性,对核心业务逻辑(如用户积分操作)则注重事务的原子性实现。
更多推荐


所有评论(0)