user.go 951 Bytes
package postgresql

import (
	"gorm.io/gorm"
	"ui.ac.id/dtd/go-webserver-boilerplate/internal/domain"
	"ui.ac.id/dtd/go-webserver-boilerplate/internal/repository/postgresql/model"
)

type PostgresUserRepository struct {
	db *gorm.DB
}

func NewPostgresUserRepository(db *gorm.DB) *PostgresUserRepository {
	return &PostgresUserRepository{
		db: db,
	}
}

func (repo *PostgresUserRepository) GetUserByID(id int) (*domain.User, error) {
	var user model.User
	result := repo.db.First(&user, id)

	if result.Error != nil {
		return nil, WrapGormError(result.Error)
	}

	user_domain := user.ToDomain()
	return &user_domain, nil
}

func (repo *PostgresUserRepository) GetList() ([]domain.User, error) {
	var users []model.User

	result := repo.db.Find(&users)

	if result.Error != nil {
		return nil, result.Error
	}

	userDomains := make([]domain.User, len(users))

	for i, u := range users {
		userDomains[i] = u.ToDomain()
	}

	return userDomains, nil
}