This repository was archived by the owner on May 1, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
This repository was archived by the owner on May 1, 2024. It is now read-only.
Refactor user service implementation #73
Copy link
Copy link
Open
Labels
code_qualityCode Quality ImprovementsCode Quality ImprovementsenhancementNew feature or requestNew feature or request
Description
Refactor this:
// UserMutationServiceImpl.java
public Availability createReservation(UUID availabilityId, User user)
throws UserNotFoundException, AvailabilityNotFoundException, InvalidAvailabilityIDException {
Optional<Availability> availabilityOptional = availabilityRepository.findById(availabilityId);
if (!userRepository.existsById(user.getId())) throw new UserNotFoundException("User not found");
if (availabilityOptional.isEmpty()) throw new AvailabilityNotFoundException("Availability not found");
Availability availabilityRequested = availabilityOptional.get();
if (availabilityRequested.getStatus() == Status.TAKEN)
throw new InvalidAvailabilityIDException("Availability already taken");
boolean isRitiroPassaporto = availabilityRequested
.getRequest()
.getRequestType()
.getName()
.equals("ritiro passaporto");
ArrayList<Availability> rilascioPassaportiOfUser = availabilityRepository
.findByUser(user)
.stream()
.filter(availability -> availability.getStatus() == Status.TAKEN)
.filter(availability -> availability.getRequest()
.getRequestType()
.getName()
.equals("rilascio passaporto"))
.sorted((availability1, availability2) ->
availability2.getDate().compareTo(availability1.getDate()))
.collect(Collectors.toCollection(ArrayList::new));
Date rilascioDatePlusOneMonth = DateUtils
.addMonths(
rilascioPassaportiOfUser
.getLast()
.getDate(),
1
);
boolean isDateValid = !rilascioPassaportiOfUser.isEmpty() &&
availabilityRequested
.getDate()
.after(rilascioDatePlusOneMonth);
if (isRitiroPassaporto && !isDateValid)
throw new InvalidAvailabilityIDException("Availability not valid for the request");
availabilityRequested.setStatus(Status.TAKEN);
availabilityRequested.setUser(user);
availabilityRepository.save(availabilityRequested);
return availabilityRequested;
}and this:
// UserQueryServiceImpl.java
public ReportDetails getReportDetailsByAvailabilityID(String availabilityId, JWT token)
throws SecurityException, InvalidAvailabilityIDException {
Object userToken = jwtService.getUserOrWorkerFromToken(token);
if (!(userToken instanceof User))
throw new SecurityException("Only user can access reports");
Optional<Availability> optionalAvailability = reservationRepository.findById(UUID.fromString(availabilityId));
if (optionalAvailability.isEmpty())
throw new InvalidAvailabilityIDException("Invalid Availability ID");
Availability availability = optionalAvailability.get();
if (!availability.getStatus().equals(Status.TAKEN))
throw new InvalidAvailabilityIDException("Can't get report of free availabilities");
User user = availability.getUser();
String fiscalCodeAvailability = user.getFiscalCode();
if (!fiscalCodeAvailability.equals(((User) userToken).getFiscalCode()))
throw new SecurityException("Only user whose record belongs to can access it");
Request request = availability.getRequest();
Office office = availability.getOffice();
RequestType requestType = request.getRequestType();
return new ReportDetails(
fiscalCodeAvailability,
user.getName(),
user.getSurname(),
user.getCityOfBirth(),
user.getDateOfBirth(),
availability.getDate(),
request.getStartTime(),
requestType.getName(),
office.getName(),
office.getAddress()
);
}Metadata
Metadata
Assignees
Labels
code_qualityCode Quality ImprovementsCode Quality ImprovementsenhancementNew feature or requestNew feature or request