package category import ( "context" "database/sql" "time" "photography-backend/internal/model" "photography-backend/internal/svc" "photography-backend/internal/types" "photography-backend/pkg/errorx" "github.com/zeromicro/go-zero/core/logx" ) type UpdateCategoryLogic struct { logx.Logger ctx context.Context svcCtx *svc.ServiceContext } // 更新分类 func NewUpdateCategoryLogic(ctx context.Context, svcCtx *svc.ServiceContext) *UpdateCategoryLogic { return &UpdateCategoryLogic{ Logger: logx.WithContext(ctx), ctx: ctx, svcCtx: svcCtx, } } func (l *UpdateCategoryLogic) UpdateCategory(req *types.UpdateCategoryRequest) (resp *types.UpdateCategoryResponse, err error) { // 1. 参数验证 if req.Name == "" && req.Description == "" { return nil, errorx.NewWithCode(errorx.InvalidParameter) } // 2. 查询分类是否存在 category, err := l.svcCtx.CategoryModel.FindOne(l.ctx, req.Id) if err != nil { if err == model.ErrNotFound { return nil, errorx.NewWithCode(errorx.CategoryNotFound) } logx.Errorf("查询分类失败: %v", err) return nil, errorx.NewWithCode(errorx.ServerError) } // 3. 检查名称是否重复 (如果要更新名称) if req.Name != "" && req.Name != category.Name { existingCategory, err := l.svcCtx.CategoryModel.FindOneByName(l.ctx, req.Name) if err != nil && err != model.ErrNotFound { logx.Errorf("查询分类名称失败: %v", err) return nil, errorx.NewWithCode(errorx.ServerError) } if existingCategory != nil { return nil, errorx.NewWithCode(errorx.CategoryExists) } } // 4. 更新分类信息 if req.Name != "" { category.Name = req.Name } if req.Description != "" { category.Description = sql.NullString{String: req.Description, Valid: true} } category.UpdatedAt = time.Now() // 5. 保存到数据库 err = l.svcCtx.CategoryModel.Update(l.ctx, category) if err != nil { logx.Errorf("更新分类失败: %v", err) return nil, errorx.NewWithCode(errorx.ServerError) } // 6. 构造响应 return &types.UpdateCategoryResponse{ BaseResponse: types.BaseResponse{ Code: errorx.Success, Message: "分类更新成功", }, Data: types.Category{ Id: category.Id, Name: category.Name, Description: category.Description.String, CreatedAt: category.CreatedAt.Unix(), UpdatedAt: category.UpdatedAt.Unix(), }, }, nil }