/* * Batch Download API List * /batchDownload/manage/list - GET * /batchDownload/manage/config - POST 创建新配置 * /batchDownload/manage/description/{id} - POST 更新任务说明 * /batchDownload/manage/config/{id} - DELETE 删除配置 * /batchDownload/data/{id} - GET 获取指定ID的数据包下载地址 */ package controllers import ( "fmt" "fwh-toolbox-server/domain" "fwh-toolbox-server/services" "strconv" "github.com/gofiber/fiber/v2" "go.mongodb.org/mongo-driver/bson/primitive" "go.uber.org/zap" ) // 获取批量数据下载管理表 // /batchDownload/manage/list func GetBatchDownloadList(c *fiber.Ctx) error { pageInt, _ := strconv.Atoi(c.Query("pageNum", "1")) sizeInt, _ := strconv.Atoi(c.Query("pageSize", "20")) if pageInt <= 0 || sizeInt <= 0 { return Fail(c, "Invalid request para") } sn := c.Query("sn", "") progress := c.Query("progress", "") var p_sn *string = nil if sn != "" { p_sn = &sn } var p_progress *string = nil if progress != "" { p_progress = &progress } listPage, err := services.GetBatchDownloadManageList(uint(pageInt), uint(sizeInt), p_sn, p_progress) if err != nil { zap.L().Warn("Database read failed. (MongoDb)", zap.String("err", err.Error())) return Error(c, "Database read failed. (MongoDb)") } return Success(c, listPage) } // 创建一个批量数据下载管任务 // /batchDownload/manage/config func CreateBatchDownload(c *fiber.Ctx) error { var body domain.BatchDownloadConfigWrite if err := c.BodyParser(&body); err != nil { zap.L().Warn("Invalid request body", zap.String("err", err.Error())) return Fail(c, "Invalid request body") } if err := services.InsertBatchDownloadConfig(body); err != nil { zap.L().Warn("Database write failed. (MongoDb)", zap.String("err", err.Error())) return Error(c, "Database write failed. (MongoDb)") } return Success(c, body) } // 更新一个批量数据下载说明 // /batchDownload/manage/description/:id func UpdateBatchDownloadDescription(c *fiber.Ctx) error { id := c.Params("id") var body string if err := c.BodyParser(&body); err != nil { zap.L().Warn("Invalid request body", zap.String("err", err.Error())) return Fail(c, "Invalid request body") } objID, err := primitive.ObjectIDFromHex(id) if err != nil { zap.L().Warn("Invalid request para :id", zap.String("err", err.Error())) return Fail(c, "Invalid request para :id") } if err := services.UpdateBatchDownloadDescription(objID, body); err != nil { zap.L().Warn("Database write failed. (MongoDb)", zap.String("err", err.Error())) return Error(c, "Database write failed. (MongoDb)") } return Success(c, body) } // 删除一个批量数据下载数据 // /batchDownload/manage/config/:id func DeleteBatchDownload(c *fiber.Ctx) error { id := c.Params("id") objID, err := primitive.ObjectIDFromHex(id) if err != nil { zap.L().Warn("Invalid request para :id", zap.String("err", err.Error())) return Fail(c, "Invalid request para :id") } err = services.DeleteBatchDownloadConfig(objID) if err != nil { zap.L().Warn("Database delete failed. (MongoDb)", zap.String("err", err.Error())) return Error(c, "Database delete failed. (MongoDb)") } return NoContent(c) } // 获取指定ID的批量数据下载数据包地址 // /batchDownload/data/:id func GetBatchDownloadData(c *fiber.Ctx) error { id := c.Params("id") objID, err := primitive.ObjectIDFromHex(id) if err != nil { zap.L().Warn("Invalid request para :id", zap.String("err", err.Error())) return Fail(c, "Invalid request para :id") } c.Set("Content-Type", "application/zip") c.Set("Content-Disposition", fmt.Sprintf("attachment; filename=\"BatchDownload_%s.zip\"", id)) data, err := services.GetBatchDownloadData(objID) if err != nil { zap.L().Warn("Database read failed. (MongoDb)", zap.String("err", err.Error())) return Error(c, "Database read failed. (MongoDb)") } return Success(c, data) }