feat: add Level filter to role and user queries for enhanced filtering capabilities
Deploy Application / deploy (push) Successful in 19s
Details
Deploy Application / deploy (push) Successful in 19s
Details
This commit is contained in:
parent
b77eab5ef3
commit
3197b693b3
|
|
@ -246,8 +246,13 @@ func (r *roleController) GetRoles(ctx *gin.Context) {
|
|||
var filter = &query.RoleFilter{
|
||||
ClientID: ctx.Query("client_id"),
|
||||
Name: ctx.Query("name"),
|
||||
Level: ctx.Query("level"),
|
||||
}
|
||||
|
||||
// logrus.Info("Filter: ", filter)
|
||||
filter.BindPagination(ctx)
|
||||
ctx.ShouldBindQuery(filter)
|
||||
|
||||
if getAll == "true" {
|
||||
// Ambil semua data tanpa paginasi
|
||||
roles, err := r.roleService.GetAll(ctx.Request.Context())
|
||||
|
|
@ -261,9 +266,6 @@ func (r *roleController) GetRoles(ctx *gin.Context) {
|
|||
ctx.JSON(http.StatusOK, res)
|
||||
return
|
||||
}
|
||||
// logrus.Info("Filter: ", filter)
|
||||
filter.BindPagination(ctx)
|
||||
ctx.ShouldBindQuery(filter)
|
||||
|
||||
roles, total, err := pagination.PaginatedQueryWithIncludable[query.M_Role](r.db, filter)
|
||||
if err != nil {
|
||||
|
|
|
|||
|
|
@ -2,6 +2,8 @@ package query
|
|||
|
||||
import (
|
||||
// "github.com/Caknoooo/go-gin-clean-starter/database/entities"
|
||||
"strconv"
|
||||
|
||||
"github.com/Caknoooo/go-gin-clean-starter/database/entities"
|
||||
"github.com/Caknoooo/go-pagination"
|
||||
"gorm.io/gorm"
|
||||
|
|
@ -24,6 +26,7 @@ type RoleFilter struct {
|
|||
pagination.BaseFilter
|
||||
Name string `form:"name"` // tambahkan ini
|
||||
ClientID string `form:"client_id"` // tambahkan ini
|
||||
Level string `form:"level"`
|
||||
}
|
||||
|
||||
func (f *RoleFilter) ApplyFilters(query *gorm.DB) *gorm.DB {
|
||||
|
|
@ -34,6 +37,11 @@ func (f *RoleFilter) ApplyFilters(query *gorm.DB) *gorm.DB {
|
|||
if f.ClientID != "" {
|
||||
query = query.Where("client_id = ?", f.ClientID)
|
||||
}
|
||||
if f.Level != "" {
|
||||
if levelInt, err := strconv.Atoi(f.Level); err == nil {
|
||||
query = query.Where("level = ?", levelInt)
|
||||
}
|
||||
}
|
||||
|
||||
query = query.Model(entities.M_Role{}).
|
||||
Preload("Client", func(db *gorm.DB) *gorm.DB {
|
||||
|
|
|
|||
|
|
@ -250,9 +250,13 @@ func (c *userController) GetAllUser(ctx *gin.Context) {
|
|||
Name: ctx.Query("name"),
|
||||
GroupID: ctx.Query("group_id"),
|
||||
RoleID: ctx.Query("role_id"),
|
||||
Level: ctx.Query("level"),
|
||||
Includes: []string{"Roles"},
|
||||
}
|
||||
|
||||
filter.BindPagination(ctx)
|
||||
ctx.ShouldBindQuery(filter)
|
||||
|
||||
if getAll == "true" {
|
||||
// Ambil semua data tanpa paginasi
|
||||
users, err := c.userService.GetAll(ctx.Request.Context())
|
||||
|
|
@ -267,8 +271,6 @@ func (c *userController) GetAllUser(ctx *gin.Context) {
|
|||
return
|
||||
}
|
||||
|
||||
filter.BindPagination(ctx)
|
||||
ctx.ShouldBindQuery(filter)
|
||||
users, total, err := pagination.PaginatedQueryWithIncludable[query.M_User](c.db, filter)
|
||||
if err != nil {
|
||||
res := utils.BuildResponseFailed(dto.MESSAGE_FAILED_GET_USER, err.Error(), nil)
|
||||
|
|
|
|||
|
|
@ -1,6 +1,8 @@
|
|||
package query
|
||||
|
||||
import (
|
||||
"strconv"
|
||||
|
||||
"github.com/Caknoooo/go-gin-clean-starter/database/entities"
|
||||
"github.com/Caknoooo/go-pagination"
|
||||
"gorm.io/gorm"
|
||||
|
|
@ -29,6 +31,7 @@ type UserFilter struct {
|
|||
GroupID string `form:"group_id"` // tambahkan ini
|
||||
RoleID string `form:"role_id"` // tambahkan ini
|
||||
Includes []string `form:"includes"` // tambahkan ini
|
||||
Level string `form:"level"`
|
||||
}
|
||||
|
||||
func (f *UserFilter) ApplyFilters(query *gorm.DB) *gorm.DB {
|
||||
|
|
@ -52,6 +55,14 @@ func (f *UserFilter) ApplyFilters(query *gorm.DB) *gorm.DB {
|
|||
Where("m_user_roles.role_id = ?", f.RoleID)
|
||||
}
|
||||
|
||||
if f.Level != "" {
|
||||
if levelInt, err := strconv.Atoi(f.Level); err == nil {
|
||||
query = query.Joins("JOIN m_user_roles ON m_user_roles.user_id = m_users.id").
|
||||
Joins("JOIN m_roles ON m_roles.id = m_user_roles.role_id").
|
||||
Where("m_roles.level = ?", levelInt)
|
||||
}
|
||||
}
|
||||
|
||||
// add preload clients
|
||||
query = query.Model(&M_User{}).Preload("Client", func(db *gorm.DB) *gorm.DB {
|
||||
return db.Select("id", "name")
|
||||
|
|
|
|||
Loading…
Reference in New Issue