package category import ( "context" "server/internal/dao" "server/internal/model" "server/internal/model/do" "server/internal/service" "server/utility/ecode" ) type sCategory struct { } func New() service.ICategory { return &sCategory{} } func init() { service.RegisterCategory(New()) } // List retrieves a paginated list of categories func (s *sCategory) List(ctx context.Context, in *model.CategoryListIn) (out *model.CategoryListOut, err error) { out = &model.CategoryListOut{} m := dao.Categories.Ctx(ctx) if in.Type != 0 { m = m.Where(dao.Categories.Columns().Type, in.Type) } if err = m.Page(in.Page, in.Size).ScanAndCount(&out.List, &out.Total, false); err != nil { return } return } func (s *sCategory) Create(ctx context.Context, in *model.CategoryAddIn) (out *model.CategoryCRUDOut, err error) { if in.Type != 1 && in.Type != 2 { return nil, ecode.Params.Sub("category_type_invalid") } exist, err := dao.Categories.Ctx(ctx). Where(dao.Categories.Columns().Name, in.Name). Exist() if err != nil { return nil, ecode.Fail.Sub("category_query_failed") } if exist { return nil, ecode.Params.Sub("category_exists") } if _, err := dao.Categories.Ctx(ctx).Data(do.Categories{ Name: in.Name, Type: in.Type, }).Insert(); err != nil { return nil, ecode.Fail.Sub("category_create_failed") } return &model.CategoryCRUDOut{ Success: true, }, nil } func (s *sCategory) Update(ctx context.Context, in *model.CategoryEditIn) (out *model.CategoryCRUDOut, err error) { if in.Type != 1 && in.Type != 2 { return nil, ecode.Params.Sub("category_type_invalid") } exist, err := dao.Categories.Ctx(ctx). WherePri(in.Id). Exist() if err != nil { return nil, ecode.Fail.Sub("category_query_failed") } if !exist { return nil, ecode.NotFound.Sub("category_not_found") } exist, err = dao.Categories.Ctx(ctx). Where(dao.Categories.Columns().Name, in.Name). Where("id != ?", in.Id). Exist() if err != nil { return nil, ecode.Fail.Sub("category_query_failed") } if exist { return nil, ecode.Params.Sub("category_exists") } // Update category _, err = dao.Categories.Ctx(ctx). WherePri(in.Id). Data(do.Categories{ Name: in.Name, Type: in.Type, }).Update() if err != nil { return nil, ecode.Fail.Sub("category_update_failed") } return &model.CategoryCRUDOut{ Success: true, }, nil } func (s *sCategory) Delete(ctx context.Context, in *model.CategoryDelIn) (out *model.CategoryCRUDOut, err error) { exist, err := dao.Categories.Ctx(ctx). WherePri(in.Id). Exist() if err != nil { return nil, ecode.Fail.Sub("category_query_failed") } if !exist { return nil, ecode.NotFound.Sub("category_not_found") } // Soft delete category _, err = dao.Categories.Ctx(ctx).WherePri(in.Id).Delete() if err != nil { return nil, ecode.Fail.Sub("category_delete_failed") } return &model.CategoryCRUDOut{ Success: true, }, nil }