UserController.java
package fr.avenirsesr.portfolio.api.application.adapter.controller;
import fr.avenirsesr.portfolio.api.application.adapter.dto.ProfileOverviewDTO;
import fr.avenirsesr.portfolio.api.application.adapter.mapper.ProfileOverviewMapper;
import fr.avenirsesr.portfolio.api.application.adapter.request.ProfileUpdateRequest;
import fr.avenirsesr.portfolio.api.domain.model.User;
import fr.avenirsesr.portfolio.api.domain.model.enums.EUserCategory;
import fr.avenirsesr.portfolio.api.domain.port.input.UserService;
import fr.avenirsesr.portfolio.api.domain.utils.UserUtils;
import java.io.IOException;
import java.security.Principal;
import java.util.UUID;
import lombok.AllArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
@AllArgsConstructor
@RestController
@RequestMapping("/me/user")
public class UserController {
private final UserService userService;
@GetMapping("/{profile}/overview")
public ResponseEntity<ProfileOverviewDTO> getProfile(
Principal principal, @PathVariable String profile) {
var userId = UUID.fromString(principal.getName());
EUserCategory userCategory = UserUtils.getUserCategory(profile);
User user = userService.getProfile(userId);
if (userCategory == EUserCategory.STUDENT) {
return ResponseEntity.ok(ProfileOverviewMapper.userStudentDomainToDto(user.toStudent()));
} else {
return ResponseEntity.ok(ProfileOverviewMapper.userTeacherDomainToDto(user.toTeacher()));
}
}
@PutMapping("/{profile}/update")
public ResponseEntity<String> updateProfile(
@RequestHeader("X-Signed-Context") String userIdRaw,
@PathVariable String profile,
@RequestBody ProfileUpdateRequest request) {
var userId = UUID.fromString(userIdRaw); // @Todo: fetch userLoggedIn
userService.updateProfile(
userId,
request.getFirstname(),
request.getLastname(),
request.getEmail(),
request.getBio());
return ResponseEntity.ok("Mise à jour faite.");
}
@PutMapping("/{profile}/update/photo")
public ResponseEntity<String> updateProfilePhoto(
@RequestHeader("X-Signed-Context") String userIdRaw,
@PathVariable String profile,
@RequestParam("file") MultipartFile photoFile)
throws IOException {
var userId = UUID.fromString(userIdRaw); // @Todo: fetch userLoggedIn
userService.updateProfilePicture(userId, photoFile);
return ResponseEntity.ok("Mise à jour faite.");
}
@PutMapping("/{profile}/update/cover")
public ResponseEntity<String> updateProfileCover(
@RequestHeader("X-Signed-Context") String userIdRaw,
@PathVariable String profile,
@RequestParam("file") MultipartFile coverFile)
throws IOException {
var userId = UUID.fromString(userIdRaw); // @Todo: fetch userLoggedIn
userService.updateCoverPicture(userId, coverFile);
return ResponseEntity.ok("Mise à jour faite.");
}
}