Skip to content

Commit 2167f7c

Browse files
committed
Add maintenance record history view
1 parent 5139db2 commit 2167f7c

6 files changed

Lines changed: 403 additions & 51 deletions

File tree

backend/src/main/java/com/apexgrid/transformertracker/repo/MaintenanceRecordRepo.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@
33
import com.apexgrid.transformertracker.model.MaintenanceRecord;
44
import org.springframework.data.jpa.repository.JpaRepository;
55

6+
import java.util.List;
67
import java.util.Optional;
78

89
public interface MaintenanceRecordRepo extends JpaRepository<MaintenanceRecord, String> {
910
Optional<MaintenanceRecord> findByInspectionId(String inspectionId);
1011
boolean existsByInspectionId(String inspectionId);
12+
List<MaintenanceRecord> findAllByInspection_Transformer_IdOrderByTimestampDesc(String transformerId);
1113
}

backend/src/main/java/com/apexgrid/transformertracker/web/InspectionController.java

Lines changed: 1 addition & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import com.fasterxml.jackson.databind.node.ArrayNode;
1515
import com.fasterxml.jackson.databind.node.NullNode;
1616
import com.fasterxml.jackson.databind.node.ObjectNode;
17+
import com.apexgrid.transformertracker.web.dto.MaintenanceRecordResponse;
1718
import org.springframework.core.io.ClassPathResource;
1819
import org.springframework.http.ContentDisposition;
1920
import org.springframework.http.HttpHeaders;
@@ -395,38 +396,6 @@ public record MaintenanceRecordRequest(
395396
String remarks
396397
) { }
397398

398-
public record MaintenanceRecordResponse(
399-
String id,
400-
String inspectionId,
401-
String inspectionDate,
402-
String transformerName,
403-
String timestamp,
404-
String inspectorName,
405-
String status,
406-
BigDecimal voltage,
407-
BigDecimal current,
408-
BigDecimal efficiency,
409-
String recommendation,
410-
String remarks
411-
) {
412-
static MaintenanceRecordResponse fromEntity(MaintenanceRecord record) {
413-
return new MaintenanceRecordResponse(
414-
record.getId(),
415-
record.getInspection() != null ? record.getInspection().getId() : null,
416-
record.getInspectionDate(),
417-
record.getTransformerName(),
418-
record.getTimestamp(),
419-
record.getInspectorName(),
420-
record.getStatus(),
421-
record.getVoltage(),
422-
record.getCurrent(),
423-
record.getEfficiency(),
424-
record.getRecommendation(),
425-
record.getRemarks()
426-
);
427-
}
428-
}
429-
430399
@PostMapping("/{id}/analyze")
431400
public ResponseEntity<?> analyze(@PathVariable String id,
432401
@RequestParam("file") MultipartFile file,

backend/src/main/java/com/apexgrid/transformertracker/web/TransformerController.java

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package com.apexgrid.transformertracker.web;
22

33
import com.apexgrid.transformertracker.model.Transformer;
4+
import com.apexgrid.transformertracker.repo.MaintenanceRecordRepo;
45
import com.apexgrid.transformertracker.repo.TransformerRepo;
6+
import com.apexgrid.transformertracker.web.dto.MaintenanceRecordResponse;
57
import org.springframework.http.ResponseEntity;
68
import org.springframework.security.core.annotation.AuthenticationPrincipal;
79
import org.springframework.security.core.userdetails.UserDetails;
@@ -17,9 +19,12 @@
1719
@RequestMapping("/api/transformers")
1820
public class TransformerController {
1921
private final TransformerRepo repo;
22+
private final MaintenanceRecordRepo maintenanceRecordRepo;
2023

21-
public TransformerController(TransformerRepo repo) {
24+
public TransformerController(TransformerRepo repo,
25+
MaintenanceRecordRepo maintenanceRecordRepo) {
2226
this.repo = repo;
27+
this.maintenanceRecordRepo = maintenanceRecordRepo;
2328
}
2429

2530
@GetMapping
@@ -86,4 +91,18 @@ public ResponseEntity<?> uploadBaseline(@PathVariable String id,
8691
}
8792
}).orElse(ResponseEntity.notFound().build());
8893
}
94+
95+
@GetMapping("/{id}/maintenance-records")
96+
public ResponseEntity<?> listMaintenanceRecords(@PathVariable String id) {
97+
var transformer = repo.findById(id).or(() -> repo.findByTransformerNumber(id));
98+
if (transformer.isEmpty()) {
99+
return ResponseEntity.status(404).body(Map.of("error", "Transformer not found"));
100+
}
101+
var payload = maintenanceRecordRepo
102+
.findAllByInspection_Transformer_IdOrderByTimestampDesc(transformer.get().getId())
103+
.stream()
104+
.map(MaintenanceRecordResponse::fromEntity)
105+
.toList();
106+
return ResponseEntity.ok(payload);
107+
}
89108
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package com.apexgrid.transformertracker.web.dto;
2+
3+
import com.apexgrid.transformertracker.model.MaintenanceRecord;
4+
5+
import java.math.BigDecimal;
6+
7+
public record MaintenanceRecordResponse(
8+
String id,
9+
String inspectionId,
10+
String inspectionDate,
11+
String transformerName,
12+
String timestamp,
13+
String inspectorName,
14+
String status,
15+
BigDecimal voltage,
16+
BigDecimal current,
17+
BigDecimal efficiency,
18+
String recommendation,
19+
String remarks
20+
) {
21+
public static MaintenanceRecordResponse fromEntity(MaintenanceRecord record) {
22+
if (record == null) {
23+
return null;
24+
}
25+
return new MaintenanceRecordResponse(
26+
record.getId(),
27+
record.getInspection() != null ? record.getInspection().getId() : null,
28+
record.getInspectionDate(),
29+
record.getTransformerName(),
30+
record.getTimestamp(),
31+
record.getInspectorName(),
32+
record.getStatus(),
33+
record.getVoltage(),
34+
record.getCurrent(),
35+
record.getEfficiency(),
36+
record.getRecommendation(),
37+
record.getRemarks()
38+
);
39+
}
40+
}

frontend/components/InspectionDetailsPanel.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3062,11 +3062,11 @@ const InspectionDetailsPanel = ({
30623062
</div>
30633063
<div className="grid grid-cols-1 sm:grid-cols-3 gap-4">
30643064
<div>
3065-
<p className="text-xs uppercase tracking-wide text-gray-500">Voltage</p>
3065+
<p className="text-xs uppercase tracking-wide text-gray-500">Voltage (V)</p>
30663066
<p>{maintenanceRecord.voltage ?? "—"}</p>
30673067
</div>
30683068
<div>
3069-
<p className="text-xs uppercase tracking-wide text-gray-500">Current</p>
3069+
<p className="text-xs uppercase tracking-wide text-gray-500">Current (A)</p>
30703070
<p>{maintenanceRecord.current ?? "—"}</p>
30713071
</div>
30723072
<div>
@@ -3163,7 +3163,7 @@ const InspectionDetailsPanel = ({
31633163
/>
31643164
</label>
31653165
<label className="text-sm text-gray-700 dark:text-gray-200">
3166-
<span className="block text-xs uppercase tracking-wide mb-1">Voltage</span>
3166+
<span className="block text-xs uppercase tracking-wide mb-1">Voltage (V)</span>
31673167
<input
31683168
type="number"
31693169
step="any"
@@ -3175,7 +3175,7 @@ const InspectionDetailsPanel = ({
31753175
/>
31763176
</label>
31773177
<label className="text-sm text-gray-700 dark:text-gray-200">
3178-
<span className="block text-xs uppercase tracking-wide mb-1">Current</span>
3178+
<span className="block text-xs uppercase tracking-wide mb-1">Current (A)</span>
31793179
<input
31803180
type="number"
31813181
step="any"

0 commit comments

Comments
 (0)