Resolved confilics with master

Signed-off-by: Marcin Woźniak <y0rune@aol.com>
This commit is contained in:
2020-12-02 12:16:31 +01:00
19 changed files with 590 additions and 87 deletions

View File

@ -23,26 +23,34 @@ public class Assignment {
@ManyToOne
@JoinColumn(name = "commision_id")
private Commision commision;
private boolean isPastAssignment;
/**
* Assignment
*
* @param group group you would like to assign
* @param commision commision assignment belongs to group
*
* Assignment
* @param group group we would like to assign
* @param commision commision that assignment belongs to
* @param isPastAssignment is assignment past or no
*/
public Assignment(Groups group, Commision commision) {
public Assignment(Groups group, Commision commision, boolean isPastAssignment) {
this.commision = commision;
this.group = group;
}
/**
* Assignment
* @param group group we would like to assign
* @param commision commision that assignment belongs to
*/
public Assignment(Groups group, Commision commision) {
this(group, commision, false);
}
public Assignment() {
}
/**
* getId
*
* @return id
* Id getter
* @return id id of assignment
*/
public Long getId() {
@ -57,4 +65,20 @@ public class Assignment {
public Groups getGroup() {
return this.group;
}
/**
* isPastAssignment getter
* @return isPastAssignment
*/
public boolean isPastAssignment() {
return isPastAssignment;
}
/**
* setter isPastAssignment
* @param isPastAssignment
*/
public void setPastAssignment(boolean isPastAssignment) {
this.isPastAssignment = isPastAssignment;
}
}

View File

@ -4,6 +4,7 @@ import java.sql.Timestamp;
import java.util.List;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@ -25,13 +26,13 @@ public class Commision {
private User commisionOwner;
private Timestamp commisionDate;
@OneToMany(mappedBy = "commision")
@OneToMany(mappedBy = "commision", fetch = FetchType.EAGER)
private List<Assignment> assignments;
/**
* Commision
*
* @param user user assign to the group
*
* @param user owner of commission. Can not be null otherwise saving commision
* will fail.
*/
public Commision(User user) {
this.commisionDate = new Timestamp(System.currentTimeMillis());
@ -42,30 +43,35 @@ public class Commision {
}
/**
* getId
*
* @return id
* Id getter
* @return id id of commision
*/
public Long getId() {
return this.id;
}
/**
* getCommisionDate
*
* @return commisionDate
* CommisionDate getter
* @return commisionDate
*/
public Timestamp getCommisionDate() {
return commisionDate;
}
/**
* getCommisionOwner
*
* @return commisionOwner
* User of given commision getter
* @return User commisionOwner
*/
public User getCommisionOwner() {
return commisionOwner;
}
/**
* Assigments getter
* @return List of assignments
*/
public List<Assignment> getAssignments() {
return this.assignments;
}
}

View File

@ -31,4 +31,18 @@ public interface GroupRepository extends JpaRepository<Groups, Long> {
@Query("FROM Groups WHERE course_id = ?1")
List<Groups> getByCourse(@Param("id") Long id);
@Query("SELECT COUNT(*) AS assinged_times FROM Assignment WHERE isPastAssignment=false GROUP BY group HAVING group_id=?1")
Optional<Number> getAssignedAmount(Long groupId);
/**
* PLAIN SQL QUERY: SELECT group_id, COUNT(*) assinged_times FROM assignment
* WHERE is_past_assignment=0 GROUP BY group_id HAVING group_id IN (:ids)")
*
* @param groupIds list of groups ids
* @return list of objects arrays where first object is Groups instance and
* second is Long that is taken places value
*/
@Query("SELECT group, COUNT(*) AS assinged_times FROM Assignment a WHERE a.isPastAssignment=false GROUP BY a.group HAVING group_id IN (:ids)")
List<Object[]> getAssignedAmounts(@Param("ids") List<Long> groupIds);
}

View File

@ -1,6 +1,7 @@
package com.plannaplan.services;
import java.util.List;
import java.util.Optional;
import com.plannaplan.entities.Assignment;
import com.plannaplan.entities.Commision;
@ -21,12 +22,13 @@ public class AssignmentService {
public AssignmentService() {
}
/*
* save
* @param assignment which assignment should be save in service
/**
* Save given assignment
* @param assignment assignment to save
* @return assignment saved assignment with database id
*/
public void save(Assignment assignment) {
this.repo.save(assignment);
public Assignment save(Assignment assignment) {
return this.repo.save(assignment);
}
/*
@ -44,4 +46,13 @@ public class AssignmentService {
public long getAssignmentsAmmount() {
return this.repo.count();
}
/**
* Get assigmnent by id
* @param id id of assigmnent
* @return Optional of assignment
*/
public Optional<Assignment> getById(Long id) {
return this.repo.findById(id);
}
}

View File

@ -5,6 +5,7 @@ import java.util.Optional;
import com.plannaplan.entities.Commision;
import com.plannaplan.entities.User;
import com.plannaplan.repositories.AssignmentRepository;
import com.plannaplan.repositories.CommisionRepository;
import org.springframework.beans.factory.annotation.Autowired;
@ -18,6 +19,8 @@ import org.springframework.stereotype.Service;
public class CommisionService {
@Autowired
private CommisionRepository repo;
@Autowired
private AssignmentRepository aRepository;
public CommisionService() {
}
@ -29,6 +32,14 @@ public class CommisionService {
* @return commision
*/
public Commision save(Commision commision) {
Optional<Commision> lastCommision = this.getNewestCommision(commision.getCommisionOwner());
if (lastCommision.isPresent()) {
final Commision lastCom = lastCommision.get();
lastCom.getAssignments().forEach(assignment -> {
assignment.setPastAssignment(true);
this.aRepository.save(assignment);
});
}
this.repo.save(commision);
return commision;

View File

@ -1,7 +1,11 @@
package com.plannaplan.services;
import java.util.HashMap;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.stream.Collectors;
import java.util.function.Function;
import com.plannaplan.entities.Groups;
import com.plannaplan.repositories.GroupRepository;
@ -30,8 +34,7 @@ public class GroupService {
}
public Groups save(Groups group) {
this.repo.save(group);
return group;
return this.repo.save(group);
}
public void delete(Groups groups) {
@ -55,4 +58,30 @@ public class GroupService {
return Optional.empty();
}
/**
*
* @param groups list of groups you want to get taken places ammount
* @return HashMap<Long, Integer> where Long is group id and Integer is how many
* places in gorup is already taken
*/
public HashMap<Long, Integer> getTakenPlaces(List<Groups> groups) {
HashMap<Long, Integer> response = new HashMap<>();
List<Object[]> respoonses = this.repo
.getAssignedAmounts(groups.stream().filter(Objects::nonNull).map(new Function<Groups, Long>() {
@Override
public Long apply(Groups p) {
final Long id = p.getId();
response.put(id, 0);
return id;
}
}).collect(Collectors.toList()));
for (Object[] element : respoonses) {
response.put(((Groups) element[0]).getId(), ((Long) element[1]).intValue());
}
return response;
}
}

View File

@ -34,8 +34,8 @@ public class UserService {
return token;
}
public void save(User user) {
this.repo.save(user);
public User save(User user) {
return this.repo.save(user);
}
public User getUserByEmail(String email) throws UserNotFoundException {