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} } 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, }) } 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), }) }