FootballResultsMapStore.java
- package com.mojosoft.demo.cache;
- import com.hazelcast.map.MapStore;
- import com.mojosoft.demo.dto.FootballResultDTO;
- import com.mojosoft.demo.entity.FootballResult;
- import com.mojosoft.demo.mapper.MapperHelper;
- import com.mojosoft.demo.repository.FootballResultRepository;
- import com.mojosoft.demo.repository.FootballResultSaveOrUpdateHelper;
- import com.mojosoft.demo.service.FootballResultDbService;
- import jakarta.transaction.Transactional;
- import java.util.ArrayList;
- import java.util.Collection;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import java.util.Optional;
- import org.springframework.context.annotation.Lazy;
- import org.springframework.stereotype.Component;
- /**
- * This class implements the {@link MapStore} interface for the {@link FootballResult} entity.
- */
- @Component
- public class FootballResultsMapStore
- implements MapStore<String, FootballResultDTO> {
- private final FootballResultRepository footballResultRepository;
- private final FootballResultDbService footballResultDbService;
- private final MapperHelper mapperHelper;
- private final FootballResultSaveOrUpdateHelper footballResultSaveOrUpdateHelper;
- /**
- * Constructor, used by Lazy inject the dependencies. so it occurs only when the bean
- * is used and after hazelcast is started.
- *
- * @param footballResultSaveOrUpdateHelper The save or update helper
- * @param footballResultRepository The football result repository
- * @param mapperHelper The mapper helper
- */
- @SuppressWarnings("all")
- public FootballResultsMapStore(
- @Lazy FootballResultRepository footballResultRepository,
- @Lazy FootballResultDbService footballResultDbService,
- @Lazy FootballResultSaveOrUpdateHelper footballResultSaveOrUpdateHelper,
- MapperHelper mapperHelper) {
- this.footballResultRepository = footballResultRepository;
- this.footballResultDbService = footballResultDbService;
- this.footballResultSaveOrUpdateHelper = footballResultSaveOrUpdateHelper;
- this.mapperHelper = mapperHelper;
- }
- @Override
- public void store(String key, FootballResultDTO value) {
- footballResultSaveOrUpdateHelper.save(MatchKey.extractKeyComponents(key), value);
- }
- @Override
- public void storeAll(Map<String, FootballResultDTO> map) {
- if (map == null || map.isEmpty()) {
- return;
- }
- footballResultSaveOrUpdateHelper.saveAll(new ArrayList<>(map.values()));
- }
- @Override
- @Transactional
- public void delete(String key) {
- MatchKey matchKey = MatchKey.extractKeyComponents(key);
- footballResultRepository.deleteBySeasonAndHomeTeamAndAwayTeam(
- matchKey.season(), matchKey.homeTeam(), matchKey.awayTeam());
- }
- @Override
- public void deleteAll(Collection<String> keys) {
- List<MatchKey> matchKeys = convertToMatchKey(keys);
- footballResultDbService.deleteAllByMatchKeys(matchKeys);
- }
- @Override
- public FootballResultDTO load(String key) {
- MatchKey matchKey = MatchKey.extractKeyComponents(key);
- Optional<FootballResult> footballResult = footballResultRepository
- .findBySeasonAndHomeTeamAndAwayTeam(
- matchKey.season(), matchKey.homeTeam(), matchKey.awayTeam());
- return mapperHelper.footballResultToDto(footballResult.orElse(null));
- }
- @Override
- public Map<String, FootballResultDTO> loadAll(Collection<String> keys) {
- Map<String, FootballResultDTO> results = new HashMap<>();
- keys.forEach(key -> {
- MatchKey matchKey = MatchKey.extractKeyComponents(key);
- Optional<FootballResult> footballResult =
- footballResultRepository.findBySeasonAndHomeTeamAndAwayTeam(
- matchKey.season(), matchKey.homeTeam(), matchKey.awayTeam());
- if (footballResult.isPresent()) {
- results.put(key, mapperHelper.footballResultToDto(footballResult.get()));
- } else {
- results.put(key, null);
- }
- });
- return results;
- }
- @Override
- public Iterable<String> loadAllKeys() {
- return footballResultRepository.findAllMatchKeys();
- }
- /**
- * Converts a collection of keys to a list of {@link MatchKey} objects.
- *
- * @param keys the collection of keys
- * @return a list of {@link MatchKey} objects
- */
- private List<MatchKey> convertToMatchKey(Collection<String> keys) {
- return keys.stream().map(MatchKey::extractKeyComponents).toList();
- }
- }