alter primary keys to uuids and adjust the membership system

This commit is contained in:
Fran Jurmanović
2025-06-30 22:50:52 +02:00
parent caba5bae70
commit c17e7742ee
53 changed files with 12641 additions and 805 deletions

View File

@@ -2,6 +2,9 @@ package model
import (
"time"
"github.com/google/uuid"
"gorm.io/gorm"
)
// BaseFilter contains common filter fields that can be embedded in other filters
@@ -20,14 +23,14 @@ type DateRangeFilter struct {
// ServerBasedFilter adds server ID filtering capability
type ServerBasedFilter struct {
ServerID int `param:"id"`
ServerID string `param:"id"`
}
// ConfigFilter defines filtering options for Config queries
type ConfigFilter struct {
BaseFilter
ServerBasedFilter
ConfigFile string `query:"config_file"`
ConfigFile string `query:"config_file"`
ChangedAt time.Time `query:"changed_at" time_format:"2006-01-02T15:04:05Z07:00"`
}
@@ -37,6 +40,14 @@ type ApiFilter struct {
Api string `query:"api"`
}
// MembershipFilter defines filtering options for User queries
type MembershipFilter struct {
BaseFilter
Username string `query:"username"`
RoleName string `query:"role_name"`
RoleID string `query:"role_id"`
}
// Pagination returns the offset and limit for database queries
func (f *BaseFilter) Pagination() (offset, limit int) {
if f.Page < 1 {
@@ -64,4 +75,30 @@ func (f *DateRangeFilter) IsDateRangeValid() bool {
return true // If either date is not set, consider it valid
}
return f.StartDate.Before(f.EndDate)
}
}
// ApplyFilter applies the membership filter to a GORM query
func (f *MembershipFilter) ApplyFilter(query *gorm.DB) *gorm.DB {
if f.Username != "" {
query = query.Where("username LIKE ?", "%"+f.Username+"%")
}
if f.RoleName != "" {
query = query.Joins("JOIN roles ON users.role_id = roles.id").Where("roles.name = ?", f.RoleName)
}
if f.RoleID != "" {
if roleUUID, err := uuid.Parse(f.RoleID); err == nil {
query = query.Where("role_id = ?", roleUUID)
}
}
return query
}
// Pagination returns the offset and limit for database queries
func (f *MembershipFilter) Pagination() (offset, limit int) {
return f.BaseFilter.Pagination()
}
// GetSorting returns the sort field and direction for database queries
func (f *MembershipFilter) GetSorting() (field string, desc bool) {
return f.BaseFilter.GetSorting()
}