package postgres import ( "context" "github.com/break/junhong_cmp_fiber/internal/model" "gorm.io/gorm" ) // UserStore 用户数据访问层 type UserStore struct { db *gorm.DB } // NewUserStore 创建用户 Store func NewUserStore(db *gorm.DB) *UserStore { return &UserStore{db: db} } // Create 创建用户 func (s *UserStore) Create(ctx context.Context, user *model.User) error { return s.db.WithContext(ctx).Create(user).Error } // GetByID 根据 ID 获取用户 func (s *UserStore) GetByID(ctx context.Context, id uint) (*model.User, error) { var user model.User err := s.db.WithContext(ctx).First(&user, id).Error if err != nil { return nil, err } return &user, nil } // GetByUsername 根据用户名获取用户 func (s *UserStore) GetByUsername(ctx context.Context, username string) (*model.User, error) { var user model.User err := s.db.WithContext(ctx).Where("username = ?", username).First(&user).Error if err != nil { return nil, err } return &user, nil } // List 分页获取用户列表 func (s *UserStore) List(ctx context.Context, page, pageSize int) ([]model.User, int64, error) { var users []model.User var total int64 // 计算总数 if err := s.db.WithContext(ctx).Model(&model.User{}).Count(&total).Error; err != nil { return nil, 0, err } // 分页查询 offset := (page - 1) * pageSize err := s.db.WithContext(ctx). Offset(offset). Limit(pageSize). Order("created_at DESC"). Find(&users).Error if err != nil { return nil, 0, err } return users, total, nil } // Update 更新用户 func (s *UserStore) Update(ctx context.Context, user *model.User) error { return s.db.WithContext(ctx).Save(user).Error } // Delete 软删除用户 func (s *UserStore) Delete(ctx context.Context, id uint) error { return s.db.WithContext(ctx).Delete(&model.User{}, id).Error }