增加日志
This commit is contained in:
@@ -123,14 +123,14 @@ func (c *Controller) CreateDevice(ctx *gin.Context) {
|
||||
const actionType = "创建设备"
|
||||
var req CreateDeviceRequest
|
||||
if err := ctx.ShouldBindJSON(&req); err != nil {
|
||||
c.logger.Errorf("创建设备: 参数绑定失败: %v", err)
|
||||
c.logger.Errorf("%s: 参数绑定失败: %v", actionType, err)
|
||||
controller.SendErrorWithAudit(ctx, controller.CodeBadRequest, "无效的请求体: "+err.Error(), actionType, "请求体绑定失败", req)
|
||||
return
|
||||
}
|
||||
|
||||
propertiesJSON, err := json.Marshal(req.Properties)
|
||||
if err != nil {
|
||||
c.logger.Errorf("创建设备: 序列化属性失败: %v", err)
|
||||
c.logger.Errorf("%s: 序列化属性失败: %v", actionType, err)
|
||||
controller.SendErrorWithAudit(ctx, controller.CodeBadRequest, "属性字段格式错误", actionType, "属性序列化失败", req.Properties)
|
||||
return
|
||||
}
|
||||
@@ -146,24 +146,25 @@ func (c *Controller) CreateDevice(ctx *gin.Context) {
|
||||
|
||||
// 在创建设备前进行自检
|
||||
if !device.SelfCheck() {
|
||||
c.logger.Errorf("创建设备: 设备属性自检失败: %v", device)
|
||||
c.logger.Errorf("%s: 设备属性自检失败: %v", actionType, device)
|
||||
controller.SendErrorWithAudit(ctx, controller.CodeBadRequest, "设备属性不符合要求", actionType, "设备属性自检失败", device)
|
||||
return
|
||||
}
|
||||
|
||||
if err := c.repo.Create(device); err != nil {
|
||||
c.logger.Errorf("创建设备: 数据库操作失败: %v", err)
|
||||
c.logger.Errorf("%s: 数据库操作失败: %v", actionType, err)
|
||||
controller.SendErrorWithAudit(ctx, controller.CodeInternalError, "创建设备失败: "+err.Error(), actionType, "数据库创建失败", device)
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := newDeviceResponse(device)
|
||||
if err != nil {
|
||||
c.logger.Errorf("创建设备: 序列化响应失败: %v", err)
|
||||
c.logger.Errorf("%s: 序列化响应失败: %v", actionType, err)
|
||||
controller.SendErrorWithAudit(ctx, controller.CodeInternalError, "设备创建成功,但响应生成失败", actionType, "响应序列化失败", device)
|
||||
return
|
||||
}
|
||||
|
||||
c.logger.Infof("%s: 设备创建成功, ID: %d", actionType, device.ID)
|
||||
controller.SendSuccessWithAudit(ctx, controller.CodeCreated, "设备创建成功", resp, actionType, "设备创建成功", resp)
|
||||
}
|
||||
|
||||
@@ -179,28 +180,37 @@ func (c *Controller) GetDevice(ctx *gin.Context) {
|
||||
const actionType = "获取设备"
|
||||
deviceID := ctx.Param("id")
|
||||
|
||||
if deviceID == "" {
|
||||
c.logger.Errorf("%s: 设备ID为空", actionType)
|
||||
controller.SendErrorWithAudit(ctx, controller.CodeBadRequest, "设备ID不能为空", actionType, "设备ID为空", nil)
|
||||
return
|
||||
}
|
||||
|
||||
device, err := c.repo.FindByIDString(deviceID)
|
||||
if err != nil {
|
||||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
c.logger.Warnf("%s: 设备不存在, ID: %s", actionType, deviceID)
|
||||
controller.SendErrorWithAudit(ctx, controller.CodeNotFound, "设备未找到", actionType, "设备不存在", deviceID)
|
||||
return
|
||||
}
|
||||
if strings.Contains(err.Error(), "无效的设备ID格式") {
|
||||
c.logger.Errorf("%s: 设备ID格式错误: %v, ID: %s", actionType, err, deviceID)
|
||||
controller.SendErrorWithAudit(ctx, controller.CodeBadRequest, err.Error(), actionType, "设备ID格式错误", deviceID)
|
||||
return
|
||||
}
|
||||
c.logger.Errorf("获取设备: 数据库操作失败: %v", err)
|
||||
c.logger.Errorf("%s: 数据库查询失败: %v, ID: %s", actionType, err, deviceID)
|
||||
controller.SendErrorWithAudit(ctx, controller.CodeInternalError, "获取设备信息失败: "+err.Error(), actionType, "数据库查询失败", deviceID)
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := newDeviceResponse(device)
|
||||
if err != nil {
|
||||
c.logger.Errorf("获取设备: 序列化响应失败: %v", err)
|
||||
c.logger.Errorf("%s: 序列化响应失败: %v, Device: %+v", actionType, err, device)
|
||||
controller.SendErrorWithAudit(ctx, controller.CodeInternalError, "获取设备信息失败: 内部数据格式错误", actionType, "响应序列化失败", device)
|
||||
return
|
||||
}
|
||||
|
||||
c.logger.Infof("%s: 获取设备信息成功, ID: %d", actionType, device.ID)
|
||||
controller.SendSuccessWithAudit(ctx, controller.CodeSuccess, "获取设备信息成功", resp, actionType, "获取设备信息成功", resp)
|
||||
}
|
||||
|
||||
@@ -215,18 +225,19 @@ func (c *Controller) ListDevices(ctx *gin.Context) {
|
||||
const actionType = "获取设备列表"
|
||||
devices, err := c.repo.ListAll()
|
||||
if err != nil {
|
||||
c.logger.Errorf("获取设备列表: 数据库操作失败: %v", err)
|
||||
c.logger.Errorf("%s: 数据库查询失败: %v", actionType, err)
|
||||
controller.SendErrorWithAudit(ctx, controller.CodeInternalError, "获取设备列表失败: "+err.Error(), actionType, "数据库查询失败", nil)
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := newListDeviceResponse(devices)
|
||||
if err != nil {
|
||||
c.logger.Errorf("获取设备列表: 序列化响应失败: %v", err)
|
||||
c.logger.Errorf("%s: 序列化响应失败: %v, Devices: %+v", actionType, err, devices)
|
||||
controller.SendErrorWithAudit(ctx, controller.CodeInternalError, "获取设备列表失败: 内部数据格式错误", actionType, "响应序列化失败", devices)
|
||||
return
|
||||
}
|
||||
|
||||
c.logger.Infof("%s: 获取设备列表成功, 数量: %d", actionType, len(devices))
|
||||
controller.SendSuccessWithAudit(ctx, controller.CodeSuccess, "获取设备列表成功", resp, actionType, "获取设备列表成功", resp)
|
||||
}
|
||||
|
||||
@@ -248,14 +259,16 @@ func (c *Controller) UpdateDevice(ctx *gin.Context) {
|
||||
existingDevice, err := c.repo.FindByIDString(deviceID)
|
||||
if err != nil {
|
||||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
c.logger.Warnf("%s: 设备不存在, ID: %s", actionType, deviceID)
|
||||
controller.SendErrorWithAudit(ctx, controller.CodeNotFound, "设备未找到", actionType, "设备不存在", deviceID)
|
||||
return
|
||||
}
|
||||
if strings.Contains(err.Error(), "无效的设备ID格式") {
|
||||
c.logger.Errorf("%s: 设备ID格式错误: %v, ID: %s", actionType, err, deviceID)
|
||||
controller.SendErrorWithAudit(ctx, controller.CodeBadRequest, err.Error(), actionType, "设备ID格式错误", deviceID)
|
||||
return
|
||||
}
|
||||
c.logger.Errorf("更新设备: 查找设备失败: %v", err)
|
||||
c.logger.Errorf("%s: 数据库查询失败: %v, ID: %s", actionType, err, deviceID)
|
||||
controller.SendErrorWithAudit(ctx, controller.CodeInternalError, "更新设备失败: "+err.Error(), actionType, "数据库查询失败", deviceID)
|
||||
return
|
||||
}
|
||||
@@ -263,14 +276,14 @@ func (c *Controller) UpdateDevice(ctx *gin.Context) {
|
||||
// 2. 绑定请求参数
|
||||
var req UpdateDeviceRequest
|
||||
if err := ctx.ShouldBindJSON(&req); err != nil {
|
||||
c.logger.Errorf("更新设备: 参数绑定失败: %v", err)
|
||||
c.logger.Errorf("%s: 参数绑定失败: %v", actionType, err)
|
||||
controller.SendErrorWithAudit(ctx, controller.CodeBadRequest, "无效的请求体: "+err.Error(), actionType, "请求体绑定失败", req)
|
||||
return
|
||||
}
|
||||
|
||||
propertiesJSON, err := json.Marshal(req.Properties)
|
||||
if err != nil {
|
||||
c.logger.Errorf("更新设备: 序列化属性失败: %v", err)
|
||||
c.logger.Errorf("%s: 序列化属性失败: %v", actionType, err)
|
||||
controller.SendErrorWithAudit(ctx, controller.CodeBadRequest, "属性字段格式错误", actionType, "属性序列化失败", req.Properties)
|
||||
return
|
||||
}
|
||||
@@ -285,25 +298,26 @@ func (c *Controller) UpdateDevice(ctx *gin.Context) {
|
||||
|
||||
// 在更新设备前进行自检
|
||||
if !existingDevice.SelfCheck() {
|
||||
c.logger.Errorf("更新设备: 设备属性自检失败: %v", existingDevice)
|
||||
c.logger.Errorf("%s: 设备属性自检失败: %v", actionType, existingDevice)
|
||||
controller.SendErrorWithAudit(ctx, controller.CodeBadRequest, "设备属性不符合要求", actionType, "设备属性自检失败", existingDevice)
|
||||
return
|
||||
}
|
||||
|
||||
// 4. 将修改后的 existingDevice 对象保存回数据库
|
||||
if err := c.repo.Update(existingDevice); err != nil {
|
||||
c.logger.Errorf("更新设备: 数据库操作失败: %v", err)
|
||||
c.logger.Errorf("%s: 数据库更新失败: %v, Device: %+v", actionType, err, existingDevice)
|
||||
controller.SendErrorWithAudit(ctx, controller.CodeInternalError, "更新设备失败: "+err.Error(), actionType, "数据库更新失败", existingDevice)
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := newDeviceResponse(existingDevice)
|
||||
if err != nil {
|
||||
c.logger.Errorf("更新设备: 序列化响应失败: %v", err)
|
||||
c.logger.Errorf("%s: 序列化响应失败: %v, Device: %+v", actionType, err, existingDevice)
|
||||
controller.SendErrorWithAudit(ctx, controller.CodeInternalError, "设备更新成功,但响应生成失败", actionType, "响应序列化失败", existingDevice)
|
||||
return
|
||||
}
|
||||
|
||||
c.logger.Infof("%s: 设备更新成功, ID: %d", actionType, existingDevice.ID)
|
||||
controller.SendSuccessWithAudit(ctx, controller.CodeSuccess, "设备更新成功", resp, actionType, "设备更新成功", resp)
|
||||
}
|
||||
|
||||
@@ -322,15 +336,30 @@ func (c *Controller) DeleteDevice(ctx *gin.Context) {
|
||||
// 我们需要先将字符串ID转换为uint,因为Delete方法需要uint类型
|
||||
idUint, err := strconv.ParseUint(deviceID, 10, 64)
|
||||
if err != nil {
|
||||
c.logger.Errorf("%s: 设备ID格式错误: %v, ID: %s", actionType, err, deviceID)
|
||||
controller.SendErrorWithAudit(ctx, controller.CodeBadRequest, "无效的设备ID格式", actionType, "设备ID格式错误", deviceID)
|
||||
return
|
||||
}
|
||||
|
||||
// 检查设备是否存在(可选,但通常在删除前会检查)
|
||||
_, err = c.repo.FindByIDString(deviceID)
|
||||
if err != nil {
|
||||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
c.logger.Warnf("%s: 设备不存在, ID: %s", actionType, deviceID)
|
||||
controller.SendErrorWithAudit(ctx, controller.CodeNotFound, "设备不存在", actionType, "设备不存在", deviceID)
|
||||
return
|
||||
}
|
||||
c.logger.Errorf("%s: 查找设备失败: %v, ID: %s", actionType, err, deviceID)
|
||||
controller.SendErrorWithAudit(ctx, controller.CodeInternalError, "删除设备失败: 查找设备时发生内部错误", actionType, "数据库查询失败", deviceID)
|
||||
return
|
||||
}
|
||||
|
||||
if err := c.repo.Delete(uint(idUint)); err != nil {
|
||||
c.logger.Errorf("删除设备: 数据库操作失败: %v", err)
|
||||
c.logger.Errorf("%s: 数据库删除失败: %v, ID: %d", actionType, err, idUint)
|
||||
controller.SendErrorWithAudit(ctx, controller.CodeInternalError, "删除设备失败: "+err.Error(), actionType, "数据库删除失败", deviceID)
|
||||
return
|
||||
}
|
||||
|
||||
c.logger.Infof("%s: 设备删除成功, ID: %d", actionType, idUint)
|
||||
controller.SendSuccessWithAudit(ctx, controller.CodeSuccess, "设备删除成功", nil, actionType, "设备删除成功", deviceID)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user