LoggedInUserServiceImpl.java

package fr.avenirsesr.portfolio.shared.domain.service;

import fr.avenirsesr.portfolio.common.data.domain.model.User;
import fr.avenirsesr.portfolio.common.error.domain.exception.UserNotFoundException;
import fr.avenirsesr.portfolio.common.web.infrastructure.context.RequestContext;
import fr.avenirsesr.portfolio.shared.application.adapter.exception.RequestContextNotDefinedException;
import fr.avenirsesr.portfolio.shared.domain.port.input.LoggedInUserService;
import fr.avenirsesr.portfolio.user.domain.exception.UserIsNotStudentException;
import fr.avenirsesr.portfolio.user.domain.model.Student;
import fr.avenirsesr.portfolio.user.domain.port.output.repository.StudentRepository;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;

@Slf4j
@AllArgsConstructor
public class LoggedInUserServiceImpl implements LoggedInUserService {
  private final StudentRepository studentRepository;

  @Override
  public Student getLoggedInStudent() {
    return studentRepository
        .findById(getLoggedInUser().getId())
        .orElseThrow(UserIsNotStudentException::new);
  }

  @Override
  public User getLoggedInUser() {
    var context = RequestContext.get();
    if (context == null) {
      throw new RequestContextNotDefinedException();
    }
    return RequestContext.get().userLoggedIn().orElseThrow(UserNotFoundException::new);
  }
}