package ru.charm.back.service; import lombok.AccessLevel; import lombok.NoArgsConstructor; import ru.charm.back.dao.ProfileDao; import ru.charm.back.dto.ProfileGetDto; import ru.charm.back.dto.ProfileUpdateDto; import ru.charm.back.dto.RegistrationDto; import ru.charm.back.mapper.ProfileToProfileGetDtoMapper; import ru.charm.back.mapper.ProfileUpdateDtoToProfileMapper; import ru.charm.back.mapper.RegistrationDtoToProfileMapper; import ru.charm.back.model.exception.DuplicateEmailException; import java.util.List; import java.util.Objects; import java.util.Optional; import java.util.Set; @NoArgsConstructor(access = AccessLevel.PRIVATE) public class ProfileService { private static final ProfileService INSTANCE = new ProfileService(); private final ProfileDao dao = ProfileDao.getInstance(); private final ProfileToProfileGetDtoMapper profileToProfileGetDtoMapper = ProfileToProfileGetDtoMapper.getInstance(); private final ProfileUpdateDtoToProfileMapper profileUpdateDtoToProfileMapper = ProfileUpdateDtoToProfileMapper.getInstance(); private final RegistrationDtoToProfileMapper registrationDtoToProfileMapper = RegistrationDtoToProfileMapper.getInstance(); public static ProfileService getInstance() { return INSTANCE; } public Long save(RegistrationDto dto) { return dao.save(registrationDtoToProfileMapper.map(dto)).getId(); } public Optional findById(Long id) { return dao.findById(id).map(profileToProfileGetDtoMapper::map); } public List findAll() { return dao.findAll().stream().map(profileToProfileGetDtoMapper::map).toList(); } public void update(ProfileUpdateDto dto) { dao.findById(dto.getId()) .ifPresent(profile -> { dao.update(profileUpdateDtoToProfileMapper.map(dto, profile)); } ); } public boolean delete(Long id) { return dao.delete(id); } }