fix(ingestion): name the district and commodity on signal endpoints
The console's mandi and climate tables read districtName and commodityName; the endpoints returned districtId and commodityId, so every row rendered blank against a real backend. It went unnoticed because until today nothing had ever run and the screen only ever showed its demo fallback. Names are added alongside the entity's own fields, so a screen does not need the whole master list to render one row. Climate keys now match the UI's contract exactly (tmaxC, hotDays, rainfallAnomalyPct). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -2,6 +2,7 @@ package com.lincfusion.udyamlinc.ingestion;
|
||||
|
||||
import com.lincfusion.udyamlinc.common.ApiResponse;
|
||||
import com.lincfusion.udyamlinc.master.District;
|
||||
import com.lincfusion.udyamlinc.master.CommodityRepository;
|
||||
import com.lincfusion.udyamlinc.master.DistrictRepository;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.data.domain.PageRequest;
|
||||
@@ -31,6 +32,7 @@ public class IngestionController {
|
||||
private final ClimateSignalRepository climateSignalRepository;
|
||||
private final ApiLogRepository apiLogRepository;
|
||||
private final DistrictRepository districtRepository;
|
||||
private final CommodityRepository commodityRepository;
|
||||
|
||||
// ── what ran ────────────────────────────────────────────
|
||||
|
||||
@@ -54,16 +56,66 @@ public class IngestionController {
|
||||
|
||||
// ── what it wrote ───────────────────────────────────────
|
||||
|
||||
/**
|
||||
* Signals with their district and commodity named, not as foreign keys.
|
||||
*
|
||||
* <p>The console shows a mandi table, and a screen that has to resolve ids
|
||||
* itself would need the whole master list to render one row. The entity's own
|
||||
* fields are passed through unchanged alongside the names.
|
||||
*/
|
||||
@GetMapping("/signals/market")
|
||||
public ApiResponse<List<MarketSignal>> marketSignals(@RequestParam(defaultValue = "12") int weeks) {
|
||||
return ApiResponse.ok(marketSignalRepository
|
||||
.findByWeekStartGreaterThanEqualOrderByWeekStartDesc(Weeks.startOf(LocalDate.now()).minusWeeks(weeks)));
|
||||
public ApiResponse<List<Map<String, Object>>> marketSignals(@RequestParam(defaultValue = "12") int weeks) {
|
||||
Map<Long, String> districts = new java.util.HashMap<>();
|
||||
districtRepository.findAll().forEach(d -> districts.put(d.getId(), d.getName()));
|
||||
Map<Long, String> commodities = new java.util.HashMap<>();
|
||||
commodityRepository.findAll().forEach(c -> commodities.put(c.getId(), c.getName()));
|
||||
|
||||
List<Map<String, Object>> out = new ArrayList<>();
|
||||
for (MarketSignal signal : marketSignalRepository
|
||||
.findByWeekStartGreaterThanEqualOrderByWeekStartDesc(Weeks.startOf(LocalDate.now()).minusWeeks(weeks))) {
|
||||
Map<String, Object> row = new java.util.LinkedHashMap<>();
|
||||
row.put("id", signal.getId());
|
||||
row.put("districtName", districts.getOrDefault(signal.getDistrictId(), "—"));
|
||||
row.put("commodityName", commodities.getOrDefault(signal.getCommodityId(), "—"));
|
||||
row.put("weekStart", signal.getWeekStart());
|
||||
row.put("modalPrice", signal.getModalPrice());
|
||||
row.put("minPrice", signal.getMinPrice());
|
||||
row.put("maxPrice", signal.getMaxPrice());
|
||||
row.put("arrivalCount", signal.getArrivalCount());
|
||||
row.put("unit", signal.getUnit());
|
||||
row.put("source", signal.getSource());
|
||||
row.put("validForDate", signal.getValidForDate());
|
||||
row.put("observedAt", signal.getObservedAt());
|
||||
out.add(row);
|
||||
}
|
||||
return ApiResponse.ok(out);
|
||||
}
|
||||
|
||||
@GetMapping("/signals/climate")
|
||||
public ApiResponse<List<ClimateSignal>> climateSignals(@RequestParam(defaultValue = "12") int weeks) {
|
||||
return ApiResponse.ok(climateSignalRepository
|
||||
.findByWeekStartGreaterThanEqualOrderByWeekStartDesc(Weeks.startOf(LocalDate.now()).minusWeeks(weeks)));
|
||||
public ApiResponse<List<Map<String, Object>>> climateSignals(@RequestParam(defaultValue = "12") int weeks) {
|
||||
Map<Long, String> districts = new java.util.HashMap<>();
|
||||
districtRepository.findAll().forEach(d -> districts.put(d.getId(), d.getName()));
|
||||
|
||||
List<Map<String, Object>> out = new ArrayList<>();
|
||||
for (ClimateSignal signal : climateSignalRepository
|
||||
.findByWeekStartGreaterThanEqualOrderByWeekStartDesc(Weeks.startOf(LocalDate.now()).minusWeeks(weeks))) {
|
||||
Map<String, Object> row = new java.util.LinkedHashMap<>();
|
||||
row.put("id", signal.getId());
|
||||
row.put("districtName", districts.getOrDefault(signal.getDistrictId(), "—"));
|
||||
row.put("weekStart", signal.getWeekStart());
|
||||
row.put("isoWeek", signal.getIsoWeek());
|
||||
row.put("rainfallMm", signal.getRainfallMm());
|
||||
row.put("rainfallNormalMm", signal.getRainfallNormalMm());
|
||||
row.put("rainfallAnomalyPct", signal.getRainfallAnomalyPct());
|
||||
row.put("tmaxC", signal.getTmaxC());
|
||||
row.put("tmaxNormalC", signal.getTmaxNormalC());
|
||||
row.put("heatAnomalyC", signal.getHeatAnomalyC());
|
||||
row.put("hotDays", signal.getHotDays());
|
||||
row.put("validForDate", signal.getValidForDate());
|
||||
row.put("observedAt", signal.getObservedAt());
|
||||
out.add(row);
|
||||
}
|
||||
return ApiResponse.ok(out);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user