package models import ( "database/sql" "fmt" "strconv" "time" ) type EngagementStrategy struct { ID int ValidFrom time.Time ValidTo time.Time Operation Operation } func (es *EngagementStrategy) FormatForTable() string { startYear := strconv.Itoa(es.ValidFrom.Year()) endYear := strconv.Itoa(es.ValidTo.Year()) return fmt.Sprintf("%s-%s", startYear, endYear) } type EngagementStrategyModel struct { DB *sql.DB } func (m *EngagementStrategyModel) GetForOperation(id int) ([]EngagementStrategy, error) { stmt := `SELECT id, valid_from, valid_to FROM engagement_strategies WHERE operation_id = ?` rows, err := m.DB.Query(stmt, id) if err != nil { return nil, err } defer rows.Close() var esses []EngagementStrategy for rows.Next() { var es EngagementStrategy err = rows.Scan(&es.ID, &es.ValidFrom, &es.ValidTo) if err != nil { return nil, err } esses = append(esses, es) } if err = rows.Err(); err != nil { return nil, err } return esses, nil }