adds chart workspace
This commit is contained in:
@@ -0,0 +1,97 @@
|
|||||||
|
package com.litoralregas.backend.charts;
|
||||||
|
|
||||||
|
import jakarta.persistence.*;
|
||||||
|
|
||||||
|
import java.time.Instant;
|
||||||
|
|
||||||
|
@Entity
|
||||||
|
@Table(name = "chart_workspace")
|
||||||
|
public class ChartWorkspace {
|
||||||
|
|
||||||
|
@Id
|
||||||
|
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||||
|
private Integer id;
|
||||||
|
|
||||||
|
@Enumerated(EnumType.STRING)
|
||||||
|
@Column(nullable = false, unique = true)
|
||||||
|
private ChartWorkspaceScope scope;
|
||||||
|
|
||||||
|
@Column(name = "layout_mode", nullable = false)
|
||||||
|
private String layoutMode;
|
||||||
|
|
||||||
|
@Column(name = "charts_json", nullable = false, columnDefinition = "TEXT")
|
||||||
|
private String chartsJson;
|
||||||
|
|
||||||
|
@Column(name = "created_at", nullable = false, updatable = false)
|
||||||
|
private Instant createdAt;
|
||||||
|
|
||||||
|
@Column(name = "updated_at", nullable = false)
|
||||||
|
private Instant updatedAt;
|
||||||
|
|
||||||
|
protected ChartWorkspace() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public ChartWorkspace(
|
||||||
|
ChartWorkspaceScope scope,
|
||||||
|
String layoutMode,
|
||||||
|
String chartsJson
|
||||||
|
) {
|
||||||
|
this.scope = scope;
|
||||||
|
this.layoutMode = layoutMode;
|
||||||
|
this.chartsJson = chartsJson;
|
||||||
|
}
|
||||||
|
|
||||||
|
@PrePersist
|
||||||
|
public void onCreate() {
|
||||||
|
Instant now = Instant.now();
|
||||||
|
|
||||||
|
if (createdAt == null) {
|
||||||
|
createdAt = now;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (updatedAt == null) {
|
||||||
|
updatedAt = now;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@PreUpdate
|
||||||
|
public void onUpdate() {
|
||||||
|
updatedAt = Instant.now();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ChartWorkspaceScope getScope() {
|
||||||
|
return scope;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setScope(ChartWorkspaceScope scope) {
|
||||||
|
this.scope = scope;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getLayoutMode() {
|
||||||
|
return layoutMode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLayoutMode(String layoutMode) {
|
||||||
|
this.layoutMode = layoutMode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getChartsJson() {
|
||||||
|
return chartsJson;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setChartsJson(String chartsJson) {
|
||||||
|
this.chartsJson = chartsJson;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Instant getCreatedAt() {
|
||||||
|
return createdAt;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Instant getUpdatedAt() {
|
||||||
|
return updatedAt;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
package com.litoralregas.backend.charts;
|
||||||
|
|
||||||
|
import com.litoralregas.backend.charts.dto.ChartWorkspaceRequest;
|
||||||
|
import com.litoralregas.backend.charts.dto.ChartWorkspaceResponse;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/api/chart-workspaces")
|
||||||
|
public class ChartWorkspaceController {
|
||||||
|
|
||||||
|
private final ChartWorkspaceService service;
|
||||||
|
|
||||||
|
public ChartWorkspaceController(
|
||||||
|
ChartWorkspaceService service
|
||||||
|
) {
|
||||||
|
this.service = service;
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/{scope}")
|
||||||
|
public ChartWorkspaceResponse getWorkspace(
|
||||||
|
@PathVariable ChartWorkspaceScope scope
|
||||||
|
) {
|
||||||
|
|
||||||
|
return service.getWorkspace(scope);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PutMapping("/{scope}")
|
||||||
|
public ChartWorkspaceResponse saveWorkspace(
|
||||||
|
@PathVariable ChartWorkspaceScope scope,
|
||||||
|
@RequestBody ChartWorkspaceRequest request
|
||||||
|
) {
|
||||||
|
|
||||||
|
return service.saveWorkspace(
|
||||||
|
scope,
|
||||||
|
request
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
package com.litoralregas.backend.charts;
|
||||||
|
|
||||||
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
|
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
public interface ChartWorkspaceRepository
|
||||||
|
extends JpaRepository<ChartWorkspace, Integer> {
|
||||||
|
|
||||||
|
Optional<ChartWorkspace> findByScope(
|
||||||
|
ChartWorkspaceScope scope
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
package com.litoralregas.backend.charts;
|
||||||
|
|
||||||
|
public enum ChartWorkspaceScope {
|
||||||
|
GLOBAL,
|
||||||
|
CLIMATE,
|
||||||
|
IRRIGATION,
|
||||||
|
METEO,
|
||||||
|
LIGHTING,
|
||||||
|
HYDRO,
|
||||||
|
AEROPONICS
|
||||||
|
}
|
||||||
@@ -0,0 +1,78 @@
|
|||||||
|
package com.litoralregas.backend.charts;
|
||||||
|
|
||||||
|
import com.litoralregas.backend.charts.dto.ChartWorkspaceRequest;
|
||||||
|
import com.litoralregas.backend.charts.dto.ChartWorkspaceResponse;
|
||||||
|
import jakarta.transaction.Transactional;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class ChartWorkspaceService {
|
||||||
|
|
||||||
|
private final ChartWorkspaceRepository repository;
|
||||||
|
|
||||||
|
public ChartWorkspaceService(
|
||||||
|
ChartWorkspaceRepository repository
|
||||||
|
) {
|
||||||
|
this.repository = repository;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Transactional
|
||||||
|
public ChartWorkspaceResponse saveWorkspace(
|
||||||
|
ChartWorkspaceScope scope,
|
||||||
|
ChartWorkspaceRequest request
|
||||||
|
) {
|
||||||
|
|
||||||
|
ChartWorkspace workspace =
|
||||||
|
repository.findByScope(scope)
|
||||||
|
.orElseGet(() ->
|
||||||
|
new ChartWorkspace(
|
||||||
|
scope,
|
||||||
|
request.layoutMode(),
|
||||||
|
request.chartsJson()
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
workspace.setLayoutMode(
|
||||||
|
request.layoutMode()
|
||||||
|
);
|
||||||
|
|
||||||
|
workspace.setChartsJson(
|
||||||
|
request.chartsJson()
|
||||||
|
);
|
||||||
|
|
||||||
|
ChartWorkspace saved =
|
||||||
|
repository.save(workspace);
|
||||||
|
|
||||||
|
return toResponse(saved);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ChartWorkspaceResponse getWorkspace(
|
||||||
|
ChartWorkspaceScope scope
|
||||||
|
) {
|
||||||
|
|
||||||
|
ChartWorkspace workspace =
|
||||||
|
repository.findByScope(scope)
|
||||||
|
.orElseThrow(() ->
|
||||||
|
new IllegalArgumentException(
|
||||||
|
"Workspace not found for scope: "
|
||||||
|
+ scope
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
return toResponse(workspace);
|
||||||
|
}
|
||||||
|
|
||||||
|
private ChartWorkspaceResponse toResponse(
|
||||||
|
ChartWorkspace workspace
|
||||||
|
) {
|
||||||
|
|
||||||
|
return new ChartWorkspaceResponse(
|
||||||
|
workspace.getId(),
|
||||||
|
workspace.getScope(),
|
||||||
|
workspace.getLayoutMode(),
|
||||||
|
workspace.getChartsJson(),
|
||||||
|
workspace.getCreatedAt(),
|
||||||
|
workspace.getUpdatedAt()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
package com.litoralregas.backend.charts.dto;
|
||||||
|
|
||||||
|
public record ChartWorkspaceRequest(
|
||||||
|
String layoutMode,
|
||||||
|
String chartsJson
|
||||||
|
) {
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
package com.litoralregas.backend.charts.dto;
|
||||||
|
|
||||||
|
import com.litoralregas.backend.charts.ChartWorkspaceScope;
|
||||||
|
|
||||||
|
import java.time.Instant;
|
||||||
|
|
||||||
|
public record ChartWorkspaceResponse(
|
||||||
|
Integer id,
|
||||||
|
ChartWorkspaceScope scope,
|
||||||
|
String layoutMode,
|
||||||
|
String chartsJson,
|
||||||
|
Instant createdAt,
|
||||||
|
Instant updatedAt
|
||||||
|
) {
|
||||||
|
}
|
||||||
@@ -32340,7 +32340,7 @@
|
|||||||
"signed": false,
|
"signed": false,
|
||||||
"validMin": null,
|
"validMin": null,
|
||||||
"validMax": null
|
"validMax": null
|
||||||
}
|
},
|
||||||
],
|
],
|
||||||
"schema": "sensor-definitions.v2.decoding-metadata"
|
"schema": "sensor-definitions.v2.decoding-metadata"
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
CREATE TABLE chart_workspace (
|
||||||
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
|
|
||||||
|
scope VARCHAR(50) NOT NULL UNIQUE,
|
||||||
|
|
||||||
|
layout_mode VARCHAR(50) NOT NULL,
|
||||||
|
|
||||||
|
charts_json TEXT NOT NULL,
|
||||||
|
|
||||||
|
created_at TIMESTAMP NOT NULL,
|
||||||
|
updated_at TIMESTAMP NOT NULL
|
||||||
|
);
|
||||||
Reference in New Issue
Block a user