package com.izouma.nineth.web; import com.izouma.nineth.config.Constants; import com.izouma.nineth.config.MetaConstants; import com.izouma.nineth.domain.Asset; import com.izouma.nineth.domain.MetaUserProp; import com.izouma.nineth.dto.MetaBagAssetDTO; import com.izouma.nineth.dto.MetaRestResult; import com.izouma.nineth.dto.MetaUserBagDTO; import com.izouma.nineth.repo.AssetRepo; import com.izouma.nineth.repo.MetaUserPropRepo; import com.izouma.nineth.service.MetaParamsConfigService; import com.izouma.nineth.utils.SecurityUtils; import lombok.AllArgsConstructor; import org.apache.commons.lang3.StringUtils; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.TreeSet; import static java.util.Comparator.comparing; import static java.util.stream.Collectors.collectingAndThen; import static java.util.stream.Collectors.toCollection; @RestController @RequestMapping("/metaUserBag") @AllArgsConstructor public class MetaUserBagController { private MetaUserPropRepo metaUserPropRepo; private MetaParamsConfigService metaParamsConfigService; private AssetRepo assetRepo; @GetMapping("/query") public MetaRestResult queryMetaBag() { Long userId = SecurityUtils.getAuthenticatedUser().getId(); List metaUserProps = metaUserPropRepo.findByUserIdAndDel(userId, false); String names = metaParamsConfigService.getString(MetaConstants.META_BAG_COLLECTION_NAME); List metaBagAssetDTOS = queryAsset(names, userId); String id = metaParamsConfigService.getString(MetaConstants.META_CAN_USE_COLLECTION_ID); if (StringUtils.isNotBlank(id)) { List ids = Arrays.asList(id.split(MetaConstants.COMMA)); metaBagAssetDTOS.forEach(metaBagAssetDTO -> { metaBagAssetDTO.setCanUse(ids.contains(String.valueOf(metaBagAssetDTO.getCollectionId()))); }); } return MetaRestResult.returnSuccess(new MetaUserBagDTO(metaBagAssetDTOS, metaUserProps)); } private List queryAsset(String names, Long userId) { List metaBagAssetDTOS = new ArrayList<>(); if (StringUtils.isBlank(names)) { List assets = assetRepo.findAllByUserIdAndDelAndStatusIn(userId, false, Constants.META_NORMAL_STATUS); assets.forEach(asset -> { metaBagAssetDTOS.add(MetaBagAssetDTO.create(asset)); }); return metaBagAssetDTOS; } List nameList = Arrays.asList(names.split(MetaConstants.COMMA)); nameList.forEach( name -> { List assets = assetRepo.findAllByUserIdAndStatusInAndNameLike(userId, Constants.META_NORMAL_STATUS, MetaConstants.LIKE.concat(name).concat(MetaConstants.LIKE)); assets.forEach(asset -> { metaBagAssetDTOS.add(MetaBagAssetDTO.create(asset)); }); } ); return metaBagAssetDTOS.stream().collect( collectingAndThen( toCollection( () -> new TreeSet<>(comparing(MetaBagAssetDTO::getId)) ), ArrayList::new ) ); } }