EquipmentTypeRepositoryAdapter.java

package com.github.jenkaby.bikerental.equipment.infrastructure.persistence.adapter;

import com.github.jenkaby.bikerental.equipment.domain.model.EquipmentType;
import com.github.jenkaby.bikerental.equipment.domain.repository.EquipmentTypeRepository;
import com.github.jenkaby.bikerental.equipment.infrastructure.persistence.mapper.EquipmentTypeJpaMapper;
import com.github.jenkaby.bikerental.equipment.infrastructure.persistence.repository.EquipmentTypeJpaRepository;
import org.springframework.stereotype.Repository;

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

@Repository
class EquipmentTypeRepositoryAdapter implements EquipmentTypeRepository {

    private final EquipmentTypeJpaRepository jpaRepository;
    private final EquipmentTypeJpaMapper mapper;

    EquipmentTypeRepositoryAdapter(
            EquipmentTypeJpaRepository jpaRepository,
            EquipmentTypeJpaMapper mapper) {
        this.jpaRepository = jpaRepository;
        this.mapper = mapper;
    }

    @Override
    public EquipmentType save(EquipmentType equipmentType) {
        var jpaEntity = mapper.toEntity(equipmentType);
        var savedEntity = jpaRepository.save(jpaEntity);
        return mapper.toDomain(savedEntity);
    }

    @Override
    public Optional<EquipmentType> findBySlug(String slug) {
        return jpaRepository.findBySlug(slug)
                .map(mapper::toDomain);
    }

    @Override
    public List<EquipmentType> findAll() {
        return jpaRepository.findAll().stream()
                .map(mapper::toDomain)
                .toList();
    }

    @Override
    public boolean existsBySlug(String slug) {
        return jpaRepository.existsBySlug(slug);
    }
}