OfferingServiceImpl.java

package com.aleprimo.Booking_System_App.service.serviceImpl;


import com.aleprimo.Booking_System_App.entity.Offering;
import com.aleprimo.Booking_System_App.exception.ResourceNotFoundException;
import com.aleprimo.Booking_System_App.persistence.OfferingDAO;
import com.aleprimo.Booking_System_App.service.OfferingService;
import io.swagger.v3.oas.annotations.Operation;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Optional;

@Service
@RequiredArgsConstructor
public class OfferingServiceImpl implements OfferingService {

    private final OfferingDAO offeringDAO;

    @Override

    public Offering createOffering(Offering offering) {
        return offeringDAO.save(offering);
    }

    @Override

    public Offering updateOffering(Long id, Offering offering) {
        Offering existing = offeringDAO.findById(id)
                .orElseThrow(() -> new ResourceNotFoundException("Servicio no encontrado"));
        existing.setName(offering.getName());
        existing.setDescription(offering.getDescription());
        existing.setDurationMinutes(offering.getDurationMinutes());
        existing.setPrice(offering.getPrice());
        existing.setProvider(offering.getProvider());
        return offeringDAO.save(existing);
    }

    @Override

    public void deleteOffering(Long id) {
        offeringDAO.deleteById(id);
    }

    @Override

    public Optional<Offering> getOfferingById(Long id) {
        return offeringDAO.findById(id);
    }

    @Override

    public Page<Offering> getAllOfferings(Pageable pageable) {
        List<Offering> list = offeringDAO.findAll();
        int start = (int) pageable.getOffset();
        int end = Math.min(start + pageable.getPageSize(), list.size());
        return new PageImpl<>(list.subList(start, end), pageable, list.size());
    }

    @Override

    public Page<Offering> getOfferingsByProviderId(Long providerId, Pageable pageable) {
        List<Offering> list = offeringDAO.findByProviderId(providerId);
        int start = (int) pageable.getOffset();
        int end = Math.min(start + pageable.getPageSize(), list.size());
        return new PageImpl<>(list.subList(start, end), pageable, list.size());
    }
}