From 2ae3ff4d0cf948c24284abf0112e4d018f14cab0 Mon Sep 17 00:00:00 2001
From: Benedek Kisvari <22137812-benedekkisvari@users.noreply.gitlab.com>
Date: Sun, 4 May 2025 16:01:05 +0200
Subject: [PATCH] Updating backend structure

---
 backend/settings.gradle                       |   2 +-
 .../java/hu/ignis/BackendApplication.java     |  11 ++
 .../main/java/hu/ignis/config/RestConfig.java |  20 +++
 .../ignis/config}/WebConfig.java              |   2 +-
 .../ignis/controller}/AuthController.java     |   6 +-
 .../main/java/hu/ignis/dto/LoginRequest.java  |  31 +++++
 .../ignis/dto/LoginResponse.java}             |  35 +----
 .../backend => hu/ignis/model}/Order.java     |   2 +-
 .../backend => hu/ignis/model}/OrderItem.java |   2 +-
 .../backend => hu/ignis/model}/Product.java   |   2 +-
 .../backend => hu/ignis/model}/User.java      |   2 +-
 .../repository}/OrderItemRepository.java      |   5 +-
 .../ignis/repository}/OrderRepository.java    |   5 +-
 .../ignis/repository}/ProductRepository.java  |   5 +-
 .../ignis/repository}/UserRepository.java     |   3 +-
 .../kisbe32/backend/BackendApplication.java   |  27 ----
 .../java/hu/ignis/dto/LoginRequestTest.java   |  29 ++++
 .../kisbe32/backend/ApiIntegrationTest.java   | 126 ------------------
 18 files changed, 116 insertions(+), 199 deletions(-)
 create mode 100644 backend/src/main/java/hu/ignis/BackendApplication.java
 create mode 100644 backend/src/main/java/hu/ignis/config/RestConfig.java
 rename backend/src/main/java/{kisbe32/backend => hu/ignis/config}/WebConfig.java (95%)
 rename backend/src/main/java/{kisbe32/backend => hu/ignis/controller}/AuthController.java (92%)
 create mode 100644 backend/src/main/java/hu/ignis/dto/LoginRequest.java
 rename backend/src/main/java/{kisbe32/backend/LoginRequest.java => hu/ignis/dto/LoginResponse.java} (60%)
 rename backend/src/main/java/{kisbe32/backend => hu/ignis/model}/Order.java (98%)
 rename backend/src/main/java/{kisbe32/backend => hu/ignis/model}/OrderItem.java (98%)
 rename backend/src/main/java/{kisbe32/backend => hu/ignis/model}/Product.java (98%)
 rename backend/src/main/java/{kisbe32/backend => hu/ignis/model}/User.java (98%)
 rename backend/src/main/java/{kisbe32/backend => hu/ignis/repository}/OrderItemRepository.java (78%)
 rename backend/src/main/java/{kisbe32/backend => hu/ignis/repository}/OrderRepository.java (78%)
 rename backend/src/main/java/{kisbe32/backend => hu/ignis/repository}/ProductRepository.java (83%)
 rename backend/src/main/java/{kisbe32/backend => hu/ignis/repository}/UserRepository.java (80%)
 delete mode 100644 backend/src/main/java/kisbe32/backend/BackendApplication.java
 create mode 100644 backend/src/test/java/hu/ignis/dto/LoginRequestTest.java
 delete mode 100644 backend/src/test/java/kisbe32/backend/ApiIntegrationTest.java

diff --git a/backend/settings.gradle b/backend/settings.gradle
index 0f5036d..57ae301 100644
--- a/backend/settings.gradle
+++ b/backend/settings.gradle
@@ -1 +1 @@
-rootProject.name = 'backend'
+rootProject.name = 'ignis'
diff --git a/backend/src/main/java/hu/ignis/BackendApplication.java b/backend/src/main/java/hu/ignis/BackendApplication.java
new file mode 100644
index 0000000..1145ada
--- /dev/null
+++ b/backend/src/main/java/hu/ignis/BackendApplication.java
@@ -0,0 +1,11 @@
+package hu.ignis;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class BackendApplication {
+	public static void main(String[] args) {
+		SpringApplication.run(BackendApplication.class, args);
+	}
+}
\ No newline at end of file
diff --git a/backend/src/main/java/hu/ignis/config/RestConfig.java b/backend/src/main/java/hu/ignis/config/RestConfig.java
new file mode 100644
index 0000000..f7f7fa1
--- /dev/null
+++ b/backend/src/main/java/hu/ignis/config/RestConfig.java
@@ -0,0 +1,20 @@
+package hu.ignis.config;
+
+import hu.ignis.model.Order;
+import hu.ignis.model.OrderItem;
+import hu.ignis.model.Product;
+import hu.ignis.model.User;
+import org.springframework.data.rest.core.config.RepositoryRestConfiguration;
+import org.springframework.data.rest.webmvc.config.RepositoryRestConfigurer;
+import org.springframework.stereotype.Component;
+import org.springframework.web.servlet.config.annotation.CorsRegistry;
+
+// Optional: Configure the REST API to expose IDs
+@Component
+public class RestConfig implements RepositoryRestConfigurer {
+    @Override
+    public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config, CorsRegistry cors) {
+        // Expose entity IDs in REST responses
+        config.exposeIdsFor(User.class, Product.class, Order.class, OrderItem.class);
+    }
+}
diff --git a/backend/src/main/java/kisbe32/backend/WebConfig.java b/backend/src/main/java/hu/ignis/config/WebConfig.java
similarity index 95%
rename from backend/src/main/java/kisbe32/backend/WebConfig.java
rename to backend/src/main/java/hu/ignis/config/WebConfig.java
index 77d5b97..5dbc0cb 100644
--- a/backend/src/main/java/kisbe32/backend/WebConfig.java
+++ b/backend/src/main/java/hu/ignis/config/WebConfig.java
@@ -1,4 +1,4 @@
-package kisbe32.backend;
+package hu.ignis.config;
 
 import org.springframework.context.annotation.Configuration;
 import org.springframework.web.servlet.config.annotation.CorsRegistry;
diff --git a/backend/src/main/java/kisbe32/backend/AuthController.java b/backend/src/main/java/hu/ignis/controller/AuthController.java
similarity index 92%
rename from backend/src/main/java/kisbe32/backend/AuthController.java
rename to backend/src/main/java/hu/ignis/controller/AuthController.java
index 54bc076..e0a80a4 100644
--- a/backend/src/main/java/kisbe32/backend/AuthController.java
+++ b/backend/src/main/java/hu/ignis/controller/AuthController.java
@@ -1,5 +1,9 @@
-package kisbe32.backend;
+package hu.ignis.controller;
 
+import hu.ignis.dto.LoginRequest;
+import hu.ignis.dto.LoginResponse;
+import hu.ignis.model.User;
+import hu.ignis.repository.UserRepository;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
diff --git a/backend/src/main/java/hu/ignis/dto/LoginRequest.java b/backend/src/main/java/hu/ignis/dto/LoginRequest.java
new file mode 100644
index 0000000..a60b1f6
--- /dev/null
+++ b/backend/src/main/java/hu/ignis/dto/LoginRequest.java
@@ -0,0 +1,31 @@
+package hu.ignis.dto;
+
+public class LoginRequest {
+    private String username;
+    private String password;
+
+    // Default constructor needed for JSON deserialization
+    public LoginRequest() {
+    }
+
+    public LoginRequest(String username, String password) {
+        this.username = username;
+        this.password = password;
+    }
+
+    public String getUsername() {
+        return username;
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
+    public String getPassword() {
+        return password;
+    }
+
+    public void setPassword(String password) {
+        this.password = password;
+    }
+}
diff --git a/backend/src/main/java/kisbe32/backend/LoginRequest.java b/backend/src/main/java/hu/ignis/dto/LoginResponse.java
similarity index 60%
rename from backend/src/main/java/kisbe32/backend/LoginRequest.java
rename to backend/src/main/java/hu/ignis/dto/LoginResponse.java
index dc236b4..522f546 100644
--- a/backend/src/main/java/kisbe32/backend/LoginRequest.java
+++ b/backend/src/main/java/hu/ignis/dto/LoginResponse.java
@@ -1,35 +1,6 @@
-package kisbe32.backend;
+package hu.ignis.dto;
 
-class LoginRequest {
-    private String username;
-    private String password;
-    private String email;
-
-    // Default constructor needed for JSON deserialization
-    public LoginRequest() {}
-
-    public LoginRequest(String username, String password) {
-        this.username = username;
-        this.password = password;
-    }
-    
-    public LoginRequest(String username, String email, String password) {
-        this.username = username;
-        this.email = email;
-        this.password = password;
-    }
-
-    public String getUsername() { return username; }
-    public void setUsername(String username) { this.username = username; }
-
-    public String getPassword() { return password; }
-    public void setPassword(String password) { this.password = password; }
-    
-    public String getEmail() { return email; }
-    public void setEmail(String email) { this.email = email; }
-}
-
-class LoginResponse {
+public class LoginResponse {
     private boolean success;
     private Integer userId;
     private String username;
@@ -71,4 +42,4 @@ class LoginResponse {
     
     public String getRole() { return role; }
     public void setRole(String role) { this.role = role; }
-}
\ No newline at end of file
+}
diff --git a/backend/src/main/java/kisbe32/backend/Order.java b/backend/src/main/java/hu/ignis/model/Order.java
similarity index 98%
rename from backend/src/main/java/kisbe32/backend/Order.java
rename to backend/src/main/java/hu/ignis/model/Order.java
index 1e5b2f6..b55b69e 100644
--- a/backend/src/main/java/kisbe32/backend/Order.java
+++ b/backend/src/main/java/hu/ignis/model/Order.java
@@ -1,4 +1,4 @@
-package kisbe32.backend;
+package hu.ignis.model;
 
 import jakarta.persistence.*;
 import java.math.BigDecimal;
diff --git a/backend/src/main/java/kisbe32/backend/OrderItem.java b/backend/src/main/java/hu/ignis/model/OrderItem.java
similarity index 98%
rename from backend/src/main/java/kisbe32/backend/OrderItem.java
rename to backend/src/main/java/hu/ignis/model/OrderItem.java
index a84b82d..c09a33a 100644
--- a/backend/src/main/java/kisbe32/backend/OrderItem.java
+++ b/backend/src/main/java/hu/ignis/model/OrderItem.java
@@ -1,4 +1,4 @@
-package kisbe32.backend;
+package hu.ignis.model;
 
 import jakarta.persistence.*;
 import java.math.BigDecimal;
diff --git a/backend/src/main/java/kisbe32/backend/Product.java b/backend/src/main/java/hu/ignis/model/Product.java
similarity index 98%
rename from backend/src/main/java/kisbe32/backend/Product.java
rename to backend/src/main/java/hu/ignis/model/Product.java
index 4cbcbdd..b5eb079 100644
--- a/backend/src/main/java/kisbe32/backend/Product.java
+++ b/backend/src/main/java/hu/ignis/model/Product.java
@@ -1,4 +1,4 @@
-package kisbe32.backend;
+package hu.ignis.model;
 
 import jakarta.persistence.*;
 
diff --git a/backend/src/main/java/kisbe32/backend/User.java b/backend/src/main/java/hu/ignis/model/User.java
similarity index 98%
rename from backend/src/main/java/kisbe32/backend/User.java
rename to backend/src/main/java/hu/ignis/model/User.java
index e4f6ffe..9751e30 100644
--- a/backend/src/main/java/kisbe32/backend/User.java
+++ b/backend/src/main/java/hu/ignis/model/User.java
@@ -1,4 +1,4 @@
-package kisbe32.backend;
+package hu.ignis.model;
 
 import jakarta.persistence.Entity;
 import jakarta.persistence.GeneratedValue;
diff --git a/backend/src/main/java/kisbe32/backend/OrderItemRepository.java b/backend/src/main/java/hu/ignis/repository/OrderItemRepository.java
similarity index 78%
rename from backend/src/main/java/kisbe32/backend/OrderItemRepository.java
rename to backend/src/main/java/hu/ignis/repository/OrderItemRepository.java
index 087a503..1566f84 100644
--- a/backend/src/main/java/kisbe32/backend/OrderItemRepository.java
+++ b/backend/src/main/java/hu/ignis/repository/OrderItemRepository.java
@@ -1,5 +1,6 @@
-package kisbe32.backend;
+package hu.ignis.repository;
 
+import hu.ignis.model.OrderItem;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.repository.query.Param;
 import org.springframework.data.rest.core.annotation.RepositoryRestResource;
@@ -7,7 +8,7 @@ import org.springframework.data.rest.core.annotation.RepositoryRestResource;
 import java.util.List;
 
 @RepositoryRestResource(collectionResourceRel = "orderitems", path = "orderitems")
-interface OrderItemRepository extends JpaRepository<OrderItem, Integer> {
+public interface OrderItemRepository extends JpaRepository<OrderItem, Integer> {
     // Find order items by order ID
     List<OrderItem> findByOrderId(@Param("orderId") Integer orderId);
 
diff --git a/backend/src/main/java/kisbe32/backend/OrderRepository.java b/backend/src/main/java/hu/ignis/repository/OrderRepository.java
similarity index 78%
rename from backend/src/main/java/kisbe32/backend/OrderRepository.java
rename to backend/src/main/java/hu/ignis/repository/OrderRepository.java
index 2420475..7876fcf 100644
--- a/backend/src/main/java/kisbe32/backend/OrderRepository.java
+++ b/backend/src/main/java/hu/ignis/repository/OrderRepository.java
@@ -1,5 +1,6 @@
-package kisbe32.backend;
+package hu.ignis.repository;
 
+import hu.ignis.model.Order;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.repository.query.Param;
 import org.springframework.data.rest.core.annotation.RepositoryRestResource;
@@ -7,7 +8,7 @@ import org.springframework.data.rest.core.annotation.RepositoryRestResource;
 import java.util.List;
 
 @RepositoryRestResource(collectionResourceRel = "orders", path = "orders")
-interface OrderRepository extends JpaRepository<Order, Integer> {
+public interface OrderRepository extends JpaRepository<Order, Integer> {
     // Find orders by user ID
     List<Order> findByUser_Id(@Param("userId") Integer userId);
 
diff --git a/backend/src/main/java/kisbe32/backend/ProductRepository.java b/backend/src/main/java/hu/ignis/repository/ProductRepository.java
similarity index 83%
rename from backend/src/main/java/kisbe32/backend/ProductRepository.java
rename to backend/src/main/java/hu/ignis/repository/ProductRepository.java
index 2494bc1..1ac0fc6 100644
--- a/backend/src/main/java/kisbe32/backend/ProductRepository.java
+++ b/backend/src/main/java/hu/ignis/repository/ProductRepository.java
@@ -1,5 +1,6 @@
-package kisbe32.backend;
+package hu.ignis.repository;
 
+import hu.ignis.model.Product;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.repository.query.Param;
 import org.springframework.data.rest.core.annotation.RepositoryRestResource;
@@ -7,7 +8,7 @@ import org.springframework.data.rest.core.annotation.RepositoryRestResource;
 import java.util.List;
 
 @RepositoryRestResource(collectionResourceRel = "products", path = "products")
-interface ProductRepository extends JpaRepository<Product, Integer> {
+public interface ProductRepository extends JpaRepository<Product, Integer> {
     // Find products by category
     List<Product> findByCategory(@Param("category") String category);
 
diff --git a/backend/src/main/java/kisbe32/backend/UserRepository.java b/backend/src/main/java/hu/ignis/repository/UserRepository.java
similarity index 80%
rename from backend/src/main/java/kisbe32/backend/UserRepository.java
rename to backend/src/main/java/hu/ignis/repository/UserRepository.java
index 11146df..6c20ee7 100644
--- a/backend/src/main/java/kisbe32/backend/UserRepository.java
+++ b/backend/src/main/java/hu/ignis/repository/UserRepository.java
@@ -1,5 +1,6 @@
-package kisbe32.backend;
+package hu.ignis.repository;
 
+import hu.ignis.model.User;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.stereotype.Repository;
 
diff --git a/backend/src/main/java/kisbe32/backend/BackendApplication.java b/backend/src/main/java/kisbe32/backend/BackendApplication.java
deleted file mode 100644
index 89448d8..0000000
--- a/backend/src/main/java/kisbe32/backend/BackendApplication.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package kisbe32.backend;
-
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.data.rest.core.config.RepositoryRestConfiguration;
-import org.springframework.data.rest.webmvc.config.RepositoryRestConfigurer;
-import org.springframework.stereotype.Component;
-import org.springframework.web.servlet.config.annotation.CorsRegistry;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
-
-@SpringBootApplication
-public class BackendApplication {
-	public static void main(String[] args) {
-		SpringApplication.run(BackendApplication.class, args);
-	}
-}
-
-// Optional: Configure the REST API to expose IDs
-@Component
-class RestConfig implements RepositoryRestConfigurer {
-	@Override
-	public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config, CorsRegistry cors) {
-		// Expose entity IDs in REST responses
-		config.exposeIdsFor(User.class, Product.class, Order.class, OrderItem.class);
-	}
-}
\ No newline at end of file
diff --git a/backend/src/test/java/hu/ignis/dto/LoginRequestTest.java b/backend/src/test/java/hu/ignis/dto/LoginRequestTest.java
new file mode 100644
index 0000000..abecf9a
--- /dev/null
+++ b/backend/src/test/java/hu/ignis/dto/LoginRequestTest.java
@@ -0,0 +1,29 @@
+package hu.ignis.dto;
+
+import org.junit.jupiter.api.Test;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * Unit tests for the LoginRequest class.
+ */
+class LoginRequestTest {
+
+    @Test
+    void testLoginRequestConstructorAndGetters() {
+        LoginRequest request = new LoginRequest("user", "password");
+
+        assertThat(request.getUsername()).isEqualTo("user");
+        assertThat(request.getPassword()).isEqualTo("password");
+    }
+
+    @Test
+    void testSetters() {
+        LoginRequest request = new LoginRequest();
+        request.setUsername("newUser");
+        request.setPassword("newPassword");
+
+        assertThat(request.getUsername()).isEqualTo("newUser");
+        assertThat(request.getPassword()).isEqualTo("newPassword");
+    }
+}
\ No newline at end of file
diff --git a/backend/src/test/java/kisbe32/backend/ApiIntegrationTest.java b/backend/src/test/java/kisbe32/backend/ApiIntegrationTest.java
deleted file mode 100644
index 6003157..0000000
--- a/backend/src/test/java/kisbe32/backend/ApiIntegrationTest.java
+++ /dev/null
@@ -1,126 +0,0 @@
-package kisbe32.backend;
-
-import org.junit.jupiter.api.Test;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.boot.test.web.client.TestRestTemplate;
-import org.springframework.core.ParameterizedTypeReference;
-import org.springframework.http.*;
-import org.springframework.test.context.ActiveProfiles;
-
-import java.math.BigDecimal;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
-@ActiveProfiles("test")
-public class ApiIntegrationTest {
-
-    @Autowired
-    private TestRestTemplate restTemplate;
-
-    @Autowired
-    private ProductRepository productRepository;
-
-    @Autowired
-    private UserRepository userRepository;
-
-    @Autowired
-    private OrderRepository orderRepository;
-
-    @Autowired
-    private OrderItemRepository orderItemRepository;
-
-    @Test
-    public void testGetProducts() {
-        // Given: Add test products
-        Product product1 = new Product("Product 1", "Description 1", new BigDecimal("10.99"), 5, "Category 1");
-        Product product2 = new Product("Product 2", "Description 2", new BigDecimal("15.99"), 10, "Category 2");
-        productRepository.saveAll(List.of(product1, product2));
-
-        // When: Request is made to get all products
-        ResponseEntity<Map<String, Object>> response = restTemplate.exchange(
-                "/api/products",
-                HttpMethod.GET,
-                null,
-                new ParameterizedTypeReference<Map<String, Object>>() {}
-        );
-
-        // Then: The response should contain products
-        assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
-        assertThat(response.getBody()).isNotNull();
-        List<Map<String, Object>> products = (List<Map<String, Object>>) response.getBody().get("_embedded");
-        assertThat(products).isNotEmpty();
-    }
-
-    @Test
-    public void testCreateOrderAndOrderItems() {
-        // Given: A user and products exist
-        User user = new User("testuser", "test@example.com", "password");
-        userRepository.save(user);
-
-        Product product = new Product("Test Product", "Description", new BigDecimal("19.99"), 20, "Test Category");
-        productRepository.save(product);
-
-        // When: Create an order
-        Map<String, Object> orderRequest = new HashMap<>();
-        orderRequest.put("userId", user.getId());
-        orderRequest.put("status", "PENDING");
-
-        ResponseEntity<Map> orderResponse = restTemplate.postForEntity(
-                "/api/orders", orderRequest, Map.class);
-
-        // Then: The order should be created
-        assertThat(orderResponse.getStatusCode()).isEqualTo(HttpStatus.CREATED);
-        String orderLocation = orderResponse.getHeaders().getLocation().toString();
-
-        // When: Create an order item
-        Map<String, Object> orderItemRequest = new HashMap<>();
-        orderItemRequest.put("orderId", getIdFromLocation(orderLocation));
-        orderItemRequest.put("productId", product.getId());
-        orderItemRequest.put("quantity", 2);
-        orderItemRequest.put("price", product.getPrice());
-
-        ResponseEntity<Map> orderItemResponse = restTemplate.postForEntity(
-                "/api/orderitems", orderItemRequest, Map.class);
-
-        // Then: The order item should be created
-        assertThat(orderItemResponse.getStatusCode()).isEqualTo(HttpStatus.CREATED);
-    }
-
-    @Test
-    public void testLogin() {
-        // Given: A user exists
-        String username = "loginuser";
-        String password = "password123";
-        User user = new User(username, "login@example.com", password);
-        userRepository.save(user);
-
-        // When: Login with valid credentials
-        AuthController.LoginRequest loginRequest = new AuthController.LoginRequest(username, password);
-
-        ResponseEntity<AuthController.LoginResponse> response = restTemplate.postForEntity(
-                "/api/login", loginRequest, AuthController.LoginResponse.class);
-
-        // Then: Should get successful response
-        assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
-        assertThat(response.getBody().isSuccess()).isTrue();
-        assertThat(response.getBody().getUserId()).isEqualTo(user.getId());
-
-        // When: Login with invalid password
-        loginRequest.setPassword("wrongpassword");
-        ResponseEntity<AuthController.LoginResponse> failedResponse = restTemplate.postForEntity(
-                "/api/login", loginRequest, AuthController.LoginResponse.class);
-
-        // Then: Should get unauthorized response
-        assertThat(failedResponse.getStatusCode()).isEqualTo(HttpStatus.UNAUTHORIZED);
-        assertThat(failedResponse.getBody().isSuccess()).isFalse();
-    }
-
-    private Integer getIdFromLocation(String location) {
-        return Integer.parseInt(location.substring(location.lastIndexOf("/") + 1));
-    }
-}
\ No newline at end of file
-- 
GitLab