turash/bugulma/backend/internal/localization/handlers/site_handler.go

98 lines
2.1 KiB
Go

package handlers
import (
"bugulma/backend/internal/domain"
"gorm.io/gorm"
)
// siteHandler implements EntityHandler for Site entities
type siteHandler struct{}
func NewSiteHandler() domain.EntityHandler[*domain.Site] {
return &siteHandler{}
}
func (h *siteHandler) GetEntityID(entity *domain.Site) string {
return entity.ID
}
func (h *siteHandler) GetFieldValue(entity *domain.Site, field string) string {
switch field {
case "name":
return entity.Name
case "notes":
return entity.Notes
case "builder_owner":
return entity.BuilderOwner
case "architect":
return entity.Architect
case "original_purpose":
return entity.OriginalPurpose
case "current_use":
return entity.CurrentUse
case "style":
return entity.Style
case "materials":
return entity.Materials
default:
return ""
}
}
func (h *siteHandler) GetLocalizableFields() []string {
return []string{
"name",
"notes",
"builder_owner",
"architect",
"original_purpose",
"current_use",
"style",
"materials",
}
}
func (h *siteHandler) LoadEntities(db *gorm.DB, options domain.EntityLoadOptions) ([]*domain.Site, error) {
var sites []*domain.Site
query := db.Model(&domain.Site{})
// Filter by heritage status unless --all-sites flag is set
if !options.IncludeAllSites {
query = query.Where("heritage_status IS NOT NULL AND heritage_status != ''")
}
if err := query.Find(&sites).Error; err != nil {
return nil, err
}
return sites, nil
}
func (h *siteHandler) BuildFieldQuery(db *gorm.DB, field, value string) *gorm.DB {
switch field {
case "name":
return db.Where("name = ?", value)
case "notes":
return db.Where("notes = ?", value)
case "builder_owner":
return db.Where("builder_owner = ?", value)
case "architect":
return db.Where("architect = ?", value)
case "original_purpose":
return db.Where("original_purpose = ?", value)
case "current_use":
return db.Where("current_use = ?", value)
case "style":
return db.Where("style = ?", value)
case "materials":
return db.Where("materials = ?", value)
default:
return db
}
}
func (h *siteHandler) GetEntityType() string {
return "site"
}