90 lines
2.9 KiB
Go
90 lines
2.9 KiB
Go
package query
|
|
|
|
import (
|
|
"github.com/Caknoooo/go-gin-clean-starter/database/entities"
|
|
"github.com/Caknoooo/go-pagination"
|
|
"github.com/sirupsen/logrus"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
type M_MaintenanceGroup struct {
|
|
ID string `json:"id"`
|
|
Name string `json:"name"`
|
|
Code string `json:"code"`
|
|
Description string `json:"description"`
|
|
TotalMaintenanceGroupRole int `json:"total_maintenance_group_role"`
|
|
ClientID string `json:"client_id"` // <-- Add this line
|
|
Client entities.M_Client `gorm:"foreignKey:ClientID;references:ID" json:"client"`
|
|
MaintenanceGroupRoles []entities.M_MaintenanceGroupRole `gorm:"foreignKey:MaintenanceGroupID;references:ID" json:"maintenance_group_roles"`
|
|
}
|
|
|
|
type MaintenanceGroupFilter struct {
|
|
pagination.BaseFilter
|
|
Name string `form:"name"` // tambahkan ini
|
|
Code string `form:"code"` // tambahkan ini
|
|
Description string `form:"description"` // tambahkan ini
|
|
ClientID string `form:"client_id"` // tambahkan ini
|
|
Includes []string `form:"includes"` // tambahkan ini
|
|
}
|
|
|
|
func (f *MaintenanceGroupFilter) ApplyFilters(query *gorm.DB) *gorm.DB {
|
|
// ...existing code...
|
|
if f.Name != "" {
|
|
query = query.Where("name ILIKE ?", "%"+f.Name+"%")
|
|
}
|
|
if f.ClientID != "" {
|
|
query = query.Where("client_id = ?", f.ClientID)
|
|
logrus.Infof("Filtering by ClientID: %s", f.ClientID)
|
|
}
|
|
|
|
// Ganti ini:
|
|
// query = query.Model(entities.M_MaintenanceGroup{}).Preload("Client")
|
|
// Jadi:
|
|
query = query.Model(&M_MaintenanceGroup{}).
|
|
Preload("Client").
|
|
Preload("MaintenanceGroupRoles").
|
|
Preload("MaintenanceGroupRoles.Role")
|
|
|
|
query = query.Select("m_maintenance_groups.*, " +
|
|
"(SELECT COUNT(*) FROM m_maintenance_group_roles mgr WHERE mgr.maintenance_group_id = m_maintenance_groups.id AND mgr.deleted_at IS NULL) as total_maintenance_group_role")
|
|
|
|
return query
|
|
}
|
|
|
|
func (f *MaintenanceGroupFilter) GetTableName() string {
|
|
return "m_maintenance_groups"
|
|
}
|
|
|
|
func (f *MaintenanceGroupFilter) GetSearchFields() []string {
|
|
return []string{"name"}
|
|
}
|
|
|
|
func (f *MaintenanceGroupFilter) GetDefaultSort() string {
|
|
return "id asc"
|
|
}
|
|
|
|
func (f *MaintenanceGroupFilter) GetIncludes() []string {
|
|
return f.Includes
|
|
}
|
|
|
|
func (f *MaintenanceGroupFilter) GetPagination() pagination.PaginationRequest {
|
|
return f.Pagination
|
|
}
|
|
|
|
func (f *MaintenanceGroupFilter) Validate() {
|
|
var validIncludes []string
|
|
allowedIncludes := f.GetAllowedIncludes()
|
|
for _, include := range f.Includes {
|
|
if allowedIncludes[include] {
|
|
validIncludes = append(validIncludes, include)
|
|
}
|
|
}
|
|
f.Includes = validIncludes
|
|
}
|
|
|
|
func (f *MaintenanceGroupFilter) GetAllowedIncludes() map[string]bool {
|
|
return map[string]bool{
|
|
"Client": true,
|
|
}
|
|
}
|