Some checks failed
Build docker and publish / linux (1.24.5) (push) Failing after 25s
feat(admin): 新增工会管理功能 feat(activity): 添加活动管理相关服务 feat(user): 实现用户道具卡和积分管理 feat(guild): 新增工会成员管理功能 fix: 修复数据库连接配置 fix: 修正jwtoken导入路径 fix: 解决端口冲突问题 style: 统一代码格式和注释风格 style: 更新项目常量命名 docs: 添加项目框架和开发规范文档 docs: 更新接口文档注释 chore: 移除无用代码和文件 chore: 更新Makefile和配置文件 chore: 清理日志文件 test: 添加道具卡测试脚本
111 lines
3.1 KiB
Go
111 lines
3.1 KiB
Go
package banner
|
|
|
|
import (
|
|
"context"
|
|
|
|
"bindbox-game/internal/pkg/logger"
|
|
"bindbox-game/internal/repository/mysql"
|
|
"bindbox-game/internal/repository/mysql/dao"
|
|
"bindbox-game/internal/repository/mysql/model"
|
|
)
|
|
|
|
type Service interface {
|
|
Create(ctx context.Context, in CreateInput) (*model.Banner, error)
|
|
Modify(ctx context.Context, id int64, in ModifyInput) error
|
|
Delete(ctx context.Context, id int64) error
|
|
List(ctx context.Context, in ListInput) (items []*model.Banner, total int64, err error)
|
|
ListEnabled(ctx context.Context) ([]*model.Banner, error)
|
|
}
|
|
|
|
type service struct {
|
|
logger logger.CustomLogger
|
|
readDB *dao.Query
|
|
writeDB *dao.Query
|
|
}
|
|
|
|
func New(l logger.CustomLogger, db mysql.Repo) Service {
|
|
return &service{logger: l, readDB: dao.Use(db.GetDbR()), writeDB: dao.Use(db.GetDbW())}
|
|
}
|
|
|
|
type CreateInput struct {
|
|
Title string
|
|
ImageURL string
|
|
LinkURL string
|
|
Sort int32
|
|
Status int32
|
|
}
|
|
|
|
type ModifyInput struct {
|
|
Title *string
|
|
ImageURL *string
|
|
LinkURL *string
|
|
Sort *int32
|
|
Status *int32
|
|
}
|
|
|
|
type ListInput struct {
|
|
Status *int32
|
|
Page int
|
|
PageSize int
|
|
}
|
|
|
|
func (s *service) Create(ctx context.Context, in CreateInput) (*model.Banner, error) {
|
|
m := &model.Banner{Title: in.Title, ImageURL: in.ImageURL, LinkURL: in.LinkURL, Sort: in.Sort, Status: in.Status}
|
|
if err := s.writeDB.Banner.WithContext(ctx).Create(m); err != nil {
|
|
return nil, err
|
|
}
|
|
return m, nil
|
|
}
|
|
|
|
func (s *service) Modify(ctx context.Context, id int64, in ModifyInput) error {
|
|
updater := s.writeDB.Banner.WithContext(ctx).Where(s.writeDB.Banner.ID.Eq(id))
|
|
set := map[string]any{}
|
|
if in.Title != nil {
|
|
set["title"] = *in.Title
|
|
}
|
|
if in.ImageURL != nil {
|
|
set["image_url"] = *in.ImageURL
|
|
}
|
|
if in.LinkURL != nil {
|
|
set["link_url"] = *in.LinkURL
|
|
}
|
|
if in.Sort != nil {
|
|
set["sort"] = *in.Sort
|
|
}
|
|
if in.Status != nil {
|
|
set["status"] = *in.Status
|
|
}
|
|
if len(set) == 0 {
|
|
return nil
|
|
}
|
|
_, err := updater.Updates(set)
|
|
return err
|
|
}
|
|
|
|
func (s *service) Delete(ctx context.Context, id int64) error {
|
|
_, err := s.writeDB.Banner.WithContext(ctx).Where(s.writeDB.Banner.ID.Eq(id)).Delete()
|
|
return err
|
|
}
|
|
|
|
func (s *service) List(ctx context.Context, in ListInput) (items []*model.Banner, total int64, err error) {
|
|
if in.Page <= 0 {
|
|
in.Page = 1
|
|
}
|
|
if in.PageSize <= 0 {
|
|
in.PageSize = 20
|
|
}
|
|
q := s.readDB.Banner.WithContext(ctx).ReadDB()
|
|
if in.Status != nil {
|
|
q = q.Where(s.readDB.Banner.Status.Eq(*in.Status))
|
|
}
|
|
total, err = q.Count()
|
|
if err != nil {
|
|
return
|
|
}
|
|
items, err = q.Order(s.readDB.Banner.Sort.Asc()).Order(s.readDB.Banner.ID.Desc()).Limit(in.PageSize).Offset((in.Page-1)*in.PageSize).Find()
|
|
return
|
|
}
|
|
|
|
func (s *service) ListEnabled(ctx context.Context) ([]*model.Banner, error) {
|
|
return s.readDB.Banner.WithContext(ctx).ReadDB().Where(s.readDB.Banner.Status.Eq(1)).Order(s.readDB.Banner.Sort.Asc()).Order(s.readDB.Banner.ID.Desc()).Find()
|
|
} |