narasiahli-be/app/module/users/controller/user-expert.controller.go

93 lines
2.0 KiB
Go
Raw Normal View History

2026-02-01 16:11:03 +00:00
package controller
import (
"narasi-ahli-be/app/module/users/request"
"narasi-ahli-be/app/module/users/service"
utilRes "narasi-ahli-be/utils/response"
"strconv"
"github.com/gofiber/fiber/v2"
)
type userExpertController struct {
service service.UserExpertService
}
type UserExpertController interface {
All(c *fiber.Ctx) error
Show(c *fiber.Ctx) error
}
func NewUserExpertController(
service service.UserExpertService,
) UserExpertController {
return &userExpertController{
service: service,
}
}
// @Summary Get list expert users
// @Description Get users with role expert (user_role_id = 2)
// @Tags User Expert
// @Param name query string false "Filter by expert name"
// @Param type query string false "Filter by expert type"
// @Success 200 {object} response.Response
// @Failure 500 {object} response.InternalServerError
// @Router /users/experts [get]
func (_i *userExpertController) All(c *fiber.Ctx) error {
var namePtr *string
var typePtr *string
name := c.Query("name")
if name != "" {
namePtr = &name
}
t := c.Query("type")
if t != "" {
typePtr = &t
}
req := request.UserExpertQueryRequest{
Name: namePtr,
Type: typePtr,
}
data, err := _i.service.All(req)
if err != nil {
return err
}
return utilRes.Resp(c, utilRes.Response{
Success: true,
Data: data,
})
}
// Show Expert User
// @Summary Get expert user detail
// @Description Get expert user with work, education, and research histories
// @Tags User Expert
// @Param id path int true "User ID"
// @Success 200 {object} response.Response
// @Failure 404 {object} response.BadRequestError
// @Failure 500 {object} response.InternalServerError
// @Router /users/experts/{id} [get]
func (_i *userExpertController) Show(c *fiber.Ctx) error {
id, err := strconv.ParseUint(c.Params("id"), 10, 64)
if err != nil {
return err
}
data, err := _i.service.Show(uint(id))
if err != nil {
return err
}
return utilRes.Resp(c, utilRes.Response{
Success: true,
Data: data,
})
}