CreateEquipmentTypeService.java
package com.github.jenkaby.bikerental.equipment.application.service;
import com.github.jenkaby.bikerental.equipment.application.mapper.EquipmentTypeCommandToDomainMapper;
import com.github.jenkaby.bikerental.equipment.application.usecase.CreateEquipmentTypeUseCase;
import com.github.jenkaby.bikerental.equipment.domain.model.EquipmentType;
import com.github.jenkaby.bikerental.equipment.domain.repository.EquipmentTypeRepository;
import com.github.jenkaby.bikerental.shared.exception.ResourceConflictException;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
public class CreateEquipmentTypeService implements CreateEquipmentTypeUseCase {
private final EquipmentTypeRepository repository;
private final EquipmentTypeCommandToDomainMapper mapper;
CreateEquipmentTypeService(EquipmentTypeRepository repository,
EquipmentTypeCommandToDomainMapper mapper) {
this.repository = repository;
this.mapper = mapper;
}
@Override
@Transactional
public EquipmentType execute(CreateEquipmentTypeCommand command) {
if (repository.existsBySlug(command.slug())) {
throw new ResourceConflictException(EquipmentType.class, command.slug());
}
EquipmentType entity = mapper.toEquipmentType(command);
return repository.save(entity);
}
}