From a3a89abc349d1431eea34ab5e6a611090fb2133a Mon Sep 17 00:00:00 2001 From: Cedric Date: Mon, 23 Dec 2024 11:44:02 +0100 Subject: [PATCH] user endpoints working --- .../controller/AppUserController.java | 45 +++++++++++++++++++ .../app/XpenselyServer/model/AppUser.java | 6 ++- .../repo/ExpenseRepository.java | 9 ++++ .../XpenselyServer/repo/UserRepository.java | 9 ++++ .../security/SecurityConfig.java | 19 ++++++++ .../XpenselyServer/services/UserService.java | 43 ++++++++++++++++++ 6 files changed, 130 insertions(+), 1 deletion(-) create mode 100644 src/main/java/de/zendric/app/XpenselyServer/controller/AppUserController.java create mode 100644 src/main/java/de/zendric/app/XpenselyServer/repo/ExpenseRepository.java create mode 100644 src/main/java/de/zendric/app/XpenselyServer/repo/UserRepository.java create mode 100644 src/main/java/de/zendric/app/XpenselyServer/security/SecurityConfig.java create mode 100644 src/main/java/de/zendric/app/XpenselyServer/services/UserService.java diff --git a/src/main/java/de/zendric/app/XpenselyServer/controller/AppUserController.java b/src/main/java/de/zendric/app/XpenselyServer/controller/AppUserController.java new file mode 100644 index 0000000..5d03e05 --- /dev/null +++ b/src/main/java/de/zendric/app/XpenselyServer/controller/AppUserController.java @@ -0,0 +1,45 @@ +package de.zendric.app.XpenselyServer.controller; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import de.zendric.app.XpenselyServer.model.AppUser; +import de.zendric.app.XpenselyServer.services.UserService; + +@RestController +@RequestMapping("/api/users") +public class AppUserController { + + private UserService userService; + + @Autowired + public AppUserController(UserService userService){ + this.userService= userService; + } + + @GetMapping + public AppUser getUser(@RequestParam Long id){ + return userService.getUser(id); + } + + @PostMapping + public ResponseEntity createUser(@RequestBody AppUser user){ + AppUser appUser = userService.createUser(user); + return ResponseEntity.status(HttpStatus.CREATED).body(appUser); + } + + + @DeleteMapping + public String deleteUser(@RequestParam Long id){ + AppUser user = userService.deleteUserById(id); + return "User deleted : "+ user.getUsername(); + } +} diff --git a/src/main/java/de/zendric/app/XpenselyServer/model/AppUser.java b/src/main/java/de/zendric/app/XpenselyServer/model/AppUser.java index 17b3e10..ff060d9 100644 --- a/src/main/java/de/zendric/app/XpenselyServer/model/AppUser.java +++ b/src/main/java/de/zendric/app/XpenselyServer/model/AppUser.java @@ -4,12 +4,16 @@ import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; +import lombok.AllArgsConstructor; import lombok.Getter; +import lombok.NoArgsConstructor; import lombok.Setter; @Entity @Getter @Setter +@AllArgsConstructor +@NoArgsConstructor public class AppUser { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -17,6 +21,6 @@ public class AppUser { private String username; private String password; + private String email; - } diff --git a/src/main/java/de/zendric/app/XpenselyServer/repo/ExpenseRepository.java b/src/main/java/de/zendric/app/XpenselyServer/repo/ExpenseRepository.java new file mode 100644 index 0000000..3590d36 --- /dev/null +++ b/src/main/java/de/zendric/app/XpenselyServer/repo/ExpenseRepository.java @@ -0,0 +1,9 @@ +package de.zendric.app.XpenselyServer.repo; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import de.zendric.app.XpenselyServer.model.Expense; + +@Repository +public interface ExpenseRepository extends JpaRepository {} diff --git a/src/main/java/de/zendric/app/XpenselyServer/repo/UserRepository.java b/src/main/java/de/zendric/app/XpenselyServer/repo/UserRepository.java new file mode 100644 index 0000000..926b70a --- /dev/null +++ b/src/main/java/de/zendric/app/XpenselyServer/repo/UserRepository.java @@ -0,0 +1,9 @@ +package de.zendric.app.XpenselyServer.repo; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import de.zendric.app.XpenselyServer.model.AppUser; + +@Repository +public interface UserRepository extends JpaRepository {} diff --git a/src/main/java/de/zendric/app/XpenselyServer/security/SecurityConfig.java b/src/main/java/de/zendric/app/XpenselyServer/security/SecurityConfig.java new file mode 100644 index 0000000..fa24b6b --- /dev/null +++ b/src/main/java/de/zendric/app/XpenselyServer/security/SecurityConfig.java @@ -0,0 +1,19 @@ +package de.zendric.app.XpenselyServer.security; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.web.SecurityFilterChain; + +@Configuration +public class SecurityConfig { + + @Bean + public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { + http + .csrf().disable() // Disable CSRF for testing + .authorizeHttpRequests() + .anyRequest().permitAll(); // Allow all requests + return http.build(); + } +} diff --git a/src/main/java/de/zendric/app/XpenselyServer/services/UserService.java b/src/main/java/de/zendric/app/XpenselyServer/services/UserService.java new file mode 100644 index 0000000..68a3cec --- /dev/null +++ b/src/main/java/de/zendric/app/XpenselyServer/services/UserService.java @@ -0,0 +1,43 @@ +package de.zendric.app.XpenselyServer.services; + +import java.util.List; +import java.util.Optional; + +import org.springframework.stereotype.Service; + +import de.zendric.app.XpenselyServer.model.AppUser; +import de.zendric.app.XpenselyServer.repo.UserRepository; + +@Service +public class UserService { + private final UserRepository userRepository; + + public UserService(UserRepository userRepository) { + this.userRepository = userRepository; + } + + public List getAllUsers() { + return userRepository.findAll(); + } + + public AppUser createUser(AppUser user) { + return userRepository.save(user); + } + + public AppUser getUser(Long id) { + Optional user= userRepository.findById(id); + if (user.isPresent()) { + return user.get(); + } + else return null; + } + + public AppUser deleteUserById(Long id) { + Optional user= userRepository.findById(id); + if (user.isPresent()) { + userRepository.deleteById(id); + return user.get(); + } + else return null; + } +} \ No newline at end of file