🎨 优化model和日志,完善配置文件
This commit is contained in:
		@@ -13,11 +13,21 @@ var MySQL *gorm.DB
 | 
			
		||||
 | 
			
		||||
func InitMySQLClient() {
 | 
			
		||||
	// 创建连接对象
 | 
			
		||||
	conn, err := gorm.Open(mysql.Open(config.Scd.MySQL.GetDSN()), &gorm.Config{Logger: logger.DefaultGormLogger()})
 | 
			
		||||
	mysqlConfig := mysql.Config{
 | 
			
		||||
		DSN:                     config.Scd.MySQL.GetDSN(),
 | 
			
		||||
		DontSupportRenameIndex:  true, // 重命名索引时采用删除并新建的方式
 | 
			
		||||
		DontSupportRenameColumn: true, // 用 `change` 重命名列
 | 
			
		||||
	}
 | 
			
		||||
	conn, err := gorm.Open(mysql.New(mysqlConfig), &gorm.Config{Logger: logger.DefaultGormLogger()})
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Panic("初始化MySQL连接失败, 错误信息: %v", err)
 | 
			
		||||
	} else {
 | 
			
		||||
		log.Debug("MySQL连接成功")
 | 
			
		||||
	}
 | 
			
		||||
	MySQL = conn
 | 
			
		||||
 | 
			
		||||
	//db, err := conn.DB()
 | 
			
		||||
	//db.SetMaxIdleConns(10)           // 用于设置连接池中空闲连接的最大数量
 | 
			
		||||
	//db.SetMaxOpenConns(100)          // 用于设置数据库连接的最大打开数量
 | 
			
		||||
	//db.SetConnMaxLifetime(time.Hour) // 设置连接的最大存活时间
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,20 +1,20 @@
 | 
			
		||||
package types
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"github.com/google/uuid"
 | 
			
		||||
	"gorm.io/gorm"
 | 
			
		||||
	"time"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// BaseDbModel 数据库通用字段
 | 
			
		||||
type BaseDbModel struct {
 | 
			
		||||
	Id        string         `json:"id" gorm:"type:varchar(50);primarykey"`
 | 
			
		||||
	CreatedAt DateTime       `json:"createdAt"`
 | 
			
		||||
	UpdatedAt DateTime       `json:"updatedAt"`
 | 
			
		||||
	ID        uint           `gorm:"type:int(11);primarykey;" json:"id"`
 | 
			
		||||
	CreatedAt time.Time      `json:"created_at"`
 | 
			
		||||
	UpdatedAt time.Time      `json:"updated_at"`
 | 
			
		||||
	DeletedAt gorm.DeletedAt `json:"-" gorm:"index:deleted"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// BeforeCreate 创建数据库对象之前生成UUID
 | 
			
		||||
/*// BeforeCreate 创建数据库对象之前生成UUID
 | 
			
		||||
func (m *BaseDbModel) BeforeCreate(*gorm.DB) (err error) {
 | 
			
		||||
	m.Id = uuid.New().String()
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
}*/
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
app:
 | 
			
		||||
api:
 | 
			
		||||
  port: 8083
 | 
			
		||||
  name: online_code
 | 
			
		||||
  version: v1
 | 
			
		||||
@@ -15,5 +15,5 @@ mysql:
 | 
			
		||||
redis:
 | 
			
		||||
  host: 127.0.0.1
 | 
			
		||||
  port: 6379
 | 
			
		||||
  password: loser123
 | 
			
		||||
  password: loser7659
 | 
			
		||||
  db: 0
 | 
			
		||||
@@ -9,12 +9,12 @@ import (
 | 
			
		||||
// 初始化数据库表
 | 
			
		||||
func databaseTable() {
 | 
			
		||||
	dbs := []any{
 | 
			
		||||
		new(entity.User),
 | 
			
		||||
		new(entity.Category),
 | 
			
		||||
		new(entity.Problem),
 | 
			
		||||
		new(entity.ProblemCategory),
 | 
			
		||||
		new(entity.Submit),
 | 
			
		||||
		new(entity.UserBasic),
 | 
			
		||||
		new(entity.TestCase),
 | 
			
		||||
		new(entity.CategoryBasic),
 | 
			
		||||
		new(entity.ProblemCategory),
 | 
			
		||||
		//new(entity.ProblemBasic),
 | 
			
		||||
		//new(entity.SubmitBasic),
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if err := client.MySQL.AutoMigrate(dbs...); err != nil {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										7
									
								
								main.go
									
									
									
									
									
								
							
							
						
						
									
										7
									
								
								main.go
									
									
									
									
									
								
							@@ -2,18 +2,25 @@ package main
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"git.echol.cn/loser/logger"
 | 
			
		||||
	"git.echol.cn/loser/logger/log"
 | 
			
		||||
	"github.com/gin-gonic/gin"
 | 
			
		||||
	"golang.org/x/sync/errgroup"
 | 
			
		||||
	"net/http"
 | 
			
		||||
	"online_code/config"
 | 
			
		||||
	"online_code/core"
 | 
			
		||||
	"online_code/initialize"
 | 
			
		||||
	"online_code/route"
 | 
			
		||||
	"time"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var g errgroup.Group
 | 
			
		||||
 | 
			
		||||
func init() {
 | 
			
		||||
	logger.InitLogger(logger.LogConfig{Mode: logger.Dev, LokiEnable: false, FileEnable: true})
 | 
			
		||||
	initialize.InitSystem() // 初始化系统配置
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 启动入口
 | 
			
		||||
func main() {
 | 
			
		||||
	// 强制日志颜色化
 | 
			
		||||
 
 | 
			
		||||
@@ -2,10 +2,10 @@ package entity
 | 
			
		||||
 | 
			
		||||
import "online_code/common/types"
 | 
			
		||||
 | 
			
		||||
// Category 分类表
 | 
			
		||||
// CategoryBasic 分类表
 | 
			
		||||
type CategoryBasic struct {
 | 
			
		||||
	types.BaseDbModel
 | 
			
		||||
	Identity string `json:"identity" gorm:"column:identity;type:varchar(36);comment:'分类的唯一标识'"`
 | 
			
		||||
	Identity string `json:"identity" gorm:"column:identity;type:varchar(36);comment:'问题表的唯一标识'"`
 | 
			
		||||
	Name     string `json:"name" gorm:"column:name;type:varchar(100);comment:'分类名称'" `
 | 
			
		||||
	ParentId int    `json:"parent_id" gorm:"column:parent_id;type:int(11);comment:'父级ID'" `
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -2,18 +2,18 @@ package entity
 | 
			
		||||
 | 
			
		||||
import "online_code/common/types"
 | 
			
		||||
 | 
			
		||||
// Problem 问题表
 | 
			
		||||
// ProblemBasic 问题基础表
 | 
			
		||||
type ProblemBasic struct {
 | 
			
		||||
	types.BaseDbModel
 | 
			
		||||
	Identity          string             `json:"identity" gorm:"column:identity;type:varchar(36);comment:'问题表的唯一标识'" `                 // 问题表的唯一标识
 | 
			
		||||
	ProblemCategories []*ProblemCategory `json:"problem_categories" gorm:"foreignKey:problem_id;references:id;comment:'关联问题分类表'" `     // 关联问题分类表
 | 
			
		||||
	Title             string             `json:"title" gorm:"column:title;type:varchar(255);comment:'文章标题'" `                          // 文章标题
 | 
			
		||||
	Content           string             `json:"content" gorm:"column:content;type:text;comment:'文章正文'" `                              // 文章正文
 | 
			
		||||
	MaxRuntime        int                `json:"max_runtime" gorm:"column:max_runtime;type:int(11);comment:'最大运行时长'" `                 // 最大运行时长
 | 
			
		||||
	MaxMem            int                `json:"max_mem" gorm:"column:max_mem;type:int(11);comment:'最大运行内存'" `                         // 最大运行内存
 | 
			
		||||
	TestCases         []*TestCase        `json:"test_cases" gorm:"foreignKey:problem_identity;references:identity;comment:'关联测试用例表'" ` // 关联测试用例表
 | 
			
		||||
	PassNum           int64              `json:"pass_num" gorm:"column:pass_num;type:int(11);comment:'通过次数'" `                         // 通过次数
 | 
			
		||||
	SubmitNum         int64              `json:"submit_num" gorm:"column:submit_num;type:int(11);comment:'提交次数'" `                     // 提交次数
 | 
			
		||||
	Identity          string            `json:"identity" gorm:"column:identity;type:varchar(36);comment:'问题表的唯一标识'"` // 问题表的唯一标识
 | 
			
		||||
	ProblemCategories []ProblemCategory `json:"problem_categories" gorm:"ForeignKey:ProblemId;comment:'关联问题分类表'"`    // 关联问题分类表
 | 
			
		||||
	Title             string            `json:"title" gorm:"column:title;type:varchar(255);comment:'文章标题'"`          // 文章标题
 | 
			
		||||
	Content           string            `json:"content" gorm:"column:content;type:text;comment:'文章正文'"`              // 文章正文
 | 
			
		||||
	MaxRuntime        int               `json:"max_runtime" gorm:"column:max_runtime;type:int(11);comment:'最大运行时长'"` // 最大运行时长
 | 
			
		||||
	MaxMem            int               `json:"max_mem" gorm:"column:max_mem;type:int(11);comment:'最大运行内存'"`         // 最大运行内存
 | 
			
		||||
	TestCases         []TestCase        `json:"test_cases" gorm:"foreignKey:ProblemIdentity;comment:'关联测试用例表'"`      // 关联测试用例表
 | 
			
		||||
	PassNum           int64             `json:"pass_num" gorm:"column:pass_num;type:int(11);comment:'通过次数'"`         // 通过次数
 | 
			
		||||
	SubmitNum         int64             `json:"submit_num" gorm:"column:submit_num;type:int(11);comment:'提交次数'"`     // 提交次数
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (table *ProblemBasic) TableName() string {
 | 
			
		||||
 
 | 
			
		||||
@@ -7,9 +7,9 @@ import (
 | 
			
		||||
// ProblemCategory 问题分类关联表
 | 
			
		||||
type ProblemCategory struct {
 | 
			
		||||
	types.BaseDbModel
 | 
			
		||||
	ProblemId     uint           `json:"problem_id" gorm:"column:problem_id;type:int(11);comment:'问题的ID'" `                // 问题的ID
 | 
			
		||||
	CategoryId    uint           `json:"category_id" gorm:"column:category_id;type:int(11);comment:'分类的ID'" `              // 分类的ID
 | 
			
		||||
	CategoryBasic *CategoryBasic `json:"category_basic" gorm:"foreignKey:id;references:category_id;comment:'关联分类的基础信息表'" ` // 关联分类的基础信息表
 | 
			
		||||
	ProblemId     uint           `json:"problem_id" gorm:"column:problem_id;type:int(11);comment:'问题的ID'" `   // 问题的ID
 | 
			
		||||
	CategoryId    uint           `json:"category_id" gorm:"column:category_id;type:int(11);comment:'分类的ID'" ` // 分类的ID
 | 
			
		||||
	CategoryBasic *CategoryBasic `json:"category_basic" gorm:"foreignKey:CategoryId;comment:'关联分类的基础信息表'" `   // 关联分类的基础信息表
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (table *ProblemCategory) TableName() string {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,14 +1,17 @@
 | 
			
		||||
package entity
 | 
			
		||||
 | 
			
		||||
// Submit 提交表
 | 
			
		||||
import "online_code/common/types"
 | 
			
		||||
 | 
			
		||||
// SubmitBasic 提交表
 | 
			
		||||
type SubmitBasic struct {
 | 
			
		||||
	Identity        string        `json:"identity" gorm:"column:identity;type:varchar(36);comment:'用户唯一标识'" `                      // 唯一标识
 | 
			
		||||
	ProblemIdentity string        `json:"problem_identity" gorm:"column:problem_identity;type:varchar(36);comment:'问题表的唯一标识'" `    // 问题表的唯一标识
 | 
			
		||||
	ProblemBasic    *ProblemBasic `json:"problem_basic" gorm:"foreignKey:identity;references:problem_identity;comment:'关联问题基础表'" ` // 关联问题基础表
 | 
			
		||||
	UserIdentity    string        `json:"user_identity" gorm:"column:user_identity;type:varchar(36);comment:'用户表的唯一标识'" `          // 用户表的唯一标识
 | 
			
		||||
	UserBasic       *UserBasic    `json:"user_basic" gorm:"foreignKey:identity;references:user_identity;comment:'联用户基础表'" `        // 关联用户基础表
 | 
			
		||||
	Path            string        `json:"path" gorm:"column:path;type:varchar(255);comment:'代码存放路径'" `                             // 代码存放路径
 | 
			
		||||
	Status          int           `json:"status" gorm:"column:status;type:tinyint(1);comment:'状态'" `                               // 【-1-待判断,1-答案正确,2-答案错误,3-运行超时,4-运行超内存, 5-编译错误】
 | 
			
		||||
	types.BaseDbModel
 | 
			
		||||
	Identity        string        `json:"identity" gorm:"column:identity;type:varchar(36);comment:'用户唯一标识'" `                   // 唯一标识
 | 
			
		||||
	ProblemIdentity string        `json:"problem_identity" gorm:"column:problem_identity;type:varchar(36);comment:'问题表的唯一标识'" ` // 问题表的唯一标识
 | 
			
		||||
	ProblemBasic    *ProblemBasic `json:"problem_basic" gorm:"foreignKey:ProblemIdentity;comment:'关联问题基础表'" `                   // 关联问题基础表
 | 
			
		||||
	UserIdentity    string        `json:"user_identity" gorm:"column:user_identity;type:varchar(36);comment:'用户表的唯一标识'" `       // 用户表的唯一标识
 | 
			
		||||
	UserBasic       *UserBasic    `json:"user_basic" gorm:"foreignKey:UserIdentity;comment:'联用户基础表'" `                          // 关联用户基础表
 | 
			
		||||
	Path            string        `json:"path" gorm:"column:path;type:varchar(255);comment:'代码存放路径'" `                          // 代码存放路径
 | 
			
		||||
	Status          int           `json:"status" gorm:"column:status;type:tinyint(1);comment:'状态'" `                            // 【-1-待判断,1-答案正确,2-答案错误,3-运行超时,4-运行超内存, 5-编译错误】
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (table *SubmitBasic) TableName() string {
 | 
			
		||||
 
 | 
			
		||||
@@ -5,8 +5,8 @@ import "online_code/common/types"
 | 
			
		||||
// TestCase 测试用例
 | 
			
		||||
type TestCase struct {
 | 
			
		||||
	types.BaseDbModel
 | 
			
		||||
	Identity        string `json:"identity" gorm:"column:identity;type:varchar(255);comment:'用户唯一标识''" `
 | 
			
		||||
	ProblemIdentity string `json:"problem_identity" gorm:"column:problem_identity;type:varchar(255);comment:'问题'" `
 | 
			
		||||
	Identity        string `json:"identity" gorm:"column:identity;type:varchar(36);comment:'测试用例唯一标识''" `
 | 
			
		||||
	ProblemIdentity string `json:"problem_identity" gorm:"column:problem_identity;type:varchar(36);comment:'问题'" `
 | 
			
		||||
	Input           string `json:"input" gorm:"column:input;type:text;" `
 | 
			
		||||
	Output          string `json:"output" gorm:"column:output;type:text;" `
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -13,8 +13,8 @@ func ProblemService() *problemService {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetList 获取题目列表
 | 
			
		||||
func (problemService) GetList(p param.GetProblemList) (records entity.Problem, count int64, err error) {
 | 
			
		||||
	sel := client.MySQL.Scopes(page(p.Current, p.Size))
 | 
			
		||||
func (problemService) GetList(p param.GetProblemList) (records entity.ProblemBasic, count int64, err error) {
 | 
			
		||||
	sel := client.MySQL.Scopes(page(p.Current, p.Size)).Preload("ProblemCategories").Preload("ProblemCategories.CategoryBasic")
 | 
			
		||||
 | 
			
		||||
	if p.Keyword != "" {
 | 
			
		||||
		sel.Where("title LIKE ? OR content like ?", "%"+p.Keyword+"%", "%"+p.Keyword+"%")
 | 
			
		||||
@@ -29,7 +29,7 @@ func (problemService) GetList(p param.GetProblemList) (records entity.Problem, c
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetProblemInfo 获取题目详情
 | 
			
		||||
func (problemService) GetProblemInfo(id int) (problem entity.Problem, err error) {
 | 
			
		||||
func (problemService) GetProblemInfo(id int) (problem entity.ProblemBasic, err error) {
 | 
			
		||||
	err = client.MySQL.Where("id = ?", id).Find(&problem).Error
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -3,6 +3,5 @@ package route
 | 
			
		||||
import "github.com/gin-gonic/gin"
 | 
			
		||||
 | 
			
		||||
func InitRoute(g *gin.RouterGroup) {
 | 
			
		||||
	api := g.Group("/api")
 | 
			
		||||
	problem(api.Group("/problem"))
 | 
			
		||||
	problem(g.Group("/problem"))
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user