107 lines
2.6 KiB
Go
107 lines
2.6 KiB
Go
package access
|
|
|
|
import (
|
|
"antrian-operasi/internal/shared"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
type AccessHandler struct {
|
|
repo IAccessRepository
|
|
}
|
|
|
|
func NewAccessHandler(repo IAccessRepository) AccessHandler {
|
|
return AccessHandler{repo}
|
|
}
|
|
|
|
// SyncKeycloakRole godoc
|
|
// @Summary Sync Keycloak Role
|
|
// @Tags Access Role
|
|
// @Param body body SyncKeycloakRoleRequest true "Sync Keycloak Role"
|
|
// @Success 200 {object} shared.BaseResponse
|
|
// @Failure 500 {object} shared.BaseErrorResponse
|
|
// @Router /access/sync-keycloak-role [post]
|
|
func (h AccessHandler) SyncKeycloakRole(c *gin.Context) {
|
|
var req SyncKeycloakRoleRequest
|
|
|
|
//bind json body
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
c.JSON(400, shared.BaseErrorResponse{
|
|
Success: false,
|
|
Code: 400,
|
|
Message: "error bind json",
|
|
Errors: shared.ValidationError(err),
|
|
})
|
|
return
|
|
}
|
|
|
|
//check user role exist
|
|
users, err := h.repo.FindUserByKeycloakId(c, req.KeycloakId)
|
|
if err != nil {
|
|
errMessage := []string{err.Error()}
|
|
c.JSON(500, shared.BaseErrorResponse{
|
|
Success: false,
|
|
Code: 500,
|
|
Message: "error finding user by keycloak id",
|
|
Errors: errMessage,
|
|
})
|
|
return
|
|
}
|
|
|
|
//if not exist, create user & permission
|
|
if len(users) == 0 {
|
|
err = h.repo.CreateUserPermission(c, req)
|
|
} else { //if exist, update role permission
|
|
userId := users[0].ID
|
|
err = h.repo.UpdateUserPermission(c, userId, req)
|
|
}
|
|
|
|
if err != nil {
|
|
errMessage := []string{err.Error()}
|
|
c.JSON(500, shared.BaseErrorResponse{
|
|
Success: false,
|
|
Code: 500,
|
|
Message: "update / insert permission error",
|
|
Errors: errMessage,
|
|
})
|
|
return
|
|
}
|
|
|
|
c.JSON(200, shared.BaseResponse[SyncKeycloakRoleRequest]{
|
|
Success: true,
|
|
Code: 200,
|
|
Message: "success sync role",
|
|
Data: req,
|
|
})
|
|
}
|
|
|
|
// GetPageByKeycloakId godoc
|
|
// @Summary Get Pages By Keycloak Id
|
|
// @Tags Access Role
|
|
// @Param keycloak_id query string true "Keycloak ID"
|
|
// @Success 200 {object} shared.BaseResponse
|
|
// @Failure 500 {object} shared.BaseErrorResponse
|
|
// @Router /access/eligible-menu [get]
|
|
func (h AccessHandler) GetPageByKeycloakId(c *gin.Context) {
|
|
keycloakId := c.Query("keycloak_id")
|
|
|
|
pageResult, err := h.repo.GetAvailablePageByKeycloakId(c, keycloakId)
|
|
if err != nil {
|
|
errMessage := []string{err.Error()}
|
|
c.JSON(500, shared.BaseErrorResponse{
|
|
Success: false,
|
|
Code: 500,
|
|
Message: "error fetch page by keycloak id",
|
|
Errors: errMessage,
|
|
})
|
|
return
|
|
}
|
|
|
|
c.JSON(200, shared.BaseResponse[[]AvailableMenuResponse]{
|
|
Success: true,
|
|
Code: 200,
|
|
Message: "success fetch eligible page",
|
|
Data: MapMenuModelToResponse(pageResult),
|
|
})
|
|
}
|