Commit 0a2bd66c by mhmdhaekal

feat(initialize): implement users select

1 parent 24556301
package main
import (
"fmt"
"log"
"os"
"gorm.io/driver/postgres"
......@@ -14,7 +14,7 @@ func main() {
db, err := gorm.Open(postgres.Open(""), &gorm.Config{})
if err != nil {
fmt.Errorf("Failed to connect to database %v", err)
log.Fatal(err)
os.Exit(1)
}
......
......@@ -12,4 +12,6 @@ type UserService interface {
}
type UserRepository interface {
GetList() ([]User, error)
GetUserByID(id int) (*User, error)
}
package model
import "time"
type Base struct {
IsActive bool `gorm:"default:true"`
CreatedAt time.Time
UpdatedAt time.Time
DeletedAt time.Time
}
package model
import "ui.ac.id/dtd/go-webserver-boilerplate/internal/domain"
type User struct {
ID int `gorm:"primaryKey"`
IdentityNumber string
Email string
Name string
Base
}
func (User) TableName() string {
return "user"
}
func (u *User) ToDomain() domain.User {
return domain.User{
ID: u.ID,
IdentityNumber: u.IdentityNumber,
Email: u.Email,
Name: u.Name,
}
}
package postgresql
import "gorm.io/gorm"
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
......@@ -11,3 +15,33 @@ func NewPostgresUserRepository(db *gorm.DB) *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, 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
}
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!