Explorar o código

fix: 统一任务状态定义,筹备中任务在列表中可见

- 去掉草稿状态,TaskStatusPrepare 从4改为0
- 首页/大厅/任务列表/详情接口查询条件使用状态常量
- 筹备中任务包含在列表查询结果中
urban hai 2 semanas
pai
achega
f2d794edf5
Modificáronse 2 ficheiros con 18 adicións e 10 borrados
  1. 9 9
      apis/daytask/home.go
  2. 9 1
      commons/model/entity/dt_task.go

+ 9 - 9
apis/daytask/home.go

@@ -41,11 +41,11 @@ func (s *Server) HomeIndex(c *gin.Context) {
 	// 获取推荐任务
 	recommendTasks := make([]*entity.DtTask, 0)
 	// 尝试使用 is_recommend 字段,如果字段不存在则降级处理
-	if err := db.Model(&entity.DtTask{}).Where("status = ? AND is_recommend = ?", 1, 1).
+	if err := db.Model(&entity.DtTask{}).Where("status IN (?) AND is_recommend = ?", []int8{entity.TaskStatusOnline, entity.TaskStatusPrepare}, 1).
 		Order("sort DESC, id DESC").Limit(10).Find(&recommendTasks).Error; err != nil {
 		if isColumnNotExistError(err) {
 			// 字段不存在,使用降级查询(不筛选推荐)
-			db.Model(&entity.DtTask{}).Where("status = ?", 1).
+			db.Model(&entity.DtTask{}).Where("status IN (?)", []int8{entity.TaskStatusOnline, entity.TaskStatusPrepare}).
 				Order("sort DESC, id DESC").Limit(10).Find(&recommendTasks)
 		}
 	}
@@ -53,11 +53,11 @@ func (s *Server) HomeIndex(c *gin.Context) {
 	// 获取普通任务
 	normalTasks := make([]*entity.DtTask, 0)
 	// 尝试使用 is_top 字段,如果字段不存在则降级处理
-	if err := db.Model(&entity.DtTask{}).Where("status = ? AND remain_count > 0", 1).
+	if err := db.Model(&entity.DtTask{}).Where("status IN (?) AND remain_count > 0", []int8{entity.TaskStatusOnline, entity.TaskStatusPrepare}).
 		Order("is_top DESC, created_at DESC").Limit(20).Find(&normalTasks).Error; err != nil {
 		if isColumnNotExistError(err) {
 			// 字段不存在,使用降级查询(不按置顶排序)
-			db.Model(&entity.DtTask{}).Where("status = ? AND remain_count > 0", 1).
+			db.Model(&entity.DtTask{}).Where("status IN (?) AND remain_count > 0", []int8{entity.TaskStatusOnline, entity.TaskStatusPrepare}).
 				Order("created_at DESC").Limit(20).Find(&normalTasks)
 		}
 	}
@@ -112,13 +112,13 @@ func (s *Server) HomeHall(c *gin.Context) {
 
 	tasks := make([]*entity.DtTask, 0)
 	query := db.Model(&entity.DtTask{}).
-		Where("status = ? AND remain_count > 0", 1)
+		Where("status IN (?) AND remain_count > 0", []int8{entity.TaskStatusOnline, entity.TaskStatusPrepare})
 
 	query.Count(&paging.Total)
 	paging.Computer()
 
 	// 尝试使用 is_top 和 is_recommend 字段,如果字段不存在则降级处理
-	fallbackQuery := db.Model(&entity.DtTask{}).Where("status = ? AND remain_count > 0", 1)
+	fallbackQuery := db.Model(&entity.DtTask{}).Where("status IN (?) AND remain_count > 0", []int8{entity.TaskStatusOnline, entity.TaskStatusPrepare})
 	if err := query.Order("is_top DESC, is_recommend DESC, created_at DESC").
 		Offset(int(paging.Start)).
 		Limit(int(paging.Size)).
@@ -196,7 +196,7 @@ func (s *Server) TaskList(c *gin.Context) {
 	}
 
 	query := db.Model(&entity.DtTask{}).
-		Where("status = ? AND remain_count > 0", 1)
+		Where("status IN (?) AND remain_count > 0", []int8{entity.TaskStatusOnline, entity.TaskStatusPrepare})
 
 	if categoryId > 0 {
 		query = query.Where("category_id = ?", categoryId)
@@ -210,7 +210,7 @@ func (s *Server) TaskList(c *gin.Context) {
 
 	tasks := make([]*entity.DtTask, 0)
 	// 尝试使用 is_top 和 is_recommend 字段,如果字段不存在则降级处理
-	fallbackQuery := db.Model(&entity.DtTask{}).Where("status = ? AND remain_count > 0", 1)
+	fallbackQuery := db.Model(&entity.DtTask{}).Where("status IN (?) AND remain_count > 0", []int8{entity.TaskStatusOnline, entity.TaskStatusPrepare})
 	if categoryId > 0 {
 		fallbackQuery = fallbackQuery.Where("category_id = ?", categoryId)
 	}
@@ -277,7 +277,7 @@ func (s *Server) TaskDetail(c *gin.Context) {
 
 	// 获取任务
 	task := &entity.DtTask{}
-	if err := db.Where("id = ? AND status = ?", taskId, 1).First(task).Error; err != nil {
+	if err := db.Where("id = ? AND status IN (?)", taskId, []int8{entity.TaskStatusOnline, entity.TaskStatusPrepare}).First(task).Error; err != nil {
 		ctx.Fail("task_not_found")
 		return
 	}

+ 9 - 1
commons/model/entity/dt_task.go

@@ -28,10 +28,18 @@ type DtTask struct {
 	RequirePhone    int8   `json:"requirePhone" gorm:"default:0;comment:需要手机认证: 0=否 1=是"`
 	RequireRealname int8   `json:"requireRealname" gorm:"default:0;comment:需要实名认证: 0=否 1=是"`
 	RequireIdcard   int8   `json:"requireIdcard" gorm:"default:0;comment:需要身份认证: 0=否 1=是"`
-	Status            int8    `json:"status" gorm:"default:0;index:idx_status;comment:状态: 0=草稿 1=上架 2=下架 3=已结束"`
+	Status            int8    `json:"status" gorm:"default:0;index:idx_status;comment:状态: 0=筹备中 1=上架 2=下架 3=已结束"`
 	Remark            string  `json:"remark" gorm:"type:varchar(255);comment:备注"`
 }
 
+// 任务状态常量
+const (
+	TaskStatusPrepare = 0 // 筹备中
+	TaskStatusOnline  = 1 // 上架
+	TaskStatusOffline = 2 // 下架
+	TaskStatusEnded   = 3 // 已结束
+)
+
 func (*DtTask) TableName() string {
 	return "dt_task"
 }