From 1bcc642c499d96c43ae093262df157267f8a6e48 Mon Sep 17 00:00:00 2001 From: renaldybrada Date: Wed, 25 Feb 2026 11:28:34 +0700 Subject: [PATCH] endpoint list role permission --- docs/docs.go | 2 +- docs/swagger.json | 2 +- docs/swagger.yaml | 2 +- internal/domain/access/handler.go | 28 ++++++++++++++ internal/domain/access/repository.go | 55 ++++++++++++++++++++++++++++ internal/domain/access/request.go | 6 +++ internal/domain/access/response.go | 5 +++ internal/domain/access/routes.go | 2 + 8 files changed, 99 insertions(+), 3 deletions(-) diff --git a/docs/docs.go b/docs/docs.go index 0155ddc..dd4d6f3 100644 --- a/docs/docs.go +++ b/docs/docs.go @@ -51,7 +51,7 @@ const docTemplate = `{ "tags": [ "Access Role" ], - "summary": "Get List User And Role", + "summary": "Get List Role Page Settings", "parameters": [ { "type": "string", diff --git a/docs/swagger.json b/docs/swagger.json index dff91ff..e59f100 100644 --- a/docs/swagger.json +++ b/docs/swagger.json @@ -45,7 +45,7 @@ "tags": [ "Access Role" ], - "summary": "Get List User And Role", + "summary": "Get List Role Page Settings", "parameters": [ { "type": "string", diff --git a/docs/swagger.yaml b/docs/swagger.yaml index 81ed26a..7cc5433 100644 --- a/docs/swagger.yaml +++ b/docs/swagger.yaml @@ -510,7 +510,7 @@ paths: description: Internal Server Error schema: $ref: '#/definitions/shared.BaseErrorResponse' - summary: Get List User And Role + summary: Get List Role Page Settings tags: - Access Role /access/sync-keycloak-role: diff --git a/internal/domain/access/handler.go b/internal/domain/access/handler.go index 810ccf0..6665fbf 100644 --- a/internal/domain/access/handler.go +++ b/internal/domain/access/handler.go @@ -137,8 +137,36 @@ func (h AccessHandler) ListUserRole(c *gin.Context) { )) } +// ListRolePageSettings godoc +// @Summary Get List Role Page Settings +// @Tags Access Role +// @Param search query string false "Search Keyword" +// @Param limit query string false "Limit" default(10) +// @Param offset query string false "Offset" default(0) +// @Success 200 {object} []UserRoleResponse +// @Failure 500 {object} shared.BaseErrorResponse +// @Router /access/list-user [get] func (h AccessHandler) ListRolePageSettings(c *gin.Context) { + var query QueryListRolePermission + if err := c.ShouldBindQuery(&query); err != nil { + c.JSON(400, gin.H{"error": err.Error()}) + return + } + res, err := h.repo.ListRolePermission(c.Request.Context(), query) + if err != nil { + c.JSON(500, shared.BaseErrorResponse{ + Success: false, + Code: 500, + Message: err.Error(), + }) + return + } + + c.JSON(200, + shared.ToBaseResponsePaginate( + res.Data, res.Paging, true, 200, "success get list role permission", + )) } func (h AccessHandler) DetailRolePageSettings(c *gin.Context) { diff --git a/internal/domain/access/repository.go b/internal/domain/access/repository.go index dc01dbc..399d16f 100644 --- a/internal/domain/access/repository.go +++ b/internal/domain/access/repository.go @@ -25,6 +25,7 @@ type IAccessRepository interface { UpdateUserPermission(c context.Context, userId string, req SyncKeycloakRoleRequest) error GetAvailablePageByKeycloakId(c context.Context, keycloakId string) ([]RolePageModel, error) ListUserRole(c context.Context, q QueryListUserRole) (ListUserRolePaginateResponse, error) + ListRolePermission(c context.Context, q QueryListRolePermission) (ListRolePermissionPaginateResponse, error) } type accessRepo struct { @@ -258,6 +259,60 @@ func (r accessRepo) ListUserRole(c context.Context, q QueryListUserRole) (ListUs return result, nil } +func (r accessRepo) ListRolePermission(c context.Context, q QueryListRolePermission) (ListRolePermissionPaginateResponse, error) { + var result ListRolePermissionPaginateResponse + + query := queryUtils.DynamicQuery{ + From: TBL_PERMISSION, + Fields: []queryUtils.SelectField{ + {Expression: "id"}, + {Expression: "name"}, + {Expression: "is_active"}, + }, + Sort: []queryUtils.SortField{ + {Column: "created_at", Order: "DESC"}, + }, + } + + if q.Search != "" { + searchFilters := []queryUtils.DynamicFilter{ + {Column: "name", Operator: queryUtils.OpILike, Value: "%" + q.Search + "%"}, + } + + query.Filters = append(query.Filters, queryUtils.FilterGroup{Filters: searchFilters, LogicOp: "OR"}) + } + + dbconn, err := r.db.GetSQLXDB(DB_NAME) + if err != nil { + log.Printf("Unable to connect db : %s", err) + return result, err + } + + // query count + countData, err := r.queryBuilder.ExecuteCount(c, dbconn, query) + if err != nil { + log.Printf("Unable to execute query count : %s ", err) + return result, err + } + result.Paging.Limit = q.Limit + result.Paging.Offset = q.Offset + result.Paging.Total = int(countData) + result.Paging.CalculatePagingInfo() + + // query data + queryData := query + queryData.Limit = q.Limit + queryData.Offset = q.Offset + err = r.queryBuilder.ExecuteQuery( + c, dbconn, queryData, &result.Data) + if err != nil { + log.Printf("Unable to execute query data : %s", err) + return result, err + } + + return result, nil +} + // PRIVATE FUNCTIONS // Table user function diff --git a/internal/domain/access/request.go b/internal/domain/access/request.go index 9c51b90..2dfc326 100644 --- a/internal/domain/access/request.go +++ b/internal/domain/access/request.go @@ -18,3 +18,9 @@ type QueryListUserRole struct { Limit int `form:"limit,default=10"` Offset int `form:"offset,default=0"` } + +type QueryListRolePermission struct { + Search string `form:"search"` + Limit int `form:"limit,default=10"` + Offset int `form:"offset,default=0"` +} diff --git a/internal/domain/access/response.go b/internal/domain/access/response.go index bc008d9..e53bc1f 100644 --- a/internal/domain/access/response.go +++ b/internal/domain/access/response.go @@ -56,3 +56,8 @@ type ListUserRolePaginateResponse struct { Data []UserRoleResponse Paging shared.PaginationInfo } + +type ListRolePermissionPaginateResponse struct { + Data []RolePermissionModel + Paging shared.PaginationInfo +} diff --git a/internal/domain/access/routes.go b/internal/domain/access/routes.go index 937fe66..3a4427d 100644 --- a/internal/domain/access/routes.go +++ b/internal/domain/access/routes.go @@ -13,4 +13,6 @@ func RegisterRoutes(r *gin.RouterGroup, dbService database.Service) { r.POST("/sync-keycloak-role", accessHandler.SyncKeycloakRole) r.GET("/eligible-menu", accessHandler.GetPageByKeycloakId) r.GET("/list-user", accessHandler.ListUserRole) + + r.GET("/role-permission", accessHandler.ListRolePageSettings) }