From e2868eade0e5a967c394cf80e0aadb4e08dc818c Mon Sep 17 00:00:00 2001 From: Domonkos <162434141+domonkosszer@users.noreply.github.com> Date: Tue, 20 Jan 2026 17:19:00 +0100 Subject: [PATCH] Springs Database Manager and H2 works --- .../WorkspaceApiApplication.java | 2 +- .../workspace/products/DebugController.java | 12 ++++++ .../voyage/workspace/products/Product.java | 41 +++++++++++++++++++ .../workspace/products/ProductController.java | 34 +++++++++++++++ .../products/ProductCreateRequest.java | 3 ++ .../workspace/products/ProductRepository.java | 5 +++ 6 files changed, 96 insertions(+), 1 deletion(-) rename apps/workspace-api/src/main/java/com/voyage/{workspace_api => workspace}/WorkspaceApiApplication.java (89%) create mode 100644 apps/workspace-api/src/main/java/com/voyage/workspace/products/DebugController.java create mode 100644 apps/workspace-api/src/main/java/com/voyage/workspace/products/Product.java create mode 100644 apps/workspace-api/src/main/java/com/voyage/workspace/products/ProductController.java create mode 100644 apps/workspace-api/src/main/java/com/voyage/workspace/products/ProductCreateRequest.java create mode 100644 apps/workspace-api/src/main/java/com/voyage/workspace/products/ProductRepository.java diff --git a/apps/workspace-api/src/main/java/com/voyage/workspace_api/WorkspaceApiApplication.java b/apps/workspace-api/src/main/java/com/voyage/workspace/WorkspaceApiApplication.java similarity index 89% rename from apps/workspace-api/src/main/java/com/voyage/workspace_api/WorkspaceApiApplication.java rename to apps/workspace-api/src/main/java/com/voyage/workspace/WorkspaceApiApplication.java index 3195492..43eb486 100644 --- a/apps/workspace-api/src/main/java/com/voyage/workspace_api/WorkspaceApiApplication.java +++ b/apps/workspace-api/src/main/java/com/voyage/workspace/WorkspaceApiApplication.java @@ -1,4 +1,4 @@ -package com.voyage.workspace_api; +package com.voyage.workspace; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; diff --git a/apps/workspace-api/src/main/java/com/voyage/workspace/products/DebugController.java b/apps/workspace-api/src/main/java/com/voyage/workspace/products/DebugController.java new file mode 100644 index 0000000..b9dd9c0 --- /dev/null +++ b/apps/workspace-api/src/main/java/com/voyage/workspace/products/DebugController.java @@ -0,0 +1,12 @@ +package com.voyage.workspace; + +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class DebugController { + @GetMapping("/ping") + public String ping() { + return "pong"; + } +} diff --git a/apps/workspace-api/src/main/java/com/voyage/workspace/products/Product.java b/apps/workspace-api/src/main/java/com/voyage/workspace/products/Product.java new file mode 100644 index 0000000..d8dd7b7 --- /dev/null +++ b/apps/workspace-api/src/main/java/com/voyage/workspace/products/Product.java @@ -0,0 +1,41 @@ +package com.voyage.workspace.products; + +import jakarta.persistence.*; +import java.time.Instant; + +@Entity +@Table(name = "products") +public class Product { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(nullable=false) + private String name; + + private String category; + + @Column(nullable=false) + private String status = "ACTIVE"; + + @Column(nullable=false, updatable=false) + private Instant createdAt = Instant.now(); + + public Product() {} + + public Product(String name, String category) { + this.name = name; + this.category = category; + } + + public Long getId() { return id; } + public String getName() { return name; } + public String getCategory() { return category; } + public String getStatus() { return status; } + public Instant getCreatedAt() { return createdAt; } + + public void setName(String name) { this.name = name; } + public void setCategory(String category) { this.category = category; } + public void setStatus(String status) { this.status = status; } +} \ No newline at end of file diff --git a/apps/workspace-api/src/main/java/com/voyage/workspace/products/ProductController.java b/apps/workspace-api/src/main/java/com/voyage/workspace/products/ProductController.java new file mode 100644 index 0000000..45f8614 --- /dev/null +++ b/apps/workspace-api/src/main/java/com/voyage/workspace/products/ProductController.java @@ -0,0 +1,34 @@ +package com.voyage.workspace.products; + +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequestMapping("/api/products") +public class ProductController { + + private final ProductRepository repo; + + public ProductController(ProductRepository repo) { + this.repo = repo; + } + + @GetMapping + public List list() { + return repo.findAll(); + } + + @PostMapping + public Product create(@RequestBody ProductCreateRequest req) { + Product p = new Product(req.name(), req.category()); + return repo.save(p); + } + + @GetMapping("/{id}") + public ResponseEntity get(@PathVariable Long id) { + return repo.findById(id).map(ResponseEntity::ok) + .orElse(ResponseEntity.notFound().build()); + } +} diff --git a/apps/workspace-api/src/main/java/com/voyage/workspace/products/ProductCreateRequest.java b/apps/workspace-api/src/main/java/com/voyage/workspace/products/ProductCreateRequest.java new file mode 100644 index 0000000..fd93ed2 --- /dev/null +++ b/apps/workspace-api/src/main/java/com/voyage/workspace/products/ProductCreateRequest.java @@ -0,0 +1,3 @@ +package com.voyage.workspace.products; + +public record ProductCreateRequest(String name, String category) {} \ No newline at end of file diff --git a/apps/workspace-api/src/main/java/com/voyage/workspace/products/ProductRepository.java b/apps/workspace-api/src/main/java/com/voyage/workspace/products/ProductRepository.java new file mode 100644 index 0000000..aa89b77 --- /dev/null +++ b/apps/workspace-api/src/main/java/com/voyage/workspace/products/ProductRepository.java @@ -0,0 +1,5 @@ +package com.voyage.workspace.products; + +import org.springframework.data.jpa.repository.JpaRepository; + +public interface ProductRepository extends JpaRepository {} \ No newline at end of file