Skip to content

Commit

Permalink
added search 1 #1069
Browse files Browse the repository at this point in the history
  • Loading branch information
MartxelAran committed Oct 19, 2024
1 parent 76bf5f9 commit 7939006
Show file tree
Hide file tree
Showing 5 changed files with 47 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,8 @@
import es.upm.miw.apaw_practice.adapters.mongodb.basketball.entities.BasketSeasonEntity;
import org.springframework.data.mongodb.repository.MongoRepository;

import java.util.Optional;

public interface BasketSeasonRepository extends MongoRepository<BasketSeasonEntity, String> {
Optional<BasketSeasonEntity> findByLeague(String league);
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,23 +2,29 @@

import es.upm.miw.apaw_practice.adapters.mongodb.basketball.daos.BasketBallRepository;
import es.upm.miw.apaw_practice.adapters.mongodb.basketball.daos.BasketMatchRepository;
import es.upm.miw.apaw_practice.adapters.mongodb.basketball.daos.BasketSeasonRepository;
import es.upm.miw.apaw_practice.adapters.mongodb.basketball.entities.BasketBallEntity;
import es.upm.miw.apaw_practice.adapters.mongodb.basketball.entities.BasketMatchEntity;
import es.upm.miw.apaw_practice.adapters.mongodb.basketball.entities.BasketSeasonEntity;
import es.upm.miw.apaw_practice.domain.exceptions.NotFoundException;
import es.upm.miw.apaw_practice.domain.models.basketball.BasketBall;
import es.upm.miw.apaw_practice.domain.persistence_ports.basketball.BasketBallPersistence;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository("basketBallPersistence")
public class BasketBallPersistenceMongodb implements BasketBallPersistence {

private final BasketBallRepository basketBallRepository;
private final BasketMatchRepository basketMatchRepository;
private final BasketSeasonRepository basketSeasonRepository;

public BasketBallPersistenceMongodb(BasketBallRepository basketBallRepository, BasketMatchRepository basketMatchRepository) {
public BasketBallPersistenceMongodb(BasketBallRepository basketBallRepository, BasketMatchRepository basketMatchRepository, BasketSeasonRepository basketSeasonRepository) {
this.basketBallRepository = basketBallRepository;
this.basketMatchRepository = basketMatchRepository;
this.basketSeasonRepository = basketSeasonRepository;
}

@Override
Expand All @@ -31,4 +37,20 @@ public BasketBall update(Integer id, BasketBall basketBall) {
basketBallEntity.setBasketMatchEntity(basketMatchEntity);
return basketBallRepository.save(basketBallEntity).toBasketBall();
}

@Override
public List<String> getDistinctBrands(String league, String playerName) {
BasketSeasonEntity basketSeasonEntity = this.basketSeasonRepository.findByLeague(league)
.orElseThrow(() -> new NotFoundException("Season league name: " + league));
List<BasketMatchEntity> basketMatchEntitiesInSeasons = basketSeasonEntity.getBasketMatchEntities();

return this.basketBallRepository.findAll().stream()
.filter(ball -> basketMatchEntitiesInSeasons.contains(ball.getBasketMatchEntity()))
.flatMap(ball -> ball.getBasketMatchEntity().getBasketPlayers().stream()
.filter(player -> player.getName().equalsIgnoreCase(playerName))
.map(player -> ball.getBrand()))
.distinct()
.toList();
}

}
Original file line number Diff line number Diff line change
@@ -1,16 +1,21 @@
package es.upm.miw.apaw_practice.adapters.rest.basketball;

import es.upm.miw.apaw_practice.adapters.rest.LexicalAnalyzer;
import es.upm.miw.apaw_practice.domain.models.basketball.BasketBall;
import es.upm.miw.apaw_practice.domain.services.basketball.BasketBallService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping(BasketBallResource.BALLS)
public class BasketBallResource {

static final String ID_ID = "/{id}";
static final String SEARCH = "/search";
static final String BALLS = "/basket/balls";
static final String DISTINCT_BRANDS = "/distinct-brands";

private final BasketBallService basketBallService;

Expand All @@ -23,4 +28,11 @@ public BasketBallResource(BasketBallService basketBallService) {
public BasketBall update(@PathVariable Integer id, @RequestBody BasketBall basketBall) {
return this.basketBallService.update(id,basketBall);
}

@GetMapping(SEARCH + DISTINCT_BRANDS)
public List<String> getDistinctBrands(@RequestParam String q) {
String league = new LexicalAnalyzer().extractWithAssure(q, "league").trim();
String playerName = new LexicalAnalyzer().extractWithAssure(q, "playerName").trim();
return this.basketBallService.getDistinctBrands(league,playerName);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,10 @@
import es.upm.miw.apaw_practice.domain.models.basketball.BasketBall;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface BasketBallPersistence {
BasketBall update(Integer id, BasketBall basketBall);
List<String> getDistinctBrands(String league, String playerName);
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
import es.upm.miw.apaw_practice.domain.persistence_ports.basketball.BasketBallPersistence;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class BasketBallService {

Expand All @@ -16,4 +18,8 @@ public BasketBallService(BasketBallPersistence basketBallPersistence) {
public BasketBall update(Integer id, BasketBall basketBall) {
return this.basketBallPersistence.update(id, basketBall);
}

public List<String> getDistinctBrands(String league, String playerName){
return this.basketBallPersistence.getDistinctBrands(league, playerName);
}
}

0 comments on commit 7939006

Please sign in to comment.