2
This commit is contained in:
59
internal/erpserver/repository/store.go
Normal file
59
internal/erpserver/repository/store.go
Normal file
@@ -0,0 +1,59 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"context"
|
||||
"sync"
|
||||
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
var (
|
||||
once sync.Once
|
||||
// 全局变量,方便其它包直接调用已初始化好的 datastore 实例.
|
||||
engine *datastore
|
||||
)
|
||||
|
||||
type Store interface {
|
||||
DB(ctx context.Context) *gorm.DB
|
||||
TX(ctx context.Context, fn func(ctx context.Context) error) error
|
||||
}
|
||||
|
||||
// transactionKey 用于在 context.Context 中存储事务上下文的键.
|
||||
type transactionKey struct{}
|
||||
|
||||
// datastore 是 Storer 的具体实现.
|
||||
type datastore struct {
|
||||
core *gorm.DB
|
||||
}
|
||||
|
||||
// 确保 datastore 实现了 Storer 接口.
|
||||
var _ Store = (*datastore)(nil)
|
||||
|
||||
// NewStore 创建一个 Storer 类型的实例.
|
||||
func NewStore(db *gorm.DB) *datastore {
|
||||
// 确保 engine 只被初始化一次
|
||||
once.Do(func() {
|
||||
engine = &datastore{db}
|
||||
})
|
||||
|
||||
return engine
|
||||
}
|
||||
|
||||
func (store *datastore) DB(ctx context.Context) *gorm.DB {
|
||||
db := store.core
|
||||
// 从上下文中提取事务实例
|
||||
if tx, ok := ctx.Value(transactionKey{}).(*gorm.DB); ok {
|
||||
db = tx
|
||||
}
|
||||
|
||||
return db
|
||||
}
|
||||
|
||||
func (store *datastore) TX(ctx context.Context, fn func(ctx context.Context) error) error {
|
||||
return store.core.WithContext(ctx).Transaction(
|
||||
func(tx *gorm.DB) error {
|
||||
ctx = context.WithValue(ctx, transactionKey{}, tx)
|
||||
return fn(ctx)
|
||||
},
|
||||
)
|
||||
}
|
||||
52
internal/erpserver/repository/system/audit_log.go
Normal file
52
internal/erpserver/repository/system/audit_log.go
Normal file
@@ -0,0 +1,52 @@
|
||||
package system
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"management/internal/db/model/dto"
|
||||
"management/internal/erpserver/model/system"
|
||||
"management/internal/erpserver/repository"
|
||||
)
|
||||
|
||||
type auditLogRepository struct {
|
||||
store repository.Store
|
||||
}
|
||||
|
||||
var _ system.AuditLogRepository = (*auditLogRepository)(nil)
|
||||
|
||||
func NewAuditLogRepository(store repository.Store) *auditLogRepository {
|
||||
return &auditLogRepository{
|
||||
store: store,
|
||||
}
|
||||
}
|
||||
|
||||
func (s *auditLogRepository) Create(ctx context.Context, obj *system.AuditLog) error {
|
||||
return s.store.DB(ctx).Create(obj).Error
|
||||
}
|
||||
|
||||
func (s *auditLogRepository) List(ctx context.Context, q dto.SearchDto) ([]*system.AuditLog, int64, error) {
|
||||
query := s.store.DB(ctx).
|
||||
Model(&system.AuditLog{}).
|
||||
Where("created_at BETWEEN ? AND ?", q.SearchTimeBegin, q.SearchTimeEnd)
|
||||
if q.SearchEmail != "" {
|
||||
query = query.Where("email LIKE ?", "%"+q.SearchEmail+"%")
|
||||
}
|
||||
|
||||
var count int64
|
||||
err := query.Count(&count).Error
|
||||
if err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
var logs []*system.AuditLog
|
||||
err = query.
|
||||
Order("id DESC").
|
||||
Offset((q.Page - 1) * q.Rows).
|
||||
Limit(q.Rows).
|
||||
Find(&logs).
|
||||
Error
|
||||
if err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
return logs, count, nil
|
||||
}
|
||||
51
internal/erpserver/repository/system/config.go
Normal file
51
internal/erpserver/repository/system/config.go
Normal file
@@ -0,0 +1,51 @@
|
||||
package system
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"management/internal/db/model/dto"
|
||||
"management/internal/erpserver/model/system"
|
||||
"management/internal/erpserver/repository"
|
||||
)
|
||||
|
||||
type configRepository struct {
|
||||
store repository.Store
|
||||
}
|
||||
|
||||
var _ system.ConfigRepository = (*configRepository)(nil)
|
||||
|
||||
func NewConfigRepository(store repository.Store) *configRepository {
|
||||
return &configRepository{
|
||||
store: store,
|
||||
}
|
||||
}
|
||||
|
||||
func (r *configRepository) Create(ctx context.Context, obj *system.Config) error {
|
||||
return r.store.DB(ctx).Create(obj).Error
|
||||
}
|
||||
|
||||
func (r *configRepository) Update(ctx context.Context, obj *system.Config) error {
|
||||
return r.store.DB(ctx).Save(obj).Error
|
||||
}
|
||||
|
||||
func (r *configRepository) Get(ctx context.Context, id int32) (*system.Config, error) {
|
||||
var obj system.Config
|
||||
err := r.store.DB(ctx).First(&obj, id).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &obj, nil
|
||||
}
|
||||
|
||||
func (r *configRepository) GetByKey(ctx context.Context, key string) (*system.Config, error) {
|
||||
var obj system.Config
|
||||
err := r.store.DB(ctx).Where("key = ?", key).First(&obj).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &obj, nil
|
||||
}
|
||||
|
||||
func (r *configRepository) List(ctx context.Context, q dto.SearchDto) ([]*system.Config, int64, error) {
|
||||
return nil, 0, nil
|
||||
}
|
||||
100
internal/erpserver/repository/system/department.go
Normal file
100
internal/erpserver/repository/system/department.go
Normal file
@@ -0,0 +1,100 @@
|
||||
package system
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"management/internal/db/model/dto"
|
||||
"management/internal/erpserver/model/system"
|
||||
"management/internal/erpserver/repository"
|
||||
)
|
||||
|
||||
type departmentRepository struct {
|
||||
store repository.Store
|
||||
}
|
||||
|
||||
var _ system.DepartmentRepository = (*departmentRepository)(nil)
|
||||
|
||||
func NewDepartmentRepository(store repository.Store) *departmentRepository {
|
||||
return &departmentRepository{
|
||||
store: store,
|
||||
}
|
||||
}
|
||||
|
||||
func (r *departmentRepository) Create(ctx context.Context, obj *system.Department) error {
|
||||
return r.store.DB(ctx).Create(obj).Error
|
||||
}
|
||||
|
||||
func (r *departmentRepository) Update(ctx context.Context, obj *system.Department) error {
|
||||
return r.store.DB(ctx).Save(obj).Error
|
||||
}
|
||||
|
||||
func (r *departmentRepository) Get(ctx context.Context, id int32) (*system.Department, error) {
|
||||
var obj system.Department
|
||||
err := r.store.DB(ctx).First(&obj, id).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &obj, nil
|
||||
}
|
||||
|
||||
func (r *departmentRepository) All(ctx context.Context) ([]*system.Department, error) {
|
||||
var departs []*system.Department
|
||||
err := r.store.DB(ctx).Find(&departs).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return departs, nil
|
||||
}
|
||||
|
||||
func (r *departmentRepository) List(ctx context.Context, q dto.SearchDto) ([]*system.Department, int64, error) {
|
||||
query := r.store.DB(ctx).
|
||||
Model(&system.Department{}).
|
||||
Where("created_at BETWEEN ? AND ?", q.SearchTimeBegin, q.SearchTimeEnd)
|
||||
if q.SearchID != 0 {
|
||||
query = query.Where("id = ?", q.SearchID)
|
||||
}
|
||||
if q.SearchParentID != 0 && q.SearchParentID != 1 {
|
||||
query = query.Where("parent_id = ?", q.SearchParentID)
|
||||
}
|
||||
if q.SearchName != "" {
|
||||
query = query.Where("name LIKE ?", "%"+q.SearchName+"%")
|
||||
}
|
||||
if q.SearchStatus != 9999 {
|
||||
query = query.Where("status = ?", q.SearchStatus)
|
||||
}
|
||||
|
||||
var count int64
|
||||
err := query.Count(&count).Error
|
||||
if err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
var departs []*system.Department
|
||||
err = query.
|
||||
Order("id DESC").
|
||||
Offset((q.Page - 1) * q.Rows).
|
||||
Limit(q.Rows).
|
||||
Find(&departs).Error
|
||||
if err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
return departs, count, nil
|
||||
}
|
||||
|
||||
func (r *departmentRepository) RebuildParentPath(ctx context.Context) error {
|
||||
query := `UPDATE sys_department AS tm
|
||||
SET parent_path = (SELECT ',' || string_agg(cast(t.parent_id AS VARCHAR), ',') || ','
|
||||
FROM (WITH RECURSIVE temp (id, parent_id) AS (SELECT id, tm.parent_id
|
||||
FROM sys_department
|
||||
WHERE id = tm.id
|
||||
UNION ALL
|
||||
SELECT sys_department.id, sys_department.parent_id
|
||||
FROM sys_department,
|
||||
temp
|
||||
WHERE sys_department.id = temp.parent_id)
|
||||
SELECT id, parent_id
|
||||
FROM temp
|
||||
ORDER BY id) AS t)
|
||||
WHERE tm.status = 0;`
|
||||
return r.store.DB(ctx).Exec(query).Error
|
||||
}
|
||||
78
internal/erpserver/repository/system/login_log.go
Normal file
78
internal/erpserver/repository/system/login_log.go
Normal file
@@ -0,0 +1,78 @@
|
||||
package system
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"management/internal/db/model/dto"
|
||||
"management/internal/erpserver/model/system"
|
||||
"management/internal/erpserver/repository"
|
||||
)
|
||||
|
||||
type loginLogRepository struct {
|
||||
store repository.Store
|
||||
}
|
||||
|
||||
var _ system.LoginLogRepository = (*loginLogRepository)(nil)
|
||||
|
||||
func NewLoginLogRepository(store repository.Store) *loginLogRepository {
|
||||
return &loginLogRepository{
|
||||
store: store,
|
||||
}
|
||||
}
|
||||
|
||||
func (s *loginLogRepository) Create(ctx context.Context, obj *system.LoginLog) error {
|
||||
return s.store.DB(ctx).Create(obj).Error
|
||||
}
|
||||
|
||||
func (s *loginLogRepository) GetLatest(ctx context.Context, email string) (*system.LoginLog, error) {
|
||||
var log system.LoginLog
|
||||
err := s.store.DB(ctx).
|
||||
Where("email = ?", email).
|
||||
Order("id DESC").
|
||||
First(&log).
|
||||
Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &log, nil
|
||||
}
|
||||
|
||||
func (s *loginLogRepository) List(ctx context.Context, q dto.SearchDto) ([]*system.LoginLog, int64, error) {
|
||||
query := s.store.DB(ctx).
|
||||
Model(&system.LoginLog{}).
|
||||
Where("created_at BETWEEN ? AND ?", q.SearchTimeBegin, q.SearchTimeEnd)
|
||||
if q.SearchEmail != "" {
|
||||
query = query.Where("email LIKE ?", "%"+q.SearchEmail+"%")
|
||||
}
|
||||
|
||||
var count int64
|
||||
err := query.Count(&count).Error
|
||||
if err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
var logs []*system.LoginLog
|
||||
err = query.
|
||||
Order("id DESC").
|
||||
Offset((q.Page - 1) * q.Rows).
|
||||
Limit(q.Rows).
|
||||
Find(&logs).
|
||||
Error
|
||||
if err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
return logs, count, nil
|
||||
}
|
||||
|
||||
func (s *loginLogRepository) Count(ctx context.Context, email string) (int64, error) {
|
||||
var count int64
|
||||
err := s.store.DB(ctx).
|
||||
Model(&system.LoginLog{}).
|
||||
Where("email = ?", email).
|
||||
Count(&count).
|
||||
Error
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
return count, nil
|
||||
}
|
||||
73
internal/erpserver/repository/system/menu.go
Normal file
73
internal/erpserver/repository/system/menu.go
Normal file
@@ -0,0 +1,73 @@
|
||||
package system
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"management/internal/erpserver/model/system"
|
||||
"management/internal/erpserver/repository"
|
||||
)
|
||||
|
||||
type menuRepository struct {
|
||||
store repository.Store
|
||||
}
|
||||
|
||||
var _ system.MenuRepository = (*menuRepository)(nil)
|
||||
|
||||
func NewMenuRepository(store repository.Store) *menuRepository {
|
||||
return &menuRepository{
|
||||
store: store,
|
||||
}
|
||||
}
|
||||
|
||||
func (r *menuRepository) Create(ctx context.Context, obj *system.Menu) error {
|
||||
return r.store.DB(ctx).Create(obj).Error
|
||||
}
|
||||
|
||||
func (r *menuRepository) Update(ctx context.Context, obj *system.Menu) error {
|
||||
return r.store.DB(ctx).Save(obj).Error
|
||||
}
|
||||
|
||||
func (r *menuRepository) Get(ctx context.Context, id int32) (*system.Menu, error) {
|
||||
var menu system.Menu
|
||||
err := r.store.DB(ctx).Where("id = ?", id).First(&menu).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &menu, nil
|
||||
}
|
||||
|
||||
func (r *menuRepository) GetByUrl(ctx context.Context, url string) (*system.Menu, error) {
|
||||
var menu system.Menu
|
||||
err := r.store.DB(ctx).Where("url = ?", url).First(&menu).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &menu, nil
|
||||
}
|
||||
|
||||
func (r *menuRepository) All(ctx context.Context) ([]*system.Menu, error) {
|
||||
var menus []*system.Menu
|
||||
err := r.store.DB(ctx).Find(&menus).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return menus, nil
|
||||
}
|
||||
|
||||
func (r *menuRepository) RebuildParentPath(ctx context.Context) error {
|
||||
query := `UPDATE sys_menu AS tm
|
||||
SET parent_path = (SELECT ',' || string_agg(cast(t.parent_id AS VARCHAR), ',') || ','
|
||||
FROM (WITH RECURSIVE temp (id, parent_id) AS (SELECT id, tm.parent_id
|
||||
FROM sys_menu
|
||||
WHERE id = tm.id
|
||||
UNION ALL
|
||||
SELECT sys_menu.id, sys_menu.parent_id
|
||||
FROM sys_menu,
|
||||
temp
|
||||
WHERE sys_menu.id = temp.parent_id)
|
||||
SELECT id, parent_id
|
||||
FROM temp
|
||||
ORDER BY id) AS t)
|
||||
WHERE tm.status = 0;`
|
||||
return r.store.DB(ctx).Exec(query).Error
|
||||
}
|
||||
100
internal/erpserver/repository/system/role.go
Normal file
100
internal/erpserver/repository/system/role.go
Normal file
@@ -0,0 +1,100 @@
|
||||
package system
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"management/internal/db/model/dto"
|
||||
"management/internal/erpserver/model/system"
|
||||
"management/internal/erpserver/repository"
|
||||
)
|
||||
|
||||
type roleRepository struct {
|
||||
store repository.Store
|
||||
}
|
||||
|
||||
var _ system.RoleRepository = (*roleRepository)(nil)
|
||||
|
||||
func NewRoleRepository(store repository.Store) *roleRepository {
|
||||
return &roleRepository{
|
||||
store: store,
|
||||
}
|
||||
}
|
||||
|
||||
func (r *roleRepository) Create(ctx context.Context, obj *system.Role) error {
|
||||
return r.store.DB(ctx).Create(obj).Error
|
||||
}
|
||||
|
||||
func (r *roleRepository) Update(ctx context.Context, obj *system.Role) error {
|
||||
return r.store.DB(ctx).Save(obj).Error
|
||||
}
|
||||
|
||||
func (r *roleRepository) Get(ctx context.Context, id int32) (*system.Role, error) {
|
||||
var role system.Role
|
||||
err := r.store.DB(ctx).Where("id = ?", id).First(&role).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &role, nil
|
||||
}
|
||||
|
||||
func (r *roleRepository) All(ctx context.Context) ([]*system.Role, error) {
|
||||
var roles []*system.Role
|
||||
err := r.store.DB(ctx).Find(&roles).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return roles, nil
|
||||
}
|
||||
|
||||
func (r *roleRepository) List(ctx context.Context, q dto.SearchDto) ([]*system.Role, int64, error) {
|
||||
query := r.store.DB(ctx).
|
||||
Model(&system.Role{}).
|
||||
Where("created_at BETWEEN ? AND ?", q.SearchTimeBegin, q.SearchTimeEnd)
|
||||
if q.SearchID != 0 {
|
||||
query = query.Where("id = ?", q.SearchID)
|
||||
}
|
||||
if q.SearchParentID != 0 && q.SearchParentID != 1 {
|
||||
query = query.Where("parent_id = ?", q.SearchParentID)
|
||||
}
|
||||
if q.SearchName != "" {
|
||||
query = query.Where("name LIKE ?", "%"+q.SearchName+"%")
|
||||
}
|
||||
if q.SearchStatus != 9999 {
|
||||
query = query.Where("status = ?", q.SearchStatus)
|
||||
}
|
||||
|
||||
var count int64
|
||||
err := query.Count(&count).Error
|
||||
if err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
var departs []*system.Role
|
||||
err = query.
|
||||
Order("id DESC").
|
||||
Offset((q.Page - 1) * q.Rows).
|
||||
Limit(q.Rows).
|
||||
Find(&departs).Error
|
||||
if err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
return departs, count, nil
|
||||
}
|
||||
|
||||
func (r *roleRepository) RebuildParentPath(ctx context.Context) error {
|
||||
query := `UPDATE sys_role AS tm
|
||||
SET parent_path = (SELECT ',' || string_agg(cast(t.parent_id AS VARCHAR), ',') || ','
|
||||
FROM (WITH RECURSIVE temp (id, parent_id) AS (SELECT id, tm.parent_id
|
||||
FROM sys_role
|
||||
WHERE id = tm.id
|
||||
UNION ALL
|
||||
SELECT sys_role.id, sys_role.parent_id
|
||||
FROM sys_role,
|
||||
temp
|
||||
WHERE sys_role.id = temp.parent_id)
|
||||
SELECT id, parent_id
|
||||
FROM temp
|
||||
ORDER BY id) AS t)
|
||||
WHERE tm.status = 0;`
|
||||
return r.store.DB(ctx).Exec(query).Error
|
||||
}
|
||||
37
internal/erpserver/repository/system/role_menu.go
Normal file
37
internal/erpserver/repository/system/role_menu.go
Normal file
@@ -0,0 +1,37 @@
|
||||
package system
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"management/internal/erpserver/model/system"
|
||||
"management/internal/erpserver/repository"
|
||||
)
|
||||
|
||||
type roleMenuRepository struct {
|
||||
store repository.Store
|
||||
}
|
||||
|
||||
var _ system.RoleMenuRepository = (*roleMenuRepository)(nil)
|
||||
|
||||
func NewRoleMenuRepository(store repository.Store) *roleMenuRepository {
|
||||
return &roleMenuRepository{
|
||||
store: store,
|
||||
}
|
||||
}
|
||||
|
||||
func (r *roleMenuRepository) Create(ctx context.Context, obj []*system.RoleMenu) error {
|
||||
return r.store.DB(ctx).Create(obj).Error
|
||||
}
|
||||
|
||||
func (r *roleMenuRepository) DeleteByRoleID(ctx context.Context, roleID int32) error {
|
||||
return r.store.DB(ctx).Where("role_id = ?", roleID).Delete(&system.RoleMenu{}).Error
|
||||
}
|
||||
|
||||
func (r *roleMenuRepository) ListByRoleID(ctx context.Context, roleID int32) ([]*system.RoleMenu, error) {
|
||||
var roleMenus []*system.RoleMenu
|
||||
err := r.store.DB(ctx).Where("role_id = ?", roleID).Find(&roleMenus).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return roleMenus, nil
|
||||
}
|
||||
93
internal/erpserver/repository/system/user.go
Normal file
93
internal/erpserver/repository/system/user.go
Normal file
@@ -0,0 +1,93 @@
|
||||
package system
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"management/internal/db/model/dto"
|
||||
"management/internal/erpserver/model/system"
|
||||
"management/internal/erpserver/repository"
|
||||
)
|
||||
|
||||
type userRepository struct {
|
||||
store repository.Store
|
||||
}
|
||||
|
||||
var _ system.UserRepository = (*userRepository)(nil)
|
||||
|
||||
func NewUserRepository(store repository.Store) *userRepository {
|
||||
return &userRepository{
|
||||
store: store,
|
||||
}
|
||||
}
|
||||
|
||||
func (s *userRepository) Create(ctx context.Context, obj *system.User) error {
|
||||
return s.store.DB(ctx).Create(obj).Error
|
||||
}
|
||||
|
||||
func (s *userRepository) Update(ctx context.Context, obj *system.User) error {
|
||||
return s.store.DB(ctx).Save(obj).Error
|
||||
}
|
||||
|
||||
func (s *userRepository) Get(ctx context.Context, id int32) (*system.User, error) {
|
||||
var user system.User
|
||||
err := s.store.DB(ctx).Where("id = ?", id).First(&user).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &user, nil
|
||||
}
|
||||
|
||||
func (s *userRepository) GetByEmail(ctx context.Context, email string) (*system.User, error) {
|
||||
var user system.User
|
||||
err := s.store.DB(ctx).Where("email = ?", email).First(&user).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &user, nil
|
||||
}
|
||||
|
||||
func (s *userRepository) All(ctx context.Context) ([]*system.User, error) {
|
||||
var users []*system.User
|
||||
err := s.store.DB(ctx).Find(&users).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return users, nil
|
||||
}
|
||||
|
||||
func (s *userRepository) List(ctx context.Context, q dto.SearchDto) ([]*system.User, int64, error) {
|
||||
query := s.store.DB(ctx).
|
||||
Model(&system.User{}).
|
||||
Preload("Role").
|
||||
Preload("Department").
|
||||
Where("created_at BETWEEN ? AND ?", q.SearchTimeBegin, q.SearchTimeEnd)
|
||||
if q.SearchID != 0 {
|
||||
query = query.Where("id = ?", q.SearchID)
|
||||
}
|
||||
if q.SearchName != "" {
|
||||
query = query.Where("username LIKE ?", "%"+q.SearchName+"%")
|
||||
}
|
||||
if q.SearchEmail != "" {
|
||||
query = query.Where("email LIKE ?", "%"+q.SearchEmail+"%")
|
||||
}
|
||||
if q.SearchStatus != 9999 {
|
||||
query = query.Where("status = ?", q.SearchStatus)
|
||||
}
|
||||
|
||||
var count int64
|
||||
err := query.Count(&count).Error
|
||||
if err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
var users []*system.User
|
||||
err = query.
|
||||
Order("id DESC").
|
||||
Offset((q.Page - 1) * q.Rows).
|
||||
Limit(q.Rows).
|
||||
Find(&users).Error
|
||||
if err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
return users, count, nil
|
||||
}
|
||||
Reference in New Issue
Block a user