Ignore:
Timestamp:
12/26/23 18:50:43 (10 months ago)
Author:
gjoko kostadinov <gjokokostadinov@…>
Branches:
master
Children:
1413ee2
Parents:
950fa0d
Message:

Add entire code

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/main/java/edu/gjoko/schedlr/services/AppointmentsService.java

    • Property mode changed from 100644 to 100755
    r950fa0d r77205be  
    11package edu.gjoko.schedlr.services;
    22
    3 import edu.gjoko.schedlr.entity.Appointment;
    4 import edu.gjoko.schedlr.entity.Business;
    5 import edu.gjoko.schedlr.entity.Stakeholder;
     3import edu.gjoko.schedlr.dto.AppointmentInfoDto;
     4import edu.gjoko.schedlr.entity.*;
    65import edu.gjoko.schedlr.exceptions.BlockingTimeException;
     6import edu.gjoko.schedlr.mappers.AppointmentInfoDtoBusinessMapper;
     7import edu.gjoko.schedlr.mappers.AppointmentInfoDtoCustomerMapper;
    78import edu.gjoko.schedlr.repositories.AppointmentRepository;
    89import edu.gjoko.schedlr.repositories.ServiceRepository;
    9 import edu.gjoko.schedlr.repositories.ServiceTypeRepository;
     10import edu.gjoko.schedlr.repositories.StakeholderRepository;
    1011import lombok.AllArgsConstructor;
    1112import org.springframework.stereotype.Service;
    1213
     14import javax.persistence.EntityNotFoundException;
     15import javax.security.sasl.AuthenticationException;
     16import java.time.LocalDateTime;
     17import java.util.ArrayList;
    1318import java.util.List;
     19import java.util.Optional;
    1420
    1521@Service
     
    1824
    1925    private final AppointmentRepository appointmentRepository;
     26    private final StakeholderRepository stakeholderRepository;
     27    private final ServiceRepository serviceRepository;
     28    private final AppointmentInfoDtoBusinessMapper appointmentInfoDtoBusinessMapper;
     29    private final AppointmentInfoDtoCustomerMapper appointmentInfoDtoCustomerMapper;
    2030
    21     private final ServiceRepository serviceRepository;
    2231
    2332    public void saveAppointment(Appointment appointment) {
    2433        var service = serviceRepository.findById(appointment.getService().getId()).get();
    25         appointment.setEndTime(appointment.getStartTime().plusMinutes(service.getDuration()));
     34
     35        // remove 1 minute in order to prevent overlapping
     36        appointment.setEndTime(appointment.getStartTime().plusMinutes(service.getDuration() - 1));
    2637        List<Appointment> blockingAppointments = appointmentRepository.
    2738                findBlockingAppointments(
    28                         appointment.getBusiness().getId(), appointment.getStartTime(), appointment.getEndTime());
     39                        appointment.getService().getBusiness().getId(), appointment.getStartTime(), appointment.getEndTime());
    2940
    3041        // check to see if there are blocking exceptions
     
    3546    }
    3647
    37     public List<Appointment> getAppointmentsByBusiness(Business business) {
    38         return appointmentRepository.getAppointmentsByBusiness(business);
     48    public List<AppointmentInfoDto> getFutureAppointmentInfoList(Long stakeholderId) {
     49        StakeholderType type = stakeholderRepository.findById(stakeholderId).get().getStakeholderType();
     50        List<AppointmentInfoDto> appointmentInfoDtoList = new ArrayList<>();
     51
     52        switch (type) {
     53            case BUSINESS_OWNER -> appointmentInfoDtoList = appointmentRepository.findFutureAppointmentsByBusinessOwnerId(stakeholderId, LocalDateTime.now())
     54                    .stream()
     55                    .map(appointmentInfoDtoBusinessMapper::appointmentToAppointmentInfoDto)
     56                    .toList();
     57            case CUSTOMER -> appointmentInfoDtoList = appointmentRepository.findFutureAppointmentsByCustomerId(stakeholderId, LocalDateTime.now())
     58                    .stream()
     59                    .map(appointmentInfoDtoCustomerMapper::appointmentToAppointmentInfoDto)
     60                    .toList();
     61        }
     62
     63        return appointmentInfoDtoList;
    3964    }
    4065
    41     private List<Appointment> getAppointmentsByCustomer(Stakeholder stakeholder) {
    42         return appointmentRepository.getAppointmentsByCustomer(stakeholder);
     66    public List<AppointmentInfoDto> getPastAppointmentInfoList(Long stakeholderId) {
     67        StakeholderType type = stakeholderRepository.findById(stakeholderId).get().getStakeholderType();
     68        List<Appointment> appointmentInfoDtoList = new ArrayList<>();
     69
     70        switch (type) {
     71            case BUSINESS_OWNER -> appointmentInfoDtoList = appointmentRepository.findPastAppointmentsByBusinessOwnerId(stakeholderId, LocalDateTime.now());
     72            case CUSTOMER -> appointmentInfoDtoList = appointmentRepository.findPastAppointmentsByCustomerId(stakeholderId, LocalDateTime.now());
     73        }
     74
     75        return appointmentInfoDtoList
     76                .stream()
     77                .map(appointmentInfoDtoBusinessMapper::appointmentToAppointmentInfoDto)
     78                .toList();
     79
     80    }
     81
     82    public List<Appointment> getActiveAppointmentsByBusiness(Long businessId) {
     83        return appointmentRepository.getActiveAppointmentsByBusiness(businessId);
     84    }
     85
     86    public void deleteAppointment(Long appointmentId, Long stakeholderId) throws AuthenticationException {
     87        Optional<Stakeholder> stakeholderOptional = stakeholderRepository.findById(stakeholderId);
     88        if (stakeholderOptional.isPresent()) {
     89            Optional<Appointment> optional = appointmentRepository.findAppointmentByIdAndCustomer_Id(appointmentId, stakeholderId);
     90            if (optional.isEmpty()) {
     91                optional = appointmentRepository.findAppointmentByIdAndService_Business_Owner_Id(appointmentId, stakeholderId);
     92                if (optional.isEmpty()) {
     93                    throw new EntityNotFoundException("No appointment was found for the give stakeholder and appointment id.");
     94                } else {
     95                    softDeleteAppointment(optional.get(), AppointmentStatus.CANCELLED_BY_BUSINESS_OWNER);
     96                }
     97            } else {
     98                softDeleteAppointment(optional.get(), AppointmentStatus.CANCELLED_BY_CUSTOMER);
     99            }
     100        } else {
     101            throw new AuthenticationException();
     102        }
     103    }
     104
     105    public void softDeleteAppointment(Appointment appointment, AppointmentStatus appointmentStatus) {
     106        appointment.setAppointmentStatus(appointmentStatus);
     107        appointmentRepository.save(appointment);
    43108    }
    44109}
Note: See TracChangeset for help on using the changeset viewer.