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{
|
var filter = &query.RoleFilter{
|
||||||
ClientID: ctx.Query("client_id"),
|
ClientID: ctx.Query("client_id"),
|
||||||
Name: ctx.Query("name"),
|
Name: ctx.Query("name"),
|
||||||
|
Level: ctx.Query("level"),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// logrus.Info("Filter: ", filter)
|
||||||
|
filter.BindPagination(ctx)
|
||||||
|
ctx.ShouldBindQuery(filter)
|
||||||
|
|
||||||
if getAll == "true" {
|
if getAll == "true" {
|
||||||
// Ambil semua data tanpa paginasi
|
// Ambil semua data tanpa paginasi
|
||||||
roles, err := r.roleService.GetAll(ctx.Request.Context())
|
roles, err := r.roleService.GetAll(ctx.Request.Context())
|
||||||
|
|
@ -261,9 +266,6 @@ func (r *roleController) GetRoles(ctx *gin.Context) {
|
||||||
ctx.JSON(http.StatusOK, res)
|
ctx.JSON(http.StatusOK, res)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
// logrus.Info("Filter: ", filter)
|
|
||||||
filter.BindPagination(ctx)
|
|
||||||
ctx.ShouldBindQuery(filter)
|
|
||||||
|
|
||||||
roles, total, err := pagination.PaginatedQueryWithIncludable[query.M_Role](r.db, filter)
|
roles, total, err := pagination.PaginatedQueryWithIncludable[query.M_Role](r.db, filter)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,8 @@ package query
|
||||||
|
|
||||||
import (
|
import (
|
||||||
// "github.com/Caknoooo/go-gin-clean-starter/database/entities"
|
// "github.com/Caknoooo/go-gin-clean-starter/database/entities"
|
||||||
|
"strconv"
|
||||||
|
|
||||||
"github.com/Caknoooo/go-gin-clean-starter/database/entities"
|
"github.com/Caknoooo/go-gin-clean-starter/database/entities"
|
||||||
"github.com/Caknoooo/go-pagination"
|
"github.com/Caknoooo/go-pagination"
|
||||||
"gorm.io/gorm"
|
"gorm.io/gorm"
|
||||||
|
|
@ -24,6 +26,7 @@ type RoleFilter struct {
|
||||||
pagination.BaseFilter
|
pagination.BaseFilter
|
||||||
Name string `form:"name"` // tambahkan ini
|
Name string `form:"name"` // tambahkan ini
|
||||||
ClientID string `form:"client_id"` // tambahkan ini
|
ClientID string `form:"client_id"` // tambahkan ini
|
||||||
|
Level string `form:"level"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *RoleFilter) ApplyFilters(query *gorm.DB) *gorm.DB {
|
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 != "" {
|
if f.ClientID != "" {
|
||||||
query = query.Where("client_id = ?", 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{}).
|
query = query.Model(entities.M_Role{}).
|
||||||
Preload("Client", func(db *gorm.DB) *gorm.DB {
|
Preload("Client", func(db *gorm.DB) *gorm.DB {
|
||||||
|
|
|
||||||
|
|
@ -250,9 +250,13 @@ func (c *userController) GetAllUser(ctx *gin.Context) {
|
||||||
Name: ctx.Query("name"),
|
Name: ctx.Query("name"),
|
||||||
GroupID: ctx.Query("group_id"),
|
GroupID: ctx.Query("group_id"),
|
||||||
RoleID: ctx.Query("role_id"),
|
RoleID: ctx.Query("role_id"),
|
||||||
|
Level: ctx.Query("level"),
|
||||||
Includes: []string{"Roles"},
|
Includes: []string{"Roles"},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
filter.BindPagination(ctx)
|
||||||
|
ctx.ShouldBindQuery(filter)
|
||||||
|
|
||||||
if getAll == "true" {
|
if getAll == "true" {
|
||||||
// Ambil semua data tanpa paginasi
|
// Ambil semua data tanpa paginasi
|
||||||
users, err := c.userService.GetAll(ctx.Request.Context())
|
users, err := c.userService.GetAll(ctx.Request.Context())
|
||||||
|
|
@ -267,8 +271,6 @@ func (c *userController) GetAllUser(ctx *gin.Context) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
filter.BindPagination(ctx)
|
|
||||||
ctx.ShouldBindQuery(filter)
|
|
||||||
users, total, err := pagination.PaginatedQueryWithIncludable[query.M_User](c.db, filter)
|
users, total, err := pagination.PaginatedQueryWithIncludable[query.M_User](c.db, filter)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
res := utils.BuildResponseFailed(dto.MESSAGE_FAILED_GET_USER, err.Error(), nil)
|
res := utils.BuildResponseFailed(dto.MESSAGE_FAILED_GET_USER, err.Error(), nil)
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,8 @@
|
||||||
package query
|
package query
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"strconv"
|
||||||
|
|
||||||
"github.com/Caknoooo/go-gin-clean-starter/database/entities"
|
"github.com/Caknoooo/go-gin-clean-starter/database/entities"
|
||||||
"github.com/Caknoooo/go-pagination"
|
"github.com/Caknoooo/go-pagination"
|
||||||
"gorm.io/gorm"
|
"gorm.io/gorm"
|
||||||
|
|
@ -29,6 +31,7 @@ type UserFilter struct {
|
||||||
GroupID string `form:"group_id"` // tambahkan ini
|
GroupID string `form:"group_id"` // tambahkan ini
|
||||||
RoleID string `form:"role_id"` // tambahkan ini
|
RoleID string `form:"role_id"` // tambahkan ini
|
||||||
Includes []string `form:"includes"` // tambahkan ini
|
Includes []string `form:"includes"` // tambahkan ini
|
||||||
|
Level string `form:"level"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *UserFilter) ApplyFilters(query *gorm.DB) *gorm.DB {
|
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)
|
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
|
// add preload clients
|
||||||
query = query.Model(&M_User{}).Preload("Client", func(db *gorm.DB) *gorm.DB {
|
query = query.Model(&M_User{}).Preload("Client", func(db *gorm.DB) *gorm.DB {
|
||||||
return db.Select("id", "name")
|
return db.Select("id", "name")
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue