mirror of
https://github.com/PaulReichmuth/timekeep-backend.git
synced 2025-12-22 22:41:59 +00:00
71 lines
1.9 KiB
Java
71 lines
1.9 KiB
Java
package de.pnreichmuth.timekeep_backend.entities;
|
|
|
|
import jakarta.persistence.*;
|
|
import lombok.Getter;
|
|
import lombok.NonNull;
|
|
import lombok.Setter;
|
|
|
|
|
|
import java.util.HashMap;
|
|
import java.util.Map;
|
|
import java.util.UUID;
|
|
|
|
@Entity
|
|
@Getter
|
|
public class Team {
|
|
|
|
@Id
|
|
@GeneratedValue(strategy = GenerationType.AUTO)
|
|
private UUID id;
|
|
|
|
@Setter
|
|
private String teamName;
|
|
|
|
private boolean firstSemesterTeam;
|
|
|
|
@OneToMany(cascade = CascadeType.ALL, mappedBy = "racerID")
|
|
private Map<String, Racer> members;
|
|
|
|
@OneToMany(cascade = CascadeType.ALL)
|
|
private Map<String, Station> passedStations;
|
|
|
|
public Team(){
|
|
this.teamName = "Team-" + UUID.randomUUID();
|
|
this.firstSemesterTeam = true;
|
|
this.members = new HashMap<>(4);
|
|
this.passedStations = new HashMap<>();
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
* Treat this team as a team of first semester students, if at least 50% of its members are in the first semester
|
|
*/
|
|
private void checkFirstSemesterTeam(){
|
|
long erstiCount = members.entrySet().stream()
|
|
.filter(
|
|
e -> e.getValue().getIsFirstSemester()
|
|
).count();
|
|
double percentFirstSemester = erstiCount /(double)members.size();
|
|
this.firstSemesterTeam = percentFirstSemester >= 0.5;
|
|
}
|
|
|
|
/**
|
|
* Adds a new member to the team and checks whether the team still qualifies as a first semester team
|
|
* @param newMember the Racer object to be added to the team
|
|
*/
|
|
public void addMember(Racer newMember){
|
|
this.members.put(String.format("%s, %s", newMember.getLastName(), newMember.getFirstName()), newMember );
|
|
this.checkFirstSemesterTeam();
|
|
}
|
|
|
|
/**
|
|
* Removes a member from the team by name
|
|
* @param id the UUID of the member to be removed
|
|
*/
|
|
public void removeMember(UUID id){
|
|
this.members.remove(id);
|
|
this.checkFirstSemesterTeam();
|
|
}
|
|
}
|