gorm wire

This commit is contained in:
2025-05-07 14:12:53 +08:00
parent 461531c308
commit 68606c76f9
111 changed files with 1726 additions and 5809 deletions

View File

@@ -0,0 +1,30 @@
package service
import (
"management/internal/erpserver/repository"
"management/internal/pkg/redis"
"management/internal/pkg/session"
"github.com/drhin/logger"
)
type Service struct {
Log *logger.Logger
Tx repository.Transaction
Session session.Session
Redis redis.Cache
}
func NewService(
log *logger.Logger,
tx repository.Transaction,
session session.Session,
redis redis.Cache,
) *Service {
return &Service{
Log: log,
Tx: tx,
Session: session,
Redis: redis,
}
}

View File

@@ -8,13 +8,11 @@ import (
type captchaService struct{}
var _ v1.CaptchaService = (*captchaService)(nil)
func NewCaptchaService() *captchaService {
func NewCaptchaService() v1.CaptchaService {
return &captchaService{}
}
var captchaStore base64Captcha.Store = base64Captcha.DefaultMemStore
var captchaStore = base64Captcha.DefaultMemStore
func (b *captchaService) Generate(height int, width int, length int, maxSkew float64, dotCount int) (id, b64s, answer string, err error) {
driver := base64Captcha.NewDriverDigit(height, width, length, maxSkew, dotCount)

View File

@@ -21,6 +21,9 @@ type ConfigService interface {
Get(ctx context.Context, id int32) (*system.Config, error)
List(ctx context.Context, q dto.SearchDto) ([]*system.Config, int64, error)
Pear(ctx context.Context) (*dto.PearConfig, error)
RefreshCache(ctx context.Context, key string) error
ResetPear(ctx context.Context) error
}
type UserService interface {

View File

@@ -5,18 +5,19 @@ import (
"management/internal/erpserver/model/dto"
"management/internal/erpserver/model/system"
"management/internal/erpserver/service"
v1 "management/internal/erpserver/service/v1"
)
type auditLogService struct {
*service.Service
repo system.AuditLogRepository
}
var _ v1.AuditLogService = (*auditLogService)(nil)
func NewAuditLogService(repo system.AuditLogRepository) *auditLogService {
func NewAuditLogService(service *service.Service, repo system.AuditLogRepository) v1.AuditLogService {
return &auditLogService{
repo: repo,
Service: service,
repo: repo,
}
}

View File

@@ -3,27 +3,28 @@ package system
import (
"context"
"encoding/json"
"errors"
"time"
"management/internal/erpserver/model/dto"
"management/internal/erpserver/model/system"
"management/internal/erpserver/service"
v1 "management/internal/erpserver/service/v1"
"management/internal/pkg/know"
"management/internal/pkg/know/pearadmin"
"management/internal/pkg/redis"
"gorm.io/gorm"
)
type configService struct {
repo system.ConfigRepository
redis redis.RedisCache
*service.Service
repo system.ConfigRepository
}
var _ v1.ConfigService = (*configService)(nil)
func NewConfigService(repo system.ConfigRepository, redis redis.RedisCache) *configService {
func NewConfigService(service *service.Service, repo system.ConfigRepository) v1.ConfigService {
return &configService{
repo: repo,
redis: redis,
Service: service,
repo: repo,
}
}
@@ -46,7 +47,7 @@ func (s *configService) List(ctx context.Context, q dto.SearchDto) ([]*system.Co
func (s *configService) Pear(ctx context.Context) (*dto.PearConfig, error) {
// 判断redis是否存储
key := know.GetManageKey(ctx, know.PearAdmin)
bs, err := s.redis.GetBytes(ctx, key)
bs, err := s.Redis.GetBytes(ctx, key)
if err == nil {
var res *dto.PearConfig
if err := json.Unmarshal(bs, &res); err == nil {
@@ -60,10 +61,48 @@ func (s *configService) Pear(ctx context.Context) (*dto.PearConfig, error) {
}
var pear dto.PearConfig
if err := json.Unmarshal(conf.Value, &pear); err != nil {
if err := json.Unmarshal([]byte(conf.Value), &pear); err != nil {
return nil, err
}
_ = s.redis.Set(ctx, key, conf.Value, time.Hour*6)
_ = s.Redis.Set(ctx, key, conf.Value, time.Hour*6)
return &pear, nil
}
func (s *configService) RefreshCache(ctx context.Context, key string) error {
return s.Redis.Del(ctx, key)
}
func (s *configService) ResetPear(ctx context.Context) error {
b, err := json.Marshal(pearadmin.PearJson)
if err != nil {
return err
}
conf, err := s.repo.GetByKey(ctx, pearadmin.PearKey)
if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
return err
}
if errors.Is(err, gorm.ErrRecordNotFound) {
// create
conf = &system.Config{
Key: pearadmin.PearKey,
Value: string(b),
}
err = s.Create(ctx, conf)
if err != nil {
return err
}
} else {
// update
conf.Value = string(b)
conf.UpdatedAt = time.Now()
err = s.Update(ctx, conf)
if err != nil {
return err
}
}
return nil
}

View File

@@ -12,22 +12,22 @@ import (
"management/internal/erpserver/model/form"
"management/internal/erpserver/model/system"
"management/internal/erpserver/model/view"
"management/internal/erpserver/service"
v1 "management/internal/erpserver/service/v1"
"management/internal/pkg/convertor"
"management/internal/pkg/database"
"management/internal/pkg/know"
"management/internal/pkg/redis"
)
type departmentService struct {
*service.Service
repo system.DepartmentRepository
}
var _ v1.DepartmentService = (*departmentService)(nil)
func NewDepartmentService(repo system.DepartmentRepository) *departmentService {
func NewDepartmentService(service *service.Service, repo system.DepartmentRepository) v1.DepartmentService {
return &departmentService{
repo: repo,
Service: service,
repo: repo,
}
}
@@ -108,7 +108,7 @@ func (s *departmentService) Get(ctx context.Context, id int32) (*system.Departme
func (s *departmentService) All(ctx context.Context) ([]*system.Department, error) {
key := know.GetManageKey(ctx, know.AllDepartments)
bs, err := redis.GetBytes(ctx, key)
bs, err := s.Redis.GetBytes(ctx, key)
if err == nil {
var res []*system.Department
if err := json.Unmarshal(bs, &res); err == nil {
@@ -126,7 +126,7 @@ func (s *departmentService) All(ctx context.Context) ([]*system.Department, erro
return nil, err
}
_ = redis.Set(ctx, key, bs, time.Hour*6)
_ = s.Redis.Set(ctx, key, bs, time.Hour*6)
return res, nil
}
@@ -146,7 +146,7 @@ func (s *departmentService) RefreshCache(ctx context.Context) error {
return err
}
_ = redis.Set(ctx, key, b, time.Hour*6)
_ = s.Redis.Set(ctx, key, b, time.Hour*6)
return nil
}

View File

@@ -6,18 +6,19 @@ import (
"management/internal/erpserver/model/dto"
"management/internal/erpserver/model/system"
"management/internal/erpserver/service"
v1 "management/internal/erpserver/service/v1"
)
type loginLogService struct {
*service.Service
repo system.LoginLogRepository
}
var _ v1.LoginLogService = (*loginLogService)(nil)
func NewLoginLogService(repo system.LoginLogRepository) *loginLogService {
func NewLoginLogService(service *service.Service, repo system.LoginLogRepository) v1.LoginLogService {
return &loginLogService{
repo: repo,
Service: service,
repo: repo,
}
}

View File

@@ -10,29 +10,29 @@ import (
"management/internal/erpserver/model/dto"
"management/internal/erpserver/model/system"
"management/internal/erpserver/model/view"
"management/internal/erpserver/repository"
"management/internal/erpserver/service"
v1 "management/internal/erpserver/service/v1"
"management/internal/pkg/know"
"management/internal/pkg/redis"
)
type menuService struct {
redis redis.RedisCache
store repository.Store
repo system.MenuRepository
rolesvc v1.RoleService
rolemenusvc v1.RoleMenuService
*service.Service
repo system.MenuRepository
roleService v1.RoleService
roleMenuService v1.RoleMenuService
}
var _ v1.MenuService = (*menuService)(nil)
func NewMenuService(redis redis.RedisCache, store repository.Store, repo system.MenuRepository, rolesvc v1.RoleService, rolemenusvc v1.RoleMenuService) *menuService {
func NewMenuService(
service *service.Service,
repo system.MenuRepository,
roleService v1.RoleService,
roleMenuService v1.RoleMenuService,
) v1.MenuService {
return &menuService{
redis: redis,
store: store,
repo: repo,
rolesvc: rolesvc,
rolemenusvc: rolemenusvc,
Service: service,
repo: repo,
roleService: roleService,
roleMenuService: roleMenuService,
}
}
@@ -54,7 +54,7 @@ func (s *menuService) GetByUrl(ctx context.Context, url string) (*system.Menu, e
func (s *menuService) All(ctx context.Context) ([]*system.Menu, error) {
key := know.GetManageKey(ctx, know.AllMenus)
b, err := s.redis.GetBytes(ctx, key)
b, err := s.Redis.GetBytes(ctx, key)
if err == nil {
var res []*system.Menu
if err := json.Unmarshal(b, &res); err == nil {
@@ -72,7 +72,7 @@ func (s *menuService) All(ctx context.Context) ([]*system.Menu, error) {
return nil, err
}
_ = s.redis.Set(ctx, key, b, time.Hour*6)
_ = s.Redis.Set(ctx, key, b, time.Hour*6)
return res, nil
}
@@ -87,7 +87,7 @@ func (s *menuService) ListMenuTree(ctx context.Context) ([]*view.MenuTree, error
func (s *menuService) ListByRoleID(ctx context.Context, roleID int32) ([]*dto.OwnerMenuDto, error) {
key := know.GetManageKey(ctx, know.OwnerMenus, roleID)
bs, err := s.redis.GetBytes(ctx, key)
bs, err := s.Redis.GetBytes(ctx, key)
if err == nil {
var res []*dto.OwnerMenuDto
if err := json.Unmarshal(bs, &res); err == nil {
@@ -111,13 +111,13 @@ func (s *menuService) SetListByRoleID(ctx context.Context, roleID int32) ([]*dto
return nil, err
}
_ = s.redis.Set(ctx, key, b, time.Hour*6)
_ = s.Redis.Set(ctx, key, b, time.Hour*6)
return res, nil
}
func (s *menuService) ListByRoleIDToMap(ctx context.Context, roleID int32) (map[string]*dto.OwnerMenuDto, error) {
key := know.GetManageKey(ctx, know.OwnerMenusMap, roleID)
bs, err := s.redis.GetBytes(ctx, key)
bs, err := s.Redis.GetBytes(ctx, key)
if err == nil {
var res map[string]*dto.OwnerMenuDto
if err := json.Unmarshal(bs, &res); err == nil {
@@ -141,13 +141,13 @@ func (s *menuService) SetListByRoleIDToMap(ctx context.Context, roleID int32) (m
return nil, err
}
_ = s.redis.Set(ctx, key, b, time.Hour*6)
_ = s.Redis.Set(ctx, key, b, time.Hour*6)
return res, nil
}
func (s *menuService) OwerMenus(ctx context.Context, roleID int32) ([]*dto.MenuUIDto, error) {
key := know.GetManageKey(ctx, know.AdminMenus, roleID)
bs, err := s.redis.GetBytes(ctx, key)
bs, err := s.Redis.GetBytes(ctx, key)
if err == nil {
var res []*dto.MenuUIDto
if err := json.Unmarshal(bs, &res); err == nil {
@@ -172,7 +172,7 @@ func (s *menuService) SetOwerMenus(ctx context.Context, roleID int32) ([]*dto.Me
return nil, err
}
_ = s.redis.Set(ctx, key, b, time.Hour*6)
_ = s.Redis.Set(ctx, key, b, time.Hour*6)
return res, nil
}
@@ -193,15 +193,15 @@ func (s *menuService) MenuViewData(ctx context.Context, roleID int32) ([]*dto.Se
func (s *menuService) SetRoleMenu(ctx context.Context, roleID int32, rms []*system.RoleMenu) error {
// 开启事务
return s.store.TX(ctx, func(ctx context.Context) error {
return s.Tx.Transaction(ctx, func(ctx context.Context) error {
// 先删除该角色的所有权限
err := s.rolemenusvc.DeleteByRoleID(ctx, roleID)
err := s.roleMenuService.DeleteByRoleID(ctx, roleID)
if err != nil {
return err
}
// 再添加该角色的所有权限
return s.rolemenusvc.Create(ctx, rms)
return s.roleMenuService.Create(ctx, rms)
})
}
@@ -217,7 +217,7 @@ func (s *menuService) RefreshCache(ctx context.Context) error {
return err
}
_ = redis.Set(ctx, key, b, time.Hour*6)
_ = s.Redis.Set(ctx, key, b, time.Hour*6)
return nil
}
@@ -245,7 +245,7 @@ func (s *menuService) XmSelectTree(ctx context.Context, id int32) ([]*view.XmSel
// listByRoleID 获取该角色所拥有的菜单集合
func (s *menuService) listByRoleID(ctx context.Context, roleID int32) ([]*system.Menu, error) {
role, err := s.rolesvc.Get(ctx, roleID)
role, err := s.roleService.Get(ctx, roleID)
if err != nil {
return nil, err
}
@@ -260,7 +260,7 @@ func (s *menuService) listByRoleID(ctx context.Context, roleID int32) ([]*system
}
// 通过角色获取所拥有的权限
roleMenus, err := s.rolemenusvc.ListByRoleID(ctx, roleID)
roleMenus, err := s.roleMenuService.ListByRoleID(ctx, roleID)
if err != nil {
return nil, err
}

View File

@@ -12,22 +12,22 @@ import (
"management/internal/erpserver/model/form"
"management/internal/erpserver/model/system"
"management/internal/erpserver/model/view"
"management/internal/erpserver/service"
v1 "management/internal/erpserver/service/v1"
"management/internal/pkg/convertor"
"management/internal/pkg/database"
"management/internal/pkg/know"
"management/internal/pkg/redis"
)
type roleService struct {
*service.Service
repo system.RoleRepository
}
var _ v1.RoleService = (*roleService)(nil)
func NewRoleService(repo system.RoleRepository) *roleService {
func NewRoleService(service *service.Service, repo system.RoleRepository) v1.RoleService {
return &roleService{
repo: repo,
Service: service,
repo: repo,
}
}
@@ -111,7 +111,7 @@ func (s *roleService) Get(ctx context.Context, id int32) (*system.Role, error) {
func (s *roleService) All(ctx context.Context) ([]*system.Role, error) {
key := know.GetManageKey(ctx, know.AllRoles)
bs, err := redis.GetBytes(ctx, key)
bs, err := s.Redis.GetBytes(ctx, key)
if err == nil {
var res []*system.Role
if err := json.Unmarshal(bs, &res); err == nil {
@@ -129,7 +129,7 @@ func (s *roleService) All(ctx context.Context) ([]*system.Role, error) {
return nil, err
}
_ = redis.Set(ctx, key, bs, time.Hour*6)
_ = s.Redis.Set(ctx, key, bs, time.Hour*6)
return res, nil
}
@@ -149,7 +149,7 @@ func (s *roleService) RefreshCache(ctx context.Context) error {
return err
}
_ = redis.Set(ctx, key, b, time.Hour*6)
_ = s.Redis.Set(ctx, key, b, time.Hour*6)
return nil
}

View File

@@ -4,18 +4,19 @@ import (
"context"
"management/internal/erpserver/model/system"
"management/internal/erpserver/service"
v1 "management/internal/erpserver/service/v1"
)
type roleMenuService struct {
*service.Service
repo system.RoleMenuRepository
}
var _ v1.RoleMenuService = (*roleMenuService)(nil)
func NewRoleMenuService(repo system.RoleMenuRepository) *roleMenuService {
func NewRoleMenuService(service *service.Service, repo system.RoleMenuRepository) v1.RoleMenuService {
return &roleMenuService{
repo: repo,
Service: service,
repo: repo,
}
}

View File

@@ -11,39 +11,39 @@ import (
"management/internal/erpserver/model/form"
"management/internal/erpserver/model/system"
"management/internal/erpserver/model/view"
"management/internal/erpserver/service"
v1 "management/internal/erpserver/service/v1"
"management/internal/pkg/crypto"
"management/internal/pkg/database"
"management/internal/pkg/know"
"management/internal/pkg/rand"
"management/internal/pkg/session"
"github.com/drhin/logger"
"github.com/google/uuid"
"go.uber.org/zap"
)
type userService struct {
session session.Session
log *logger.Logger
*service.Service
repo system.UserRepository
roleService v1.RoleService
loginLogService v1.LoginLogService
}
var _ v1.UserService = (*userService)(nil)
func NewUserService(session session.Session, log *logger.Logger, repo system.UserRepository, roleService v1.RoleService, loginLogService v1.LoginLogService) *userService {
func NewUserService(
service *service.Service,
repo system.UserRepository,
roleService v1.RoleService,
loginLogService v1.LoginLogService,
) v1.UserService {
return &userService{
session: session,
log: log,
Service: service,
repo: repo,
roleService: roleService,
loginLogService: loginLogService,
}
}
func (b *userService) Create(ctx context.Context, req *form.User) error {
func (s *userService) Create(ctx context.Context, req *form.User) error {
salt, err := rand.String(10)
if err != nil {
return err
@@ -74,7 +74,7 @@ func (b *userService) Create(ctx context.Context, req *form.User) error {
CreatedAt: time.Now(),
UpdatedAt: time.Now(),
}
err = b.repo.Create(ctx, user)
err = s.repo.Create(ctx, user)
if err != nil {
if database.IsUniqueViolation(err) {
return errors.New("用户已经存在")
@@ -84,8 +84,8 @@ func (b *userService) Create(ctx context.Context, req *form.User) error {
return nil
}
func (b *userService) Update(ctx context.Context, req *form.User) error {
user, err := b.repo.Get(ctx, *req.ID)
func (s *userService) Update(ctx context.Context, req *form.User) error {
user, err := s.repo.Get(ctx, *req.ID)
if err != nil {
return err
}
@@ -105,23 +105,23 @@ func (b *userService) Update(ctx context.Context, req *form.User) error {
user.HashedPassword = hashedPassword
user.ChangePasswordAt = time.Now()
}
return b.repo.Update(ctx, user)
return s.repo.Update(ctx, user)
}
func (b *userService) All(ctx context.Context) ([]*system.User, error) {
return b.repo.All(ctx)
func (s *userService) All(ctx context.Context) ([]*system.User, error) {
return s.repo.All(ctx)
}
func (b *userService) List(ctx context.Context, q dto.SearchDto) ([]*system.User, int64, error) {
return b.repo.List(ctx, q)
func (s *userService) List(ctx context.Context, q dto.SearchDto) ([]*system.User, int64, error) {
return s.repo.List(ctx, q)
}
func (b *userService) Get(ctx context.Context, id int32) (*system.User, error) {
return b.repo.Get(ctx, id)
func (s *userService) Get(ctx context.Context, id int32) (*system.User, error) {
return s.repo.Get(ctx, id)
}
func (b *userService) XmSelect(ctx context.Context) ([]*view.XmSelect, error) {
all, err := b.repo.All(ctx)
func (s *userService) XmSelect(ctx context.Context) ([]*view.XmSelect, error) {
all, err := s.repo.All(ctx)
if err != nil || len(all) == 0 {
return nil, err
}
@@ -136,24 +136,24 @@ func (b *userService) XmSelect(ctx context.Context) ([]*view.XmSelect, error) {
return res, nil
}
func (b *userService) Login(ctx context.Context, req *form.Login) error {
func (s *userService) Login(ctx context.Context, req *form.Login) error {
l := system.NewLoginLog(req.Email, req.Os, req.Ip, req.Browser, req.Url, req.Referrer)
err := b.login(ctx, req)
err := s.login(ctx, req)
if err != nil {
if err := b.loginLogService.Create(ctx, l.SetMessage(err.Error())); err != nil {
b.log.Error(err.Error(), err, zap.Any("login_log", l))
if err := s.loginLogService.Create(ctx, l.SetMessage(err.Error())); err != nil {
s.Log.Error(err.Error(), err, zap.Any("login_log", l))
}
return err
}
if err := b.loginLogService.Create(ctx, l.SetOk("登录成功")); err != nil {
b.log.Error(err.Error(), err, zap.Any("login_log", l))
if err := s.loginLogService.Create(ctx, l.SetOk("登录成功")); err != nil {
s.Log.Error(err.Error(), err, zap.Any("login_log", l))
}
return nil
}
func (b *userService) login(ctx context.Context, req *form.Login) error {
user, err := b.repo.GetByEmail(ctx, req.Email)
func (s *userService) login(ctx context.Context, req *form.Login) error {
user, err := s.repo.GetByEmail(ctx, req.Email)
if err != nil {
return err
}
@@ -163,7 +163,7 @@ func (b *userService) login(ctx context.Context, req *form.Login) error {
return errors.New("账号或密码错误")
}
user.Role, err = b.roleService.Get(ctx, user.RoleID)
user.Role, err = s.roleService.Get(ctx, user.RoleID)
if err != nil {
return err
}
@@ -172,7 +172,7 @@ func (b *userService) login(ctx context.Context, req *form.Login) error {
}
// 登陆成功
err = b.loginSuccess(ctx, user, req)
err = s.loginSuccess(ctx, user, req)
if err != nil {
return err
}
@@ -180,7 +180,7 @@ func (b *userService) login(ctx context.Context, req *form.Login) error {
return nil
}
func (b *userService) loginSuccess(ctx context.Context, user *system.User, req *form.Login) error {
func (s *userService) loginSuccess(ctx context.Context, user *system.User, req *form.Login) error {
auth := dto.AuthorizeUser{
ID: user.ID,
Uuid: user.Uuid,
@@ -198,6 +198,6 @@ func (b *userService) loginSuccess(ctx context.Context, user *system.User, req *
return err
}
b.session.Put(ctx, know.StoreName, gob)
s.Session.Put(ctx, know.StoreName, gob)
return nil
}