From b4d8cfe48bd607fa344ea59faaf678188dad1a80 Mon Sep 17 00:00:00 2001 From: marcius02 Date: Fri, 7 Feb 2025 12:11:17 +0100 Subject: [PATCH 01/10] feat: create User @Entity --- .../dev/pronunciationAppBack/model/User.java | 88 +++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/User.java diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/User.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/User.java new file mode 100644 index 000000000..36371089d --- /dev/null +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/User.java @@ -0,0 +1,88 @@ +package dev.pronunciationAppBack.model; + + +import jakarta.persistence.Entity; +import jakarta.persistence.Id; + +@Entity +public class User { + + @Id + private String id; + private String username; + private int age; + private String email; + private int totalScore; + private boolean isActive; + + public User() {} + + public User(String id, String username, int age, String email, int totalScore, boolean isActive) { + this.id = id; + this.username = username; + this.age = age; + this.email = email; + this.totalScore = totalScore; + this.isActive = isActive; + } + + public String getId() { + return id; + } + + public String getUsername() { + return username; + } + + public int getAge() { + return age; + } + + public String getEmail() { + return email; + } + + public int getTotalScore() { + return totalScore; + } + + public boolean getIsActive() { + return isActive; + } + + public void setId(String id) { + this.id = id; + } + + public void setUsername(String username) { + this.username = username; + } + + public void setAge(int age) { + this.age = age; + } + + public void setEmail(String email) { + this.email = email; + } + + public void setTotalScore(int totalScore) { + this.totalScore = totalScore; + } + + public void setActive(boolean isActive) { + this.isActive = isActive; + } + + @Override + public String toString() { + return "User{" + + "id='" + id + '\'' + + ", userName='" + username + '\'' + + ", age='" + age + '\'' + + ", email='" + email + '\'' + + ", totalScore='" + totalScore + '\'' + + ", isActive='" + isActive + '\'' + + '}'; + } +} \ No newline at end of file From 3388230d8eb3cb208697b14cb4e3d9499db45143 Mon Sep 17 00:00:00 2001 From: marcius02 Date: Fri, 7 Feb 2025 12:57:58 +0100 Subject: [PATCH 02/10] feat: create UserController --- .../controller/UserController.java | 77 +++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/controller/UserController.java diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/controller/UserController.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/controller/UserController.java new file mode 100644 index 000000000..08ef289f7 --- /dev/null +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/controller/UserController.java @@ -0,0 +1,77 @@ +package dev.pronunciationAppBack.controller; + + +import dev.pronunciationAppBack.model.User; +import org.apache.coyote.Request; +import org.apache.coyote.Response; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Optional; + +@RestController +@RequestMapping("/api/users") +public class UserController { + + @Autowired + private UserService userService; + + @GetMapping + public ResponseEntity> getAllUsers() { + List user = userService.getAllUsers(); + HttpHeaders headers = getCommonHeaders("Get all users"); + + return !user.isEmpty() + ? new ResponseEntity<>(users, headers, HttpStatus.OK) + : new ResponseEntity<>(headers, HttpStatus.NOT_FOUND); + } + + @GetMapping("/{id}") + public ResponseEntity getUserById(@PathVariable String id) { + Optional user = userService.getUserById(id); + HttpHeaders headers = getCommonHeaders("Get user by ID"); + + return user.map(value -> new ResponseEntity<>(value, headers, HttpStatus.OK)) + .orElseGet(() -> new ResponseEntity<>(headers, HttpStatus.NOT_FOUND)); + + } + + @PostMapping("/createUser") + public ResponseEntity createUser(@RequestBody User user) { + User createUser = userService.createUser(user); + HttpHeaders headers = getCommonHeaders("Create a new user"); + + return new ResponseEntity<>(createUser, headers, HttpStatus.CREATED); + } + + @PutMapping("/{id}") + public ResponseEntity updateUser(@PathVariable String id, @RequestBody User user) { + User updateUser = user.Service.updateUser(user); + HttpHeaders headers = getCommonHeaders("Update a user"); + + return new ResponseEntity<>(updateUser, headers, HttpStatus.OK); + } + + @DeleteMapping("/{id}") + public ResponseEntity deleteUser(@PathVariable("id") String idToDelete) { + HttpHeaders headers = getCommonHeaders("Delete a user"); + + if (userService.existsById(idToDelete)) { + userService.deleteUser(idToDelete); + return new ResponseEntity<>("User deleted", headers, HttpsStatus.OK); + } else { + return new ResponseEntity<>("User not found", headers, HttpStatus.NOT_FOUND); + } + } + + @DeleteMapping + public ResponseEntity deleteAllUsers() { + userService.deleteAllUsers(); + HttpHeaders headers = getCommonHeaders("Delete all users"); + return new ResponseEntity<>("All users deleted", headers, HttpStatus.OK); + } +} \ No newline at end of file From 4f9e8b56d206735a66e6bbaca6f666feb63a9c52 Mon Sep 17 00:00:00 2001 From: marcius02 Date: Fri, 7 Feb 2025 17:43:57 +0100 Subject: [PATCH 03/10] feat: implement UserRepository --- .../pronunciationAppBack/repository/UserRepository.java | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/repository/UserRepository.java diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/repository/UserRepository.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/repository/UserRepository.java new file mode 100644 index 000000000..418da7f47 --- /dev/null +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/repository/UserRepository.java @@ -0,0 +1,8 @@ +package dev.pronunciationAppBack.repository; + +import dev.pronunciationAppBack.model.User; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface UserRepository extends JpaRepository { + User getUserById(String id); +} From 5f6ae9a9684838884778ff558ef95d34577f83e1 Mon Sep 17 00:00:00 2001 From: marcius02 Date: Fri, 7 Feb 2025 17:45:45 +0100 Subject: [PATCH 04/10] feat: configure H2 Database --- .../src/main/resources/application.properties | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/backend/pronunciationAppBack/src/main/resources/application.properties b/backend/pronunciationAppBack/src/main/resources/application.properties index 83cb16f3e..d1dbdf32c 100644 --- a/backend/pronunciationAppBack/src/main/resources/application.properties +++ b/backend/pronunciationAppBack/src/main/resources/application.properties @@ -12,9 +12,9 @@ spring.h2.console.enabled=true # H2 LOCAL DB SERVER -spring.datasource.url=jdbc:h2:/home/albert/MyProjects/DataBase/pronunciationDB/pronunciationDB.db -spring.datasource.username=albert +spring.datasource.url=jdbc:h2:/home/marcfernandez/myProjects/dataBase/pronunciationDB/pronunciationDB.db +spring.datasource.username=marc spring.datasource.password=1234 # DDL OPTIONS: create-drop, create, update, none, validate -spring.jpa.hibernate.ddl-auto=none \ No newline at end of file +spring.jpa.hibernate.ddl-auto=create \ No newline at end of file From 2a8bcca523a320d19bb543e79d7eb65b5bd3a9d9 Mon Sep 17 00:00:00 2001 From: marcius02 Date: Fri, 7 Feb 2025 18:03:15 +0100 Subject: [PATCH 05/10] feat: develop UserService --- .../service/UserService.java | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/UserService.java diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/UserService.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/UserService.java new file mode 100644 index 000000000..bb0fc9a6a --- /dev/null +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/UserService.java @@ -0,0 +1,43 @@ +package dev.pronunciationAppBack.service; + +import dev.pronunciationAppBack.model.User; +import dev.pronunciationAppBack.repository.UserRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Optional; + +@Service +public class UserService { + @Autowired + private UserRepository userRepository; + + public List getAllUsers(){ + return userRepository.findAll(); + } + + public Optional getUserById(String id) { + return Optional.ofNullable(userRepository.getUserById(id)); + } + + public User createUser(User user) { + return userRepository.save(user); + } + + public User updateUser(User user) { + return userRepository.save(user); + } + + public void deleteUser(String id) { + userRepository.deleteById(id); + } + + public void deleteAllUsers() { + userRepository.deleteAll(); + } + + public boolean existsById(String id) { + return userRepository.existsById(id); + } +} From e7734ee088ced6467d47adcd83c1bc551281ca2c Mon Sep 17 00:00:00 2001 From: marcius02 Date: Fri, 7 Feb 2025 18:10:45 +0100 Subject: [PATCH 06/10] fix: import UserService at UserController pronunciation field does not exist --- .../pronunciationAppBack/controller/UserController.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/controller/UserController.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/controller/UserController.java index 08ef289f7..e17d22509 100644 --- a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/controller/UserController.java +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/controller/UserController.java @@ -2,6 +2,7 @@ import dev.pronunciationAppBack.model.User; +import dev.pronunciationAppBack.service.UserService; import org.apache.coyote.Request; import org.apache.coyote.Response; import org.springframework.beans.factory.annotation.Autowired; @@ -18,18 +19,18 @@ public class UserController { @Autowired - private UserService userService; + private UserService userService; @GetMapping public ResponseEntity> getAllUsers() { List user = userService.getAllUsers(); HttpHeaders headers = getCommonHeaders("Get all users"); - + return !user.isEmpty() ? new ResponseEntity<>(users, headers, HttpStatus.OK) : new ResponseEntity<>(headers, HttpStatus.NOT_FOUND); } - + @GetMapping("/{id}") public ResponseEntity getUserById(@PathVariable String id) { Optional user = userService.getUserById(id); From 3dee6fb4d3437e91ef509a0c1d6a609d57f458c7 Mon Sep 17 00:00:00 2001 From: marcius02 Date: Fri, 7 Feb 2025 18:20:09 +0100 Subject: [PATCH 07/10] fix: HttpsStatus to HttpStatus --- .../dev/pronunciationAppBack/controller/UserController.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/controller/UserController.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/controller/UserController.java index e17d22509..3f774d2a4 100644 --- a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/controller/UserController.java +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/controller/UserController.java @@ -23,7 +23,7 @@ public class UserController { @GetMapping public ResponseEntity> getAllUsers() { - List user = userService.getAllUsers(); + List users = userService.getAllUsers(); HttpHeaders headers = getCommonHeaders("Get all users"); return !user.isEmpty() @@ -63,7 +63,7 @@ public ResponseEntity deleteUser(@PathVariable("id") String idToDelete) if (userService.existsById(idToDelete)) { userService.deleteUser(idToDelete); - return new ResponseEntity<>("User deleted", headers, HttpsStatus.OK); + return new ResponseEntity<>("User deleted", headers, HttpStatus.OK); } else { return new ResponseEntity<>("User not found", headers, HttpStatus.NOT_FOUND); } From f1e19114bf5558693126f0903124f659c7f045cc Mon Sep 17 00:00:00 2001 From: marcius02 Date: Fri, 7 Feb 2025 18:46:57 +0100 Subject: [PATCH 08/10] fix: userEntity instead of user because of DB conflicts --- .../controller/UserController.java | 37 ++++++++++--------- .../model/{User.java => UserEntity.java} | 8 ++-- .../repository/UserRepository.java | 6 +-- .../service/UserService.java | 10 ++--- 4 files changed, 32 insertions(+), 29 deletions(-) rename backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/{User.java => UserEntity.java} (89%) diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/controller/UserController.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/controller/UserController.java index 3f774d2a4..c17214b6b 100644 --- a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/controller/UserController.java +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/controller/UserController.java @@ -1,10 +1,8 @@ package dev.pronunciationAppBack.controller; -import dev.pronunciationAppBack.model.User; +import dev.pronunciationAppBack.model.UserEntity; import dev.pronunciationAppBack.service.UserService; -import org.apache.coyote.Request; -import org.apache.coyote.Response; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; @@ -22,36 +20,36 @@ public class UserController { private UserService userService; @GetMapping - public ResponseEntity> getAllUsers() { - List users = userService.getAllUsers(); + public ResponseEntity> getAllUsers() { + List users = userService.getAllUsers(); HttpHeaders headers = getCommonHeaders("Get all users"); - return !user.isEmpty() + return !users.isEmpty() ? new ResponseEntity<>(users, headers, HttpStatus.OK) : new ResponseEntity<>(headers, HttpStatus.NOT_FOUND); } @GetMapping("/{id}") - public ResponseEntity getUserById(@PathVariable String id) { - Optional user = userService.getUserById(id); + public ResponseEntity getUserById(@PathVariable String id) { + Optional userEntity = userService.getUserById(id); HttpHeaders headers = getCommonHeaders("Get user by ID"); - return user.map(value -> new ResponseEntity<>(value, headers, HttpStatus.OK)) + return userEntity.map(value -> new ResponseEntity<>(value, headers, HttpStatus.OK)) .orElseGet(() -> new ResponseEntity<>(headers, HttpStatus.NOT_FOUND)); - + } @PostMapping("/createUser") - public ResponseEntity createUser(@RequestBody User user) { - User createUser = userService.createUser(user); + public ResponseEntity createUser(@RequestBody UserEntity userEntity) { + UserEntity createUserEntity = userService.createUser(userEntity); HttpHeaders headers = getCommonHeaders("Create a new user"); - return new ResponseEntity<>(createUser, headers, HttpStatus.CREATED); + return new ResponseEntity<>(createUserEntity, headers, HttpStatus.CREATED); } @PutMapping("/{id}") - public ResponseEntity updateUser(@PathVariable String id, @RequestBody User user) { - User updateUser = user.Service.updateUser(user); + public ResponseEntity updateUser(@PathVariable String id, @RequestBody UserEntity user) { + UserEntity updateUser = userService.updateUser(user); HttpHeaders headers = getCommonHeaders("Update a user"); return new ResponseEntity<>(updateUser, headers, HttpStatus.OK); @@ -63,9 +61,9 @@ public ResponseEntity deleteUser(@PathVariable("id") String idToDelete) if (userService.existsById(idToDelete)) { userService.deleteUser(idToDelete); - return new ResponseEntity<>("User deleted", headers, HttpStatus.OK); + return new ResponseEntity<>("UserEntity deleted", headers, HttpStatus.OK); } else { - return new ResponseEntity<>("User not found", headers, HttpStatus.NOT_FOUND); + return new ResponseEntity<>("UserEntity not found", headers, HttpStatus.NOT_FOUND); } } @@ -75,4 +73,9 @@ public ResponseEntity deleteAllUsers() { HttpHeaders headers = getCommonHeaders("Delete all users"); return new ResponseEntity<>("All users deleted", headers, HttpStatus.OK); } + + private HttpHeaders getCommonHeaders(String string) { + HttpHeaders headers = new HttpHeaders(); + return headers; + } } \ No newline at end of file diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/User.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/UserEntity.java similarity index 89% rename from backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/User.java rename to backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/UserEntity.java index 36371089d..0f5e26d92 100644 --- a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/User.java +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/UserEntity.java @@ -5,7 +5,7 @@ import jakarta.persistence.Id; @Entity -public class User { +public class UserEntity { @Id private String id; @@ -15,9 +15,9 @@ public class User { private int totalScore; private boolean isActive; - public User() {} + public UserEntity() {} - public User(String id, String username, int age, String email, int totalScore, boolean isActive) { + public UserEntity(String id, String username, int age, String email, int totalScore, boolean isActive) { this.id = id; this.username = username; this.age = age; @@ -76,7 +76,7 @@ public void setActive(boolean isActive) { @Override public String toString() { - return "User{" + + return "UserEntity{" + "id='" + id + '\'' + ", userName='" + username + '\'' + ", age='" + age + '\'' + diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/repository/UserRepository.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/repository/UserRepository.java index 418da7f47..d37444d11 100644 --- a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/repository/UserRepository.java +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/repository/UserRepository.java @@ -1,8 +1,8 @@ package dev.pronunciationAppBack.repository; -import dev.pronunciationAppBack.model.User; +import dev.pronunciationAppBack.model.UserEntity; import org.springframework.data.jpa.repository.JpaRepository; -public interface UserRepository extends JpaRepository { - User getUserById(String id); +public interface UserRepository extends JpaRepository { + UserEntity getUserById(String id); } diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/UserService.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/UserService.java index bb0fc9a6a..4861ee3aa 100644 --- a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/UserService.java +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/UserService.java @@ -1,6 +1,6 @@ package dev.pronunciationAppBack.service; -import dev.pronunciationAppBack.model.User; +import dev.pronunciationAppBack.model.UserEntity; import dev.pronunciationAppBack.repository.UserRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -13,19 +13,19 @@ public class UserService { @Autowired private UserRepository userRepository; - public List getAllUsers(){ + public List getAllUsers(){ return userRepository.findAll(); } - public Optional getUserById(String id) { + public Optional getUserById(String id) { return Optional.ofNullable(userRepository.getUserById(id)); } - public User createUser(User user) { + public UserEntity createUser(UserEntity user) { return userRepository.save(user); } - public User updateUser(User user) { + public UserEntity updateUser(UserEntity user) { return userRepository.save(user); } From 148365da05a8742547ca96763a5b83e83243ccbf Mon Sep 17 00:00:00 2001 From: marcius02 Date: Fri, 7 Feb 2025 19:32:52 +0100 Subject: [PATCH 09/10] fix: update instead of create --- .../src/main/resources/application.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/pronunciationAppBack/src/main/resources/application.properties b/backend/pronunciationAppBack/src/main/resources/application.properties index d1dbdf32c..ac818e4a2 100644 --- a/backend/pronunciationAppBack/src/main/resources/application.properties +++ b/backend/pronunciationAppBack/src/main/resources/application.properties @@ -17,4 +17,4 @@ spring.datasource.username=marc spring.datasource.password=1234 # DDL OPTIONS: create-drop, create, update, none, validate -spring.jpa.hibernate.ddl-auto=create \ No newline at end of file +spring.jpa.hibernate.ddl-auto=update \ No newline at end of file From bb8bf116b4c296404de3f19dccc1baed763d1c4d Mon Sep 17 00:00:00 2001 From: marcius02 Date: Fri, 7 Feb 2025 19:33:35 +0100 Subject: [PATCH 10/10] fix: userEntity instead of user --- .../pronunciationAppBack/controller/UserController.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/controller/UserController.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/controller/UserController.java index c17214b6b..d793d639c 100644 --- a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/controller/UserController.java +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/controller/UserController.java @@ -48,8 +48,8 @@ public ResponseEntity createUser(@RequestBody UserEntity userEntity) } @PutMapping("/{id}") - public ResponseEntity updateUser(@PathVariable String id, @RequestBody UserEntity user) { - UserEntity updateUser = userService.updateUser(user); + public ResponseEntity updateUser(@PathVariable String id, @RequestBody UserEntity userEntity) { + UserEntity updateUser = userService.updateUser(userEntity); HttpHeaders headers = getCommonHeaders("Update a user"); return new ResponseEntity<>(updateUser, headers, HttpStatus.OK); @@ -61,9 +61,9 @@ public ResponseEntity deleteUser(@PathVariable("id") String idToDelete) if (userService.existsById(idToDelete)) { userService.deleteUser(idToDelete); - return new ResponseEntity<>("UserEntity deleted", headers, HttpStatus.OK); + return new ResponseEntity<>("User deleted", headers, HttpStatus.OK); } else { - return new ResponseEntity<>("UserEntity not found", headers, HttpStatus.NOT_FOUND); + return new ResponseEntity<>("User not found", headers, HttpStatus.NOT_FOUND); } }