package service import ( "context" db "server/internal/db/sqlc" "server/internal/model/common" "server/internal/model/request" "server/internal/pkg/dberr" "server/internal/pkg/errs" ) type CategoryService struct { queries *db.Queries } func NewCategoryService(queries *db.Queries) *CategoryService { return &CategoryService{ queries: queries, } } func (s *CategoryService) ListPage(ctx context.Context, p *common.Pagination) ([]db.Category, int64, error) { params := db.ListCategoriesParams{ Limit: p.PageSize, Offset: (p.Page - 1) * p.PageSize, } total, err := s.queries.CountCategories(ctx) if err != nil { return nil, 0, err } list, err := s.queries.ListCategories(ctx, params) if err != nil { return nil, 0, err } return list, total, nil } func (s *CategoryService) ListAll(ctx context.Context) ([]db.Category, error) { return s.queries.ListAllCategories(ctx) } func (s *CategoryService) Create(ctx context.Context, req request.CreateCategoryRequest) error { params := db.CreateCategoryParams{ Name: req.Name, Code: req.Code, } err := s.queries.CreateCategory(ctx, params) return dberr.MapUniqueViolation(err, dberr.CategoryCodeKey, errs.ErrCategoryCodeAlreadyExists) } func (s *CategoryService) Update(ctx context.Context, id int32, req request.UpdateCategoryRequest) error { params := db.UpdateCategoryParams{ ID: id, Name: req.Name, Code: req.Code, } rows, err := s.queries.UpdateCategory(ctx, params) // 先判断数据条目是否存在 if err = dberr.MapRowsAffected(rows, err, errs.ErrCategoryNotFound); err != nil { // 再判断code是否重复 return dberr.MapUniqueViolation(err, dberr.CategoryCodeKey, errs.ErrCategoryCodeAlreadyExists) } return nil } func (s *CategoryService) Delete(ctx context.Context, id int32) error { rows, err := s.queries.DeleteCategory(ctx, id) return dberr.MapRowsAffected(rows, err, errs.ErrCategoryNotFound) }