93 lines
2.0 KiB
Go
93 lines
2.0 KiB
Go
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,
|
|
})
|
|
}
|
|
|