user.go 943 Bytes
package handler

import (
	"strconv"

	"github.com/gofiber/fiber/v3"
	"ui.ac.id/dtd/go-webserver-boilerplate/internal/domain"
	"ui.ac.id/dtd/go-webserver-boilerplate/internal/handler/specification"
)

type UserHandler struct {
	service domain.UserService
}

func NewUserHandler(service domain.UserService) *UserHandler {
	return &UserHandler{
		service: service,
	}
}

func (h *UserHandler) GetUserList(ctx fiber.Ctx) error {
	users, err := h.service.GetList()

	if err != nil {
		return err
	}

	response := NewBaseResponse(200, specification.UserListResponse{Users: users}, nil)
	return ctx.JSON(response)
}

func (h *UserHandler) GetUserDetail(ctx fiber.Ctx) error {
	userIDParams := ctx.Params("id")
	userID, err := strconv.Atoi(userIDParams)
	user, err := h.service.GetUserDetail(userID)

	if err != nil {
		return err
	}

	response := NewBaseResponse(200, specification.UserDetailResponse{User: *user}, nil)
	return ctx.JSON(response)
}