package repositories import ( "SimplyCPQ2/internal/models" "database/sql" ) type ValueRepository struct { db *sql.DB cache map[int]models.Value } func NewValueRepository(db *sql.DB) *ValueRepository { return &ValueRepository{ db: db, cache: make(map[int]models.Value), } } func (r *ValueRepository) GetValueByID(id int) (models.Value, error) { if value, ok := r.cache[id]; ok { return value, nil } var value models.Value err := r.db.QueryRow("SELECT id, value, image_url FROM values WHERE id = ?", id).Scan(&value.Id, &value.Value, &value.ImageURL) if err != nil { return models.Value{}, err } r.cache[id] = value return value, nil } func (r *ValueRepository) GetValuesByPropertyId(pid int) ([]models.Value, error) { rows, err := r.db.Query("SELECT id, value, image_url, properties_id FROM values WHERE properties_id = ?", pid) if err != nil { return nil, err } defer rows.Close() var values []models.Value for rows.Next() { var value models.Value err := rows.Scan(&value.Id, &value.Value, &value.ImageURL, &value.PropertiesId) if err != nil { return nil, err } if cachedValue, ok := r.cache[value.Id]; ok { values = append(values, cachedValue) } else { r.cache[value.Id] = value values = append(values, value) } } if err := rows.Err(); err != nil { return nil, err } return values, nil } func (r *ValueRepository) CreateValue(value models.Value) (models.Value, error) { result, err := r.db.Exec("INSERT INTO values (value, image_url, properties_id) VALUES (?, ?, ?)", value.Value, value.ImageURL, value.PropertiesId) if err != nil { return models.Value{}, err } id, err := result.LastInsertId() if err != nil { return models.Value{}, err } value.Id = int(id) r.cache[value.Id] = value return value, nil }