first commit

This commit is contained in:
2026-07-30 09:51:25 +07:00
commit e3aca176b7
82 changed files with 7847 additions and 0 deletions

View File

@@ -0,0 +1,125 @@
package user
import "gorm.io/gorm"
type Repository interface {
Create(u *User) error
FindAll() ([]User, error)
FindAllPaginated(page, limit int, query ListUserQuery) ([]User, int64, error)
FindByID(id uint) (*User, error)
FindByEmail(email string) (*User, error)
FindByGoogleID(googleID string) (*User, error)
FindByVerificationToken(token string) (*User, error)
FindByResetToken(token string) (*User, error)
Update(u *User) error
Delete(id uint) error
}
type repository struct {
db *gorm.DB
}
func NewRepository(db *gorm.DB) Repository {
return &repository{db: db}
}
var userSelectColumns = []string{
"id", "name", "email", "password", "role", "status", "avatar_url",
"google_id", "is_email_verified", "verification_token",
"reset_password_token", "reset_password_expires_at", "created_at", "updated_at",
}
func (r *repository) Create(u *User) error {
return r.db.Create(u).Error
}
func (r *repository) FindAll() ([]User, error) {
var users []User
err := r.db.Select(userSelectColumns).Find(&users).Error
return users, err
}
func (r *repository) FindAllPaginated(page, limit int, queryParams ListUserQuery) ([]User, int64, error) {
var users []User
var total int64
query := r.db.Model(&User{}).Select(userSelectColumns)
if queryParams.Role != "" {
query = query.Where("role = ?", queryParams.Role)
}
if queryParams.Status != "" {
query = query.Where("status = ?", queryParams.Status)
}
if queryParams.Search != "" {
pattern := "%" + queryParams.Search + "%"
query = query.Where("name ILIKE ? OR email ILIKE ?", pattern, pattern)
}
if err := query.Count(&total).Error; err != nil {
return nil, 0, err
}
offset := (page - 1) * limit
err := query.Order("id DESC").Limit(limit).Offset(offset).Find(&users).Error
if err != nil {
return nil, 0, err
}
return users, total, nil
}
func (r *repository) FindByID(id uint) (*User, error) {
var u User
err := r.db.Select(userSelectColumns).First(&u, id).Error
if err != nil {
return nil, err
}
return &u, nil
}
func (r *repository) FindByEmail(email string) (*User, error) {
var u User
err := r.db.Select(userSelectColumns).Where("email = ?", email).First(&u).Error
if err != nil {
return nil, err
}
return &u, nil
}
func (r *repository) FindByGoogleID(googleID string) (*User, error) {
var u User
err := r.db.Select(userSelectColumns).Where("google_id = ?", googleID).First(&u).Error
if err != nil {
return nil, err
}
return &u, nil
}
func (r *repository) FindByVerificationToken(token string) (*User, error) {
var u User
err := r.db.Select(userSelectColumns).Where("verification_token = ?", token).First(&u).Error
if err != nil {
return nil, err
}
return &u, nil
}
func (r *repository) FindByResetToken(token string) (*User, error) {
var u User
err := r.db.Select(userSelectColumns).Where("reset_password_token = ?", token).First(&u).Error
if err != nil {
return nil, err
}
return &u, nil
}
func (r *repository) Update(u *User) error {
return r.db.Save(u).Error
}
func (r *repository) Delete(id uint) error {
return r.db.Delete(&User{}, id).Error
}