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" }