Merged with master
This commit is contained in:
commit
ffc4f4709b
40
.gitlab-ci.yml
Executable file
40
.gitlab-ci.yml
Executable file
@ -0,0 +1,40 @@
|
||||
stages:
|
||||
- build
|
||||
- deploy
|
||||
|
||||
build:
|
||||
stage: build
|
||||
image: maven
|
||||
script:
|
||||
- echo "Start building App"
|
||||
- echo "spring.profiles.active=prod" > restservice/src/main/resources/application.properties
|
||||
- mvn clean
|
||||
- mvn install
|
||||
- cd restservice
|
||||
- mvn clean package spring-boot:repackage
|
||||
- echo "Build successfully!"
|
||||
artifacts:
|
||||
expire_in: 1 hour
|
||||
paths:
|
||||
- restservice/target/
|
||||
|
||||
deploy_production:
|
||||
stage: deploy
|
||||
before_script:
|
||||
- apt-get update
|
||||
- apt-get --yes --force-yes install rsync
|
||||
script:
|
||||
- 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
|
||||
- eval $(ssh-agent -s)
|
||||
- ssh-add <(echo "$SSH_PRIVATE_KEY")
|
||||
- mkdir -p ~/.ssh
|
||||
- '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
|
||||
- echo "Deploying to server"
|
||||
- ssh backend@wmi-backend-gc.plannaplan.pl -t "sudo systemctl stop plannaplan-backend"
|
||||
- ssh backend@wmi-backend-gc.plannaplan.pl -t "rm -rf /opt/plannaplan-backend/backend.jar"
|
||||
- rsync --progress restservice/target/*.jar backend@wmi-backend-gc.plannaplan.pl:/opt/plannaplan-backend/backend.jar
|
||||
- sleep 5
|
||||
- ssh backend@wmi-backend-gc.plannaplan.pl -t "sudo systemctl start plannaplan-backend"
|
||||
- echo "Deployed"
|
||||
only:
|
||||
- master
|
@ -29,7 +29,8 @@ import org.springframework.web.bind.annotation.RequestMapping;
|
||||
@CrossOrigin
|
||||
@RequestMapping("/api/" + App.API_VERSION + "/assignments")
|
||||
@Api(tags = {
|
||||
"Assignments" }, value = "Assignments", description = "Assignment is representation of student willing to join given group (lecture or calss)")
|
||||
"Assignments" }, value = "Assignments", description = "Assignment is representation of student willing to join given group (lecture or calss). This comtroller is depreaceted. Use commission instead")
|
||||
@Deprecated
|
||||
public class AssignmentsController extends TokenBasedController {
|
||||
|
||||
@Autowired
|
||||
@ -39,7 +40,8 @@ public class AssignmentsController extends TokenBasedController {
|
||||
private AssignmentService assignmentService;
|
||||
|
||||
@GetMapping("/user")
|
||||
@ApiOperation(value = "Return user current assignemts (from newest commision). STUDENT Token needs to be provided.")
|
||||
@ApiOperation(value = "Return user current assignemts (from newest commision). STUDENT Token needs to be provided. This method is depreaceted. Use `/api/v1/commisions/user/schedule` instead.")
|
||||
@Deprecated
|
||||
public ResponseEntity<List<AssignmentResponse>> getCurrentAssignments() throws Exception {
|
||||
User user = this.getCurrentUser().orElseThrow(() -> new NullPointerException("User not found"));
|
||||
Optional<Commision> com = this.commisionService.getNewestCommision(user);
|
||||
|
@ -33,6 +33,12 @@ import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.util.Assert;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import com.plannaplan.responses.mappers.AssignmentResponseMappers;
|
||||
import com.plannaplan.responses.models.AssignmentResponse;
|
||||
|
||||
@RestController
|
||||
@CrossOrigin
|
||||
@ -96,22 +102,75 @@ public class CommisionController extends TokenBasedController {
|
||||
|
||||
@GetMapping("/user")
|
||||
@ApiOperation("Return list of user all commisions (history of schedules)")
|
||||
public ResponseEntity<List<CommisionResponse>> getAlCommisions() throws UserNotFoundException {
|
||||
public ResponseEntity<List<? extends CommisionResponse>> getAlCommisions(
|
||||
@RequestParam(name = "groups", defaultValue = "false") @ApiParam(value = "Boolean if we want to display wiht commision's group ids") Boolean groups)
|
||||
throws UserNotFoundException {
|
||||
User user = this.getCurrentUser().orElseThrow(() -> new NullPointerException());
|
||||
List<CommisionResponse> result = CommisionResponseMappers
|
||||
.mapToResponse(this.commisionService.getUsersCommisions(user));
|
||||
|
||||
List<? extends CommisionResponse> result;
|
||||
|
||||
if (!groups) {
|
||||
result = CommisionResponseMappers.mapToResponse(this.commisionService.getUsersCommisions(user));
|
||||
} else {
|
||||
result = CommisionResponseMappers
|
||||
.mapToResponseWithGroups(this.commisionService.getUsersCommisions(user));
|
||||
}
|
||||
|
||||
return new ResponseEntity<>(result, HttpStatus.OK);
|
||||
}
|
||||
|
||||
@GetMapping("/user/schedule")
|
||||
@ApiOperation(value = "Return user current assignemts (from newest commision). STUDENT Token needs to be provided.")
|
||||
public ResponseEntity<List<AssignmentResponse>> getCurrentAssignments() throws Exception {
|
||||
User user = this.getCurrentUser().orElseThrow(() -> new NullPointerException("User not found"));
|
||||
Optional<Commision> com = this.commisionService.getNewestCommision(user);
|
||||
|
||||
if (com.isPresent()) {
|
||||
List<Assignment> respone = this.assignmentService.getCommisionAssignments(com.get());
|
||||
return new ResponseEntity<>(AssignmentResponseMappers.mapToResponse(respone), HttpStatus.OK);
|
||||
}
|
||||
|
||||
return new ResponseEntity<>(new ArrayList<>(), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PreAuthorize("hasRole('ROLE_DEANERY')")
|
||||
@GetMapping("/user/{id}")
|
||||
@ApiOperation("Return list of commisions for given user. To be able to access this data u need to provide DEANERY token")
|
||||
public ResponseEntity<List<CommisionResponse>> getCommision(@PathVariable(name = "id") Long userId)
|
||||
public ResponseEntity<List<? extends CommisionResponse>> getCommision(@PathVariable(name = "id") Long userId,
|
||||
@RequestParam(name = "groups", defaultValue = "false") @ApiParam(value = "Boolean if we want to display wiht commision's group ids") Boolean groups)
|
||||
throws UserNotFoundException {
|
||||
User user = this.userService.getById(userId).orElseThrow(() -> new NullPointerException());
|
||||
List<CommisionResponse> result = CommisionResponseMappers
|
||||
.mapToResponse(this.commisionService.getUsersCommisions(user));
|
||||
List<? extends CommisionResponse> result;
|
||||
|
||||
if (!groups) {
|
||||
result = CommisionResponseMappers.mapToResponse(this.commisionService.getUsersCommisions(user));
|
||||
} else {
|
||||
result = CommisionResponseMappers
|
||||
.mapToResponseWithGroups(this.commisionService.getUsersCommisions(user));
|
||||
}
|
||||
|
||||
return new ResponseEntity<>(result, HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PreAuthorize("hasRole('ROLE_DEANERY')")
|
||||
@GetMapping("/user/{id}/schedule")
|
||||
@ApiOperation(value = "Return given user current assignemts (from newest commision). DEANERY Token needs to be provided.")
|
||||
public ResponseEntity<List<AssignmentResponse>> getCurrentAssignmentsDeanery(
|
||||
@PathVariable(name = "id") Long userId) throws Exception {
|
||||
User user = this.userService.getById(userId).orElseThrow(() -> new NullPointerException());
|
||||
|
||||
if (user.getRole() == UserRoles.DEANERY) {
|
||||
return new ResponseEntity<>(null, HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
|
||||
Optional<Commision> com = this.commisionService.getNewestCommision(user);
|
||||
|
||||
if (com.isPresent()) {
|
||||
List<Assignment> respone = this.assignmentService.getCommisionAssignments(com.get());
|
||||
return new ResponseEntity<>(AssignmentResponseMappers.mapToResponse(respone), HttpStatus.OK);
|
||||
}
|
||||
|
||||
return new ResponseEntity<>(new ArrayList<>(), HttpStatus.OK);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -6,9 +6,15 @@ import java.util.stream.Collectors;
|
||||
|
||||
import com.plannaplan.entities.Commision;
|
||||
import com.plannaplan.responses.models.CommisionResponse;
|
||||
import com.plannaplan.responses.models.CommisionWithGroupsResponse;
|
||||
|
||||
public class CommisionResponseMappers {
|
||||
public static final List<CommisionResponse> mapToResponse(List<Commision> commisions) {
|
||||
return commisions.stream().filter(Objects::nonNull).map(CommisionResponse::new).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
public static final List<CommisionWithGroupsResponse> mapToResponseWithGroups(List<Commision> commisions) {
|
||||
return commisions.stream().filter(Objects::nonNull).map(CommisionWithGroupsResponse::new)
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
}
|
||||
|
@ -1,7 +1,5 @@
|
||||
package com.plannaplan.responses.models;
|
||||
|
||||
import java.sql.Timestamp;
|
||||
|
||||
import com.plannaplan.entities.Commision;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
@ -13,14 +11,14 @@ public class CommisionResponse {
|
||||
private Long id;
|
||||
|
||||
@ApiModelProperty(value = "Timestamp where the user commit the commision")
|
||||
private Timestamp commisionDate;
|
||||
private String commisionDate;
|
||||
|
||||
public CommisionResponse(Commision commision) {
|
||||
this.id = commision.getId();
|
||||
this.commisionDate = commision.getCommisionDate();
|
||||
this.commisionDate = commision.getCommisionDate().toString();
|
||||
}
|
||||
|
||||
public Timestamp getCommisionDate() {
|
||||
public String getCommisionDate() {
|
||||
return commisionDate;
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,36 @@
|
||||
package com.plannaplan.responses.models;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import com.plannaplan.entities.Assignment;
|
||||
import com.plannaplan.entities.Commision;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
|
||||
@ApiModel(description = "Response shows information about commision and its groups.", value = "CommisionWithGroupsResponse")
|
||||
public class CommisionWithGroupsResponse extends CommisionResponse {
|
||||
|
||||
@ApiModelProperty(value = "List of groups ids in databse that belongs to commision")
|
||||
private List<Long> groups;
|
||||
|
||||
public CommisionWithGroupsResponse(Commision commision) {
|
||||
super(commision);
|
||||
this.groups = commision.getAssignments().stream().filter(Objects::nonNull)
|
||||
.map(new Function<Assignment, Long>() {
|
||||
|
||||
@Override
|
||||
public Long apply(Assignment arg0) {
|
||||
return arg0.getGroup().getId();
|
||||
}
|
||||
}).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
public List<Long> getGroups() {
|
||||
return groups;
|
||||
}
|
||||
|
||||
}
|
@ -43,6 +43,7 @@ public class CommisionControllerTest extends AbstractControllerTest {
|
||||
private static final String ADD_COMMISION_ENDPOINT = "/api/v1/commisions/user";
|
||||
private static final String GET_COMMISIONS_ENDPOINT = "/api/v1/commisions/user";
|
||||
private static final String GET_SOMEONE_COMMISIONS_ENDPOINT = "/api/v1/commisions/user";
|
||||
private static final String GET_USER_SCHEDULE_ENDPOINT = "/api/v1/commisions/user/schedule";
|
||||
|
||||
private static final MediaType APPLICATION_JSON_UTF8 = new MediaType(MediaType.APPLICATION_JSON.getType(),
|
||||
MediaType.APPLICATION_JSON.getSubtype(), Charset.forName("utf8"));
|
||||
@ -190,6 +191,58 @@ public class CommisionControllerTest extends AbstractControllerTest {
|
||||
.header("Authorization", "Bearer " + token)).andExpect(status().is4xxClientError());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldReturn4xxInScheduleEndpoint() throws Exception {
|
||||
MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build();
|
||||
mockMvc.perform(get(GET_USER_SCHEDULE_ENDPOINT)).andExpect(status().is4xxClientError());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldReturnOkInScheduleEdnpoint() throws Exception {
|
||||
final User user = this.service.checkForUser(TEST_COMMISIONS_STUDENT_EMAIL, null);
|
||||
final String token = this.service.login(user).getToken();
|
||||
|
||||
MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build();
|
||||
mockMvc.perform(get(GET_USER_SCHEDULE_ENDPOINT).header("Authorization", "Bearer " + token))
|
||||
.andExpect(status().isOk());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldReturnOkInScheduleEdnpointByDeanery() throws Exception {
|
||||
this.checkUsers();
|
||||
final User user = this.service.checkForUser(TEST_COMMISIONS_DEANERY_EMAIL, null);
|
||||
final User student = this.service.checkForUser(TEST_COMMISIONS_STUDENT_EMAIL, null);
|
||||
final String token = this.service.login(user).getToken();
|
||||
|
||||
MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build();
|
||||
mockMvc.perform(get(GET_COMMISIONS_ENDPOINT + "/" + student.getId() + "/schedule").header("Authorization",
|
||||
"Bearer " + token)).andExpect(status().isOk());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldFailInScheduleEdnpointByOtherStudent() throws Exception {
|
||||
this.checkUsers();
|
||||
final User student = this.service.checkForUser(TEST_COMMISIONS_STUDENT_EMAIL, null);
|
||||
final User otherStudent = this.service.checkForUser(TEST_COMMISIONS_OTHER_STUDENT_EMAIL, null);
|
||||
final String token = this.service.login(student).getToken();
|
||||
|
||||
MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build();
|
||||
mockMvc.perform(get(GET_COMMISIONS_ENDPOINT + "/" + otherStudent.getId() + "/schedule").header("Authorization",
|
||||
"Bearer " + token)).andExpect(status().is4xxClientError());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldFailInScheduleEdnpointByDeaneryDeaneryRelation() throws Exception {
|
||||
this.checkUsers();
|
||||
final User deanery = this.service.checkForUser(TEST_COMMISIONS_DEANERY_EMAIL, null);
|
||||
final User otherDeanery = this.service.checkForUser(TEST_COMMISIONS_OTHER_DEANERY_EMAIL, null);
|
||||
final String token = this.service.login(deanery).getToken();
|
||||
|
||||
MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build();
|
||||
mockMvc.perform(get(GET_COMMISIONS_ENDPOINT + "/" + otherDeanery.getId() + "/schedule").header("Authorization",
|
||||
"Bearer " + token)).andExpect(status().is4xxClientError());
|
||||
}
|
||||
|
||||
private void checkUsers() {
|
||||
if (CommisionControllerTest.user == null) {
|
||||
CommisionControllerTest.user = new User(null, null, TEST_COMMISIONS_STUDENT_EMAIL, UserRoles.STUDENT);
|
||||
|
@ -2,11 +2,16 @@ package com.plannaplan.responses.mappers;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import com.plannaplan.entities.Assignment;
|
||||
import com.plannaplan.entities.Commision;
|
||||
import com.plannaplan.entities.Groups;
|
||||
import com.plannaplan.responses.models.CommisionResponse;
|
||||
import com.plannaplan.responses.models.CommisionWithGroupsResponse;
|
||||
import com.plannaplan.types.WeekDay;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
@ -17,7 +22,36 @@ public class CommisionResponseMappersTest {
|
||||
final List<CommisionResponse> resposne = CommisionResponseMappers.mapToResponse(coms);
|
||||
|
||||
assertTrue(resposne.get(0) instanceof CommisionResponse);
|
||||
assertTrue(resposne.get(0).getCommisionDate().equals(coms.get(0).getCommisionDate()));
|
||||
assertTrue(resposne.get(1).getCommisionDate().equals(coms.get(1).getCommisionDate()));
|
||||
assertTrue(resposne.get(0).getCommisionDate().equals(coms.get(0).getCommisionDate().toString()));
|
||||
assertTrue(resposne.get(1).getCommisionDate().equals(coms.get(1).getCommisionDate().toString()));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldMapListWithEntityToListOfResponsesWithGroups()
|
||||
throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
|
||||
|
||||
final Field reader = Commision.class.getDeclaredField("assignments");
|
||||
final Field groupReader = Groups.class.getDeclaredField("id");
|
||||
reader.setAccessible(true);
|
||||
groupReader.setAccessible(true);
|
||||
|
||||
final Commision com1 = new Commision(null);
|
||||
final Groups group1 = new Groups(43, "BRAK", null, 840, WeekDay.MONDAY, null);
|
||||
|
||||
groupReader.set(group1, Long.valueOf(8));
|
||||
reader.set(com1, Arrays.asList(new Assignment(group1, com1)));
|
||||
|
||||
final Commision com2 = new Commision(null);
|
||||
final Groups group2 = new Groups(124, "BRAK", null, 900, WeekDay.WEDNESDAY, null);
|
||||
|
||||
groupReader.set(group2, Long.valueOf(9));
|
||||
reader.set(com2, Arrays.asList(new Assignment(group2, com2)));
|
||||
|
||||
final List<CommisionWithGroupsResponse> resposne = CommisionResponseMappers
|
||||
.mapToResponseWithGroups(Arrays.asList(com1, com2));
|
||||
|
||||
assertTrue(resposne.size() == 2);
|
||||
assertTrue(resposne.get(0).getGroups().get(0) == 8);
|
||||
assertTrue(resposne.get(1).getGroups().get(0) == 9);
|
||||
}
|
||||
}
|
||||
|
@ -12,6 +12,6 @@ public class CommisionResponseTest {
|
||||
final Commision com = new Commision(null);
|
||||
final CommisionResponse comResponse = new CommisionResponse(com);
|
||||
|
||||
assertTrue(comResponse.getCommisionDate().equals(com.getCommisionDate()));
|
||||
assertTrue(comResponse.getCommisionDate().equals(com.getCommisionDate().toString()));
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,34 @@
|
||||
package com.plannaplan.responses.models;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.Arrays;
|
||||
|
||||
import com.plannaplan.entities.Assignment;
|
||||
import com.plannaplan.entities.Commision;
|
||||
import com.plannaplan.entities.Groups;
|
||||
import com.plannaplan.types.WeekDay;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
public class CommisionWithGroupsResponseTest {
|
||||
@Test
|
||||
public void shouldMapCommisionToResponse()
|
||||
throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
|
||||
final Field reader = Commision.class.getDeclaredField("assignments");
|
||||
final Field groupReader = Groups.class.getDeclaredField("id");
|
||||
reader.setAccessible(true);
|
||||
groupReader.setAccessible(true);
|
||||
|
||||
final Commision com = new Commision(null);
|
||||
final Groups group = new Groups(43, "BRAK", null, 840, WeekDay.MONDAY, null);
|
||||
|
||||
groupReader.set(group, Long.valueOf(8));
|
||||
reader.set(com, Arrays.asList(new Assignment(group, com)));
|
||||
|
||||
final CommisionWithGroupsResponse comResponse = new CommisionWithGroupsResponse(com);
|
||||
|
||||
assertTrue(comResponse.getGroups().get(0) == 8);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user