Skip to content
This repository has been archived by the owner on May 1, 2024. It is now read-only.

Refactor user service implementation #73

Open
Francesco146 opened this issue Feb 7, 2024 · 0 comments
Open

Refactor user service implementation #73

Francesco146 opened this issue Feb 7, 2024 · 0 comments
Assignees
Labels
code_quality Code Quality Improvements enhancement New feature or request

Comments

@Francesco146
Copy link
Owner

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()
        );
    }
@Francesco146 Francesco146 added wontfix This will not be worked on security Security related bugs enhancement New feature or request code_quality Code Quality Improvements and removed wontfix This will not be worked on security Security related bugs labels Feb 7, 2024
@Francesco146 Francesco146 self-assigned this Feb 7, 2024
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
code_quality Code Quality Improvements enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

1 participant