UserController.java
package com.codecool.bytebattlers.controller;
import com.codecool.bytebattlers.controller.dto.AppUserDto;
import com.codecool.bytebattlers.controller.exception.ResourceNotFoundException;
import com.codecool.bytebattlers.model.AuthenticationResponse;
import com.codecool.bytebattlers.service.UserService;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.UUID;
@RestController
@RequestMapping("/api/users")
public class UserController {
private final UserService userService;
public UserController(UserService userService) {
this.userService = userService;
}
@GetMapping
public ResponseEntity<List<AppUserDto>> getAllUser() {
if (userService.findAll().isEmpty()) {
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
} else {
return new ResponseEntity<>(userService.findAll(), HttpStatus.OK);
}
}
@GetMapping("/{id}")
public ResponseEntity<AppUserDto> getUserById(@PathVariable UUID id) {
if (userService.findById(id) == null) {
throw new ResourceNotFoundException("User not found with id " + id);
} else {
return new ResponseEntity<>(userService.findById(id), HttpStatus.OK);
}
}
@PatchMapping("/{id}")
public ResponseEntity<AppUserDto> updateUserById(@PathVariable UUID id, @RequestBody UUID appUserDto) {
try {
if (id == null || appUserDto == null) {
throw new Exception("Invalid input data");
}
AppUserDto user = userService.findById(id);
if (user == null) {
throw new ResourceNotFoundException("User not found with id = " + id);
}
AppUserDto updatedUser = userService.update(id, appUserDto);
return new ResponseEntity<>(updatedUser, HttpStatus.OK);
} catch (Exception e) {
return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
}
}
@DeleteMapping("/favorites/{id}")
public ResponseEntity<AppUserDto> deleteBGFromUserFavorites(@PathVariable UUID id, @RequestBody UUID bgID) {
try {
if (id == null || bgID == null) {
throw new Exception("Invalid input data");
}
AppUserDto user = userService.findById(id);
if (user == null) {
throw new ResourceNotFoundException("User not found with id = " + id);
}
AppUserDto userWithDeletedFavorite = userService.deleteFromFavorites(id, bgID);
return new ResponseEntity<>(userWithDeletedFavorite, HttpStatus.OK);
} catch (Exception e) {
return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
}
}
@PostMapping("/register")
public ResponseEntity<AppUserDto> registerNewUser(@RequestBody AppUserDto user) {
try {
userService.register(user);
return new ResponseEntity<>(user, HttpStatus.CREATED);
} catch (RuntimeException e) {
return new ResponseEntity<>(null, HttpStatus.CONFLICT);
}
}
@PostMapping("/login")
public ResponseEntity<AuthenticationResponse> authenticateUser(@RequestBody AppUserDto user) {
return new ResponseEntity<>(userService.authenticate(user), HttpStatus.OK);
}
@DeleteMapping("/{id}")
public ResponseEntity<AppUserDto> deleteUserById(@PathVariable UUID id) {
userService.deleteById(id);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
}