mirror of
https://github.com/Awuqing/BackupX.git
synced 2026-05-31 11:49:43 +08:00
64 lines
1.6 KiB
Go
64 lines
1.6 KiB
Go
package repository
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
|
|
"backupx/server/internal/model"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
type UserRepository interface {
|
|
Count(context.Context) (int64, error)
|
|
Create(context.Context, *model.User) error
|
|
Update(context.Context, *model.User) error
|
|
FindByUsername(context.Context, string) (*model.User, error)
|
|
FindByID(context.Context, uint) (*model.User, error)
|
|
}
|
|
|
|
type GormUserRepository struct {
|
|
db *gorm.DB
|
|
}
|
|
|
|
func NewUserRepository(db *gorm.DB) *GormUserRepository {
|
|
return &GormUserRepository{db: db}
|
|
}
|
|
|
|
func (r *GormUserRepository) Count(ctx context.Context) (int64, error) {
|
|
var count int64
|
|
if err := r.db.WithContext(ctx).Model(&model.User{}).Count(&count).Error; err != nil {
|
|
return 0, err
|
|
}
|
|
return count, nil
|
|
}
|
|
|
|
func (r *GormUserRepository) Create(ctx context.Context, user *model.User) error {
|
|
return r.db.WithContext(ctx).Create(user).Error
|
|
}
|
|
|
|
func (r *GormUserRepository) Update(ctx context.Context, user *model.User) error {
|
|
return r.db.WithContext(ctx).Save(user).Error
|
|
}
|
|
|
|
func (r *GormUserRepository) FindByUsername(ctx context.Context, username string) (*model.User, error) {
|
|
var user model.User
|
|
if err := r.db.WithContext(ctx).Where("username = ?", username).First(&user).Error; err != nil {
|
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
|
return nil, nil
|
|
}
|
|
return nil, err
|
|
}
|
|
return &user, nil
|
|
}
|
|
|
|
func (r *GormUserRepository) FindByID(ctx context.Context, id uint) (*model.User, error) {
|
|
var user model.User
|
|
if err := r.db.WithContext(ctx).First(&user, id).Error; err != nil {
|
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
|
return nil, nil
|
|
}
|
|
return nil, err
|
|
}
|
|
return &user, nil
|
|
}
|