Commit cf5ffaa5 authored by Samuel Kulisek's avatar Samuel Kulisek
Browse files

Add findByAgentId to AgentMissionAssignment repository, Update facade and service

parent 5ee39d5d
Pipeline #140655 passed with stage
in 1 minute and 28 seconds
package cz.muni.fi.pa165.repository;
import cz.muni.fi.pa165.entity.AgentMissionAssignment;
import cz.muni.fi.pa165.entity.Skill;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
public interface AgentMissionAssignmentRepository extends JpaRepository<AgentMissionAssignment, Long> {
@Query("SELECT ama FROM AgentMissionAssignment ama WHERE ama.mission = :mission")
Page<AgentMissionAssignment> findByMissionId(Long mission, Pageable page);
@Query("SELECT ama FROM AgentMissionAssignment ama WHERE ama.agent = :agent")
Page<AgentMissionAssignment> findByAgentId(Long agent, Pageable page);
}
......@@ -5,7 +5,9 @@ import cz.muni.fi.pa165.config.MissionListMapper;
import cz.muni.fi.pa165.dto.MissionDetailDto;
import cz.muni.fi.pa165.dto.MissionListDto;
import cz.muni.fi.pa165.entity.Agent;
import cz.muni.fi.pa165.entity.AgentMissionAssignment;
import cz.muni.fi.pa165.entity.Mission;
import cz.muni.fi.pa165.service.AgentMissionAssignmentService;
import cz.muni.fi.pa165.service.MissionService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
......@@ -23,40 +25,30 @@ import java.util.stream.Collectors;
@Service
public class MissionFacadeImpl implements MissionFacade {
private final MissionService missionService;
private final AgentMissionAssignmentService agentMissionAssignmentService;
private final MissionListMapper missionListMapper;
private final MissionDetailMapper missionDetailMapper;
@Autowired
public MissionFacadeImpl(MissionService missionService, MissionListMapper missionListMapper, MissionDetailMapper missionDetailMapper) {
public MissionFacadeImpl(MissionService missionService, AgentMissionAssignmentService agentMissionAssignmentService, MissionListMapper missionListMapper, MissionDetailMapper missionDetailMapper) {
this.missionService = missionService;
this.agentMissionAssignmentService = agentMissionAssignmentService;
this.missionListMapper = missionListMapper;
this.missionDetailMapper = missionDetailMapper;
}
@Override
public Page<MissionListDto> getAgentMissions(Long agentId, int page, int pageSize) {
List<Mission> missions = missionService.findAll();
List<MissionListDto> filtered = missions
Pageable pageable = PageRequest.of(page, pageSize);
Page<AgentMissionAssignment> assignments = agentMissionAssignmentService.findByAgentId(agentId, pageable);
List<MissionListDto> missionListDtos = assignments
.map(e -> missionListMapper.map(e.getMission()))
.stream()
.filter(mission -> {
List<Long> agentIds = mission.getAssignments()
.stream()
.map(agentMissionAssignment -> agentMissionAssignment.getAgent().getId())
.collect(Collectors.toList());
return agentIds.contains(agentId);
})
.map(missionListMapper::map)
.distinct()
.collect(Collectors.toList());
Pageable pageable = PageRequest.of(page, pageSize);
final int start = (int) pageable.getOffset();
final int end = Math.min((start + pageable.getPageSize()), filtered.size());
return new PageImpl<>(filtered.subList(start, end), pageable, filtered.size());
return new PageImpl<MissionListDto>(missionListDtos);
}
@Override
......
......@@ -27,6 +27,14 @@ public class AgentMissionAssignmentService {
return agentMissionAssignmentRepository.findAll(page);
}
public Page<AgentMissionAssignment> findByMissionId(Long missionId, Pageable page) {
return agentMissionAssignmentRepository.findByMissionId(missionId, page);
}
public Page<AgentMissionAssignment> findByAgentId(Long agentId, Pageable page) {
return agentMissionAssignmentRepository.findByAgentId(agentId, page);
}
public Long create(AgentMissionAssignment agentMissionAssignment) {
return agentMissionAssignmentRepository.save(agentMissionAssignment).getId();
}
......
......@@ -12,17 +12,22 @@ import cz.muni.fi.pa165.entity.AgentMissionAssignment;
import cz.muni.fi.pa165.entity.Country;
import cz.muni.fi.pa165.entity.Mission;
import cz.muni.fi.pa165.enums.Continent;
import cz.muni.fi.pa165.service.AgentMissionAssignmentService;
import cz.muni.fi.pa165.service.MissionService;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mapstruct.factory.Mappers;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.PageRequest;
import java.sql.Date;
import java.time.LocalDate;
......@@ -38,6 +43,8 @@ public class MissionFacadeTest {
@MockBean
private MissionService missionService;
@MockBean
private AgentMissionAssignmentService agentMissionAssignmentService;
private final MissionDetailMapper missionDetailMapper = Mappers.getMapper(MissionDetailMapper.class);
private final MissionListMapper missionListMapper = Mappers.getMapper(MissionListMapper.class);
......@@ -124,6 +131,9 @@ public class MissionFacadeTest {
missions.add(mission2);
Mockito.when(missionService.findAll()).thenReturn(missions);
Page<AgentMissionAssignment> assignments = new PageImpl<AgentMissionAssignment>(List.of(assignment1, assignment2));
Mockito.when(agentMissionAssignmentService.findByAgentId(cassette.getId(), PageRequest.of(0, 10))).thenReturn(assignments);
List<MissionListDto> missionsDtos = new ArrayList<>();
MissionListDto missionListDto1 = new MissionListDto();
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment