Buisness logic docs updated

This commit is contained in:
Filip Izydorczyk 2021-01-15 15:54:17 +01:00
parent 8d007c259f
commit 21983fe4f7
15 changed files with 325 additions and 143 deletions

View File

@ -12,16 +12,29 @@ import org.apache.poi.ss.usermodel.Row;
import com.plannaplan.models.FileData; import com.plannaplan.models.FileData;
/** /**
* FileReader is used for reading xls file from input stream. * FileReader is used for reading xls file from input stream.
*/ */
public class FileReader { public class FileReader {
private InputStream fileInputStream; private InputStream fileInputStream;
/**
* @param fileInputStream stream of stadarized file contains courses and gropups
* to import. File needs to be .xlsx file that has
* fields: zaj_cyk_id, typ, sym, nazwa, gr_nr, Mc, dzien,
* godz_od, sala, tytul, nazwisko, imie. Order doesn't
* have impact on import. Any change name of given field
* can be performed in FileToDatabaseMigrator class
*/
public FileReader(InputStream fileInputStream) { public FileReader(InputStream fileInputStream) {
this.fileInputStream = fileInputStream; this.fileInputStream = fileInputStream;
} }
/**
* read data rom file
*
* @return instance of class FileData
*/
public FileData read() { public FileData read() {
FileData result = null; FileData result = null;

View File

@ -16,99 +16,119 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
/** /**
* FileToDatabaseMigrator is used for migrate data from file (it reads line by line) and push it into database * FileToDatabaseMigrator is used for migrate data from file (it reads line by
* line) and push it into database
*/ */
@Component @Component
public class FileToDatabaseMigrator { public class FileToDatabaseMigrator {
private static final String LECTURER_NAME_STRING = "imie"; private static final String LECTURER_NAME_STRING = "imie";
private static final String LECTURER_SURNAME_STRING = "nazwisko"; private static final String LECTURER_SURNAME_STRING = "nazwisko";
private static final String LECTURER_TITLE_STRING = "tytul"; private static final String LECTURER_TITLE_STRING = "tytul";
private static final String COURSE_SYMBOL_STRING = "sym"; private static final String COURSE_SYMBOL_STRING = "sym";
private static final String COURSE_NAME_STRING = "nazwa"; private static final String COURSE_NAME_STRING = "nazwa";
private static final String groupDay_STRING = "dzien"; private static final String groupDay_STRING = "dzien";
private static final String GROUP_TIME_STRING = "godz_od"; private static final String GROUP_TIME_STRING = "godz_od";
private static final String ROOM_STRING = "sala"; private static final String ROOM_STRING = "sala";
private static final String CAPACITY_STRING = "Mc"; private static final String CAPACITY_STRING = "Mc";
private static final String TYPE_GROUP= "typ"; private static final String TYPE_GROUP = "typ";
private static final String ZAJ_CYK_ID = "zaj_cyk_id"; private static final String ZAJ_CYK_ID = "zaj_cyk_id";
private static final String GR_NR = "gr_nr"; private static final String GR_NR = "gr_nr";
@Autowired @Autowired
private LecturerService lecturerService; private LecturerService lecturerService;
@Autowired @Autowired
private CourseService courseService; private CourseService courseService;
@Autowired @Autowired
private GroupService groupService; private GroupService groupService;
public FileToDatabaseMigrator() { public FileToDatabaseMigrator() {
} }
public void migrate(FileData data) { /**
Iterator<Row> rows = data.getRows(); * insert data to database
int courseNameIndex = data.getIndexOf(FileToDatabaseMigrator.COURSE_NAME_STRING); *
int symbolIndex = data.getIndexOf(FileToDatabaseMigrator.COURSE_SYMBOL_STRING); * @param data FileData imported from file
*/
public void migrate(FileData data) {
Iterator<Row> rows = data.getRows();
int courseNameIndex = data.getIndexOf(FileToDatabaseMigrator.COURSE_NAME_STRING);
int symbolIndex = data.getIndexOf(FileToDatabaseMigrator.COURSE_SYMBOL_STRING);
int titleIndex = data.getIndexOf(FileToDatabaseMigrator.LECTURER_TITLE_STRING); int titleIndex = data.getIndexOf(FileToDatabaseMigrator.LECTURER_TITLE_STRING);
int surnameIndex = data.getIndexOf(FileToDatabaseMigrator.LECTURER_SURNAME_STRING); int surnameIndex = data.getIndexOf(FileToDatabaseMigrator.LECTURER_SURNAME_STRING);
int nameIndex = data.getIndexOf(FileToDatabaseMigrator.LECTURER_NAME_STRING); int nameIndex = data.getIndexOf(FileToDatabaseMigrator.LECTURER_NAME_STRING);
int dayIndex = data.getIndexOf(FileToDatabaseMigrator.groupDay_STRING); int dayIndex = data.getIndexOf(FileToDatabaseMigrator.groupDay_STRING);
int timeIndex = data.getIndexOf(FileToDatabaseMigrator.GROUP_TIME_STRING); int timeIndex = data.getIndexOf(FileToDatabaseMigrator.GROUP_TIME_STRING);
int roomIndex = data.getIndexOf(FileToDatabaseMigrator.ROOM_STRING); int roomIndex = data.getIndexOf(FileToDatabaseMigrator.ROOM_STRING);
int capacityIndex = data.getIndexOf(FileToDatabaseMigrator.CAPACITY_STRING); int capacityIndex = data.getIndexOf(FileToDatabaseMigrator.CAPACITY_STRING);
int typeGroupIndex = data.getIndexOf(FileToDatabaseMigrator.TYPE_GROUP); int typeGroupIndex = data.getIndexOf(FileToDatabaseMigrator.TYPE_GROUP);
int zajCykIdIndex = data.getIndexOf(FileToDatabaseMigrator.ZAJ_CYK_ID); int zajCykIdIndex = data.getIndexOf(FileToDatabaseMigrator.ZAJ_CYK_ID);
int grNrIndex = data.getIndexOf(FileToDatabaseMigrator.GR_NR); int grNrIndex = data.getIndexOf(FileToDatabaseMigrator.GR_NR);
while (rows.hasNext()) { while (rows.hasNext()) {
Row row = rows.next(); Row row = rows.next();
String courseName = row.getCell(courseNameIndex).toString().trim(); String courseName = row.getCell(courseNameIndex).toString().trim();
String symbol = row.getCell(symbolIndex).toString().trim(); String symbol = row.getCell(symbolIndex).toString().trim();
String lecturerTitle = row.getCell(titleIndex) != null ? row.getCell(titleIndex).toString().trim() : ""; String lecturerTitle = row.getCell(titleIndex) != null
String lecturerName = row.getCell(nameIndex) != null ? row.getCell(nameIndex).toString().trim() : ""; ? row.getCell(titleIndex).toString().trim()
String lecturerSurname = row.getCell(surnameIndex) != null ? row.getCell(surnameIndex).toString().trim() : "";
: ""; String lecturerName = row.getCell(nameIndex) != null ? row.getCell(nameIndex).toString().trim()
: "";
String lecturerSurname = row.getCell(surnameIndex) != null
? row.getCell(surnameIndex).toString().trim()
: "";
Integer zajCykId = row.getCell(zajCykIdIndex) != null ? (int) Double.parseDouble(row.getCell(zajCykIdIndex).toString().trim()) Integer zajCykId = row.getCell(zajCykIdIndex) != null
: null; ? (int) Double.parseDouble(row.getCell(zajCykIdIndex).toString().trim())
: null;
Integer grNr = row.getCell(grNrIndex) != null ? (int) Double.parseDouble(row.getCell(grNrIndex).toString().trim())
: null;
int day = row.getCell(dayIndex) != null ? (int) Double.parseDouble(row.getCell(dayIndex).toString()) : 0; Integer grNr = row.getCell(grNrIndex) != null
WeekDay groupDay = WeekDay.getDay(day - 1); ? (int) Double.parseDouble(row.getCell(grNrIndex).toString().trim())
int time = parseTimeToInt(row.getCell(timeIndex).toString()); : null;
String room = row.getCell(roomIndex).toString().trim();
int capacity = (int) Double.parseDouble(row.getCell(capacityIndex).toString());
GroupType typeGroup = GroupType.getType(row.getCell(typeGroupIndex).toString());
Course course = this.courseService.getCourseByName(courseName) int day = row.getCell(dayIndex) != null
.orElseGet(() -> this.courseService.save(new Course(courseName, symbol))); ? (int) Double.parseDouble(row.getCell(dayIndex).toString())
: 0;
WeekDay groupDay = WeekDay.getDay(day - 1);
int time = parseTimeToInt(row.getCell(timeIndex).toString());
String room = row.getCell(roomIndex).toString().trim();
int capacity = (int) Double.parseDouble(row.getCell(capacityIndex).toString());
GroupType typeGroup = GroupType.getType(row.getCell(typeGroupIndex).toString());
Lecturer lecturer = this.lecturerService.getLecturer(lecturerTitle, lecturerName, lecturerSurname) Course course = this.courseService.getCourseByName(courseName)
.orElseGet(() -> this.lecturerService .orElseGet(() -> this.courseService.save(new Course(courseName, symbol)));
.save(new Lecturer(lecturerTitle, lecturerName, lecturerSurname)));
Groups group = this.groupService.find(zajCykId, grNr).orElseGet( Lecturer lecturer = this.lecturerService
() -> new Groups(capacity, room, course, time, groupDay, lecturer, zajCykId, grNr, typeGroup)); .getLecturer(lecturerTitle, lecturerName, lecturerSurname)
group.update(capacity, room, course, time, null, groupDay, lecturer, typeGroup); .orElseGet(() -> this.lecturerService.save(
new Lecturer(lecturerTitle, lecturerName, lecturerSurname)));
this.groupService.save(group);
Groups group = this.groupService.find(zajCykId, grNr).orElseGet(() -> new Groups(capacity, room,
course, time, groupDay, lecturer, zajCykId, grNr, typeGroup));
group.update(capacity, room, course, time, null, groupDay, lecturer, typeGroup);
this.groupService.save(group);
}
} }
} /**
*
* @param time time string in formaT hh:mm or hh.mm
* @return int time witch is minutes from 00:00
*/
private static int parseTimeToInt(String time) {
String times[] = time.split("\\.|\\:");
return times.length == 2 ? Integer.parseInt(times[0]) * 60 + Integer.parseInt(times[1]) : 0;
private static int parseTimeToInt(String time) { }
String times[] = time.split("\\.|\\:");
return times.length == 2 ? Integer.parseInt(times[0]) * 60 + Integer.parseInt(times[1]) : 0;
}
} }

View File

@ -78,6 +78,9 @@ public class Assignment {
public Assignment() { public Assignment() {
} }
/**
* @param commision commision to set
*/
public void setCommision(Commision commision) { public void setCommision(Commision commision) {
this.commision = commision; this.commision = commision;
} }

View File

@ -1,9 +1,9 @@
package com.plannaplan.exceptions; package com.plannaplan.exceptions;
/**
* Excepction to be thrown when provided token is expired
*/
public class TokenExpiredException extends RuntimeException { public class TokenExpiredException extends RuntimeException {
/**
*
*/
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
public TokenExpiredException(String message) { public TokenExpiredException(String message) {

View File

@ -1,9 +1,9 @@
package com.plannaplan.exceptions; package com.plannaplan.exceptions;
/**
* Exception to be thrown when provided user does not exist in database
*/
public class UserNotFoundException extends Exception { public class UserNotFoundException extends Exception {
/**
*
*/
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
public UserNotFoundException(String message) { public UserNotFoundException(String message) {

View File

@ -2,6 +2,9 @@ package com.plannaplan.models;
import java.io.InputStream; import java.io.InputStream;
/**
* Config data copntainer to keep tours dates and stream of dasta to import
*/
public class ConfigData { public class ConfigData {
private TourData firstTour; private TourData firstTour;
private TourData secondTour; private TourData secondTour;

View File

@ -4,6 +4,9 @@ import java.util.HashMap;
import java.util.Iterator; import java.util.Iterator;
import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Row;
/**
* Wrapper for data readed from file
*/
public class FileData { public class FileData {
private HashMap<String, Integer> keys; private HashMap<String, Integer> keys;
@ -13,6 +16,7 @@ public class FileData {
* FileData * FileData
* *
* @param keys this is a hashmap of String and Integer * @param keys this is a hashmap of String and Integer
*
* @param rows this is a iterator of rows. * @param rows this is a iterator of rows.
*/ */
public FileData(HashMap<String, Integer> keys, Iterator<Row> rows) { public FileData(HashMap<String, Integer> keys, Iterator<Row> rows) {
@ -31,6 +35,7 @@ public class FileData {
/* /*
* setRows * setRows
*
* @param rows set the rows to given function * @param rows set the rows to given function
*/ */
public void setRows(Iterator<Row> rows) { public void setRows(Iterator<Row> rows) {
@ -39,6 +44,7 @@ public class FileData {
/* /*
* getKeys * getKeys
*
* @return keys * @return keys
*/ */
public HashMap<String, Integer> getKeys() { public HashMap<String, Integer> getKeys() {
@ -47,6 +53,7 @@ public class FileData {
/* /*
* setKeys * setKeys
*
* @param keys set the key is being a struck of hashmap (String, Integer) * @param keys set the key is being a struck of hashmap (String, Integer)
*/ */
public void setKeys(HashMap<String, Integer> keys) { public void setKeys(HashMap<String, Integer> keys) {
@ -55,6 +62,7 @@ public class FileData {
/* /*
* getIndexOf * getIndexOf
*
* @return index * @return index
*/ */
public int getIndexOf(String key) { public int getIndexOf(String key) {

View File

@ -3,64 +3,92 @@ package com.plannaplan.models;
import com.plannaplan.entities.Assignment; import com.plannaplan.entities.Assignment;
import com.plannaplan.entities.Exchange; import com.plannaplan.entities.Exchange;
/**
* Match of users Exchange's to be performed
*/
public class MatchData { public class MatchData {
private Exchange exchangeOne; private Exchange exchangeOne;
private Exchange exchangeTwo; private Exchange exchangeTwo;
public MatchData(Exchange exchangeOne, Exchange exchangeTwo) { /**
this.exchangeOne = exchangeOne; * create MatchData
this.exchangeTwo = exchangeTwo; *
} * @param exchangeOne first Exchange of found match
* @param exchangeTwo second Exchange of found match
public Exchange getExchangeOne() {
return this.exchangeOne;
}
public Exchange getExchangeTwo() {
return this.exchangeTwo;
}
public Assignment getAssignmentTwo() {
return this.exchangeTwo.getOwnedAssignment();
}
public Assignment getAssignmentOne() {
return this.exchangeOne.getOwnedAssignment();
}
@Override
public int hashCode() {
return this.getAssignmentOne().hashCode() + this.getAssignmentTwo().hashCode();
}
@Override
public boolean equals(Object o) {
// If the object is compared with itself then return true
if (o == this) {
return true;
}
/*
* Check if o is an instance of Complex or not "null instanceof [type]" also
* returns false
*/ */
if (!(o instanceof MatchData)) { public MatchData(Exchange exchangeOne, Exchange exchangeTwo) {
return false; this.exchangeOne = exchangeOne;
this.exchangeTwo = exchangeTwo;
} }
// typecast o to Complex so that we can compare data members /**
MatchData c = (MatchData) o; * @return first Exchange
*/
public Exchange getExchangeOne() {
return this.exchangeOne;
}
// Compare the data members and return accordingly /**
return (this.getAssignmentOne().equals(c.getAssignmentOne()) && this.getAssignmentTwo().equals(c.getAssignmentTwo())) || (this.getAssignmentOne().equals(c.getAssignmentTwo()) && this.getAssignmentTwo().equals(c.getAssignmentOne())); * @return second Exchange
} */
public Exchange getExchangeTwo() {
return this.exchangeTwo;
}
public int compare(MatchData m1) { /**
return Long.compare(m1.getExchangesMsValue(), this.getExchangesMsValue()); * @return second Exchange's owned assignmetn
} */
public Assignment getAssignmentTwo() {
return this.exchangeTwo.getOwnedAssignment();
}
public long getExchangesMsValue(){ /**
return this.exchangeOne.getDataExchange().getTime() + this.exchangeTwo.getDataExchange().getTime(); * @return first Exchange's owned assignmetn
} */
public Assignment getAssignmentOne() {
return this.exchangeOne.getOwnedAssignment();
}
@Override
public int hashCode() {
return this.getAssignmentOne().hashCode() + this.getAssignmentTwo().hashCode();
}
@Override
public boolean equals(Object o) {
if (o == this) {
return true;
}
if (!(o instanceof MatchData)) {
return false;
}
MatchData c = (MatchData) o;
return (this.getAssignmentOne().equals(c.getAssignmentOne())
&& this.getAssignmentTwo().equals(c.getAssignmentTwo()))
|| (this.getAssignmentOne().equals(c.getAssignmentTwo())
&& this.getAssignmentTwo().equals(c.getAssignmentOne()));
}
/**
* comparator for MatchData. It compare it by sum of both exchange's times. For
* example MatchData with Exchanges 11:00 and 12:00 will be less than with
* Exchanges 12:00 and 12:00
*
* @param m1 MatchData instance to compare to
* @return int <0 if m1 is "less than", 0 if it's equal and >0 otherwise
*/
public int compare(MatchData m1) {
return Long.compare(m1.getExchangesMsValue(), this.getExchangesMsValue());
}
/**
* @return sum of both exchanges java.sql.Timestanp::getTime"
*/
public long getExchangesMsValue() {
return this.exchangeOne.getDataExchange().getTime() + this.exchangeTwo.getDataExchange().getTime();
}
} }

View File

@ -2,6 +2,9 @@ package com.plannaplan.models;
import java.sql.Date; import java.sql.Date;
/**
* Container for Tours dates
*/
public class TourData { public class TourData {
private Date start; private Date start;

View File

@ -11,18 +11,36 @@ public class UserApiResponse {
public UserApiResponse() { public UserApiResponse() {
} }
/**
* @return user's Surname
*/
public String getSurname() { public String getSurname() {
return surname; return surname;
} }
/**
* setter for name. Reson to have setters for this class is for case if there
* would be name and no surname or otherwise
*
* @param surname name to set that was obtained by api request
*/
public void setSurname(String surname) { public void setSurname(String surname) {
this.surname = surname; this.surname = surname;
} }
/**
* @return user's Name
*/
public String getName() { public String getName() {
return name; return name;
} }
/**
* setter for surname. Reson to have setters for this class is for case if there
* would be name and no surname or otherwise
*
* @param surname name to set that was obtained by api request
*/
public void setName(String name) { public void setName(String name) {
this.name = name; this.name = name;
} }

View File

@ -29,6 +29,13 @@ public class CommisionService {
public CommisionService() { public CommisionService() {
} }
/**
* save to database commision. It also checks for missing assignments from
* previous commision (you can not get rid of accepted assignment)
*
* @param commision to save to db
* @return Commision instance with id from database
*/
public Commision save(Commision commision) { public Commision save(Commision commision) {
Optional<Commision> lastCommision = this.getNewestCommision(commision.getCommisionOwner()); Optional<Commision> lastCommision = this.getNewestCommision(commision.getCommisionOwner());
if (lastCommision.isPresent()) { if (lastCommision.isPresent()) {

View File

@ -10,7 +10,8 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
/** /**
* Service of CourseService which can get(Course By Name, All Courses, Courses Ammount ), save, delete course. * Service of CourseService which can get(Course By Name, All Courses, Courses
* Ammount ), save, delete course.
*/ */
@Service @Service
@ -18,42 +19,46 @@ public class CourseService {
@Autowired @Autowired
private CourseRepository repo; private CourseRepository repo;
/* /**
* getCourseByName * getCourseByName
* Return Course By Name *
* @param name
* @return Course By Name
*/ */
public Optional<Course> getCourseByName(String name) { public Optional<Course> getCourseByName(String name) {
return this.repo.findByName(name); return this.repo.findByName(name);
} }
/* /**
* getAllCourses *
* Return List of get courses * @return all courses from db
*/ */
public List<Course> getAllCourses() { public List<Course> getAllCourses() {
return this.repo.findAll(); return this.repo.findAll();
} }
/* /**
* save * save to db
*
* @param course which course you would like to save * @param course which course you would like to save
* @return Course instance with id from db
*/ */
public Course save(Course course) { public Course save(Course course) {
this.repo.save(course); this.repo.save(course);
return course; return course;
} }
/* /**
* delete * delete course from db
*
* @param course which course you would like to delete * @param course which course you would like to delete
*/ */
public void delete(Course course) { public void delete(Course course) {
this.repo.delete(course); this.repo.delete(course);
} }
/* /**
* getCoursesAmmount * @return ammount of courses in db
* Return a ammount of courses
*/ */
public int getCoursesAmmount() { public int getCoursesAmmount() {
return (int) this.repo.count(); return (int) this.repo.count();

View File

@ -12,6 +12,9 @@ import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.scheduling.support.CronTrigger; import org.springframework.scheduling.support.CronTrigger;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
/**
* Service to manage app events
*/
@Service @Service
public class EventService { public class EventService {
@ -29,6 +32,9 @@ public class EventService {
System.out.println("Checking for groups"); System.out.println("Checking for groups");
} }
/**
* perfroms checks for matching exchanges daily
*/
@Scheduled(cron = "0 0 0 * * *") @Scheduled(cron = "0 0 0 * * *")
public void performExchangeService() { public void performExchangeService() {
System.out.println("Performing Exchange"); System.out.println("Performing Exchange");
@ -53,6 +59,10 @@ public class EventService {
jobsMap.put(taskId, scheduledTask); jobsMap.put(taskId, scheduledTask);
} }
/**
* init resources needed for dynamicly creating new tasks (needed to set tours
* end events)
*/
@PostConstruct @PostConstruct
public void initialize() { public void initialize() {
this.scheduler = new ThreadPoolTaskScheduler(); this.scheduler = new ThreadPoolTaskScheduler();

View File

@ -19,6 +19,9 @@ import com.plannaplan.repositories.ExchangeRepository;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
/**
* Service to manage Exchanges
*/
@Service @Service
public class ExchangeService { public class ExchangeService {
@ -50,6 +53,9 @@ public class ExchangeService {
return this.repo.findById(id); return this.repo.findById(id);
} }
/**
* @return list of all exchanges in database
*/
public List<Exchange> getAllExchanges() { public List<Exchange> getAllExchanges() {
return this.repo.findAll(); return this.repo.findAll();
} }
@ -78,6 +84,12 @@ public class ExchangeService {
return this.repo.checkForExchange(assignment, group); return this.repo.checkForExchange(assignment, group);
} }
/**
* method to perform Exchange algorythm. It search for matches and swap
* assignments between latests user commisions if it can be performed. After
* swap we block users matches that contains switched groups. After algorythm
* email is being sent to all users with information about performed exchanges
*/
public void performExchange() { public void performExchange() {
final List<MatchData> matchData = this.getMatches(); final List<MatchData> matchData = this.getMatches();
final List<Long> performedAssignmentExchanges = new ArrayList<>(); final List<Long> performedAssignmentExchanges = new ArrayList<>();
@ -127,6 +139,9 @@ public class ExchangeService {
this.repo.deleteAll(exchangesToDelete); this.repo.deleteAll(exchangesToDelete);
} }
/**
* @return list of matches found in database
*/
public List<MatchData> getMatches() { public List<MatchData> getMatches() {
final List<MatchData> matches = this.repo.getMatches().stream().map(m -> { final List<MatchData> matches = this.repo.getMatches().stream().map(m -> {
final Exchange exchangeOne = (Exchange) m[0]; final Exchange exchangeOne = (Exchange) m[0];

View File

@ -18,7 +18,6 @@ import org.springframework.stereotype.Service;
* Service of GroupService which can find(optional), get(By Course, Groups * Service of GroupService which can find(optional), get(By Course, Groups
* Ammount, Group By Id, find Not Existing Group), save, delete group. * Ammount, Group By Id, find Not Existing Group), save, delete group.
*/ */
@Service @Service
public class GroupService { public class GroupService {
@Autowired @Autowired
@ -27,34 +26,84 @@ public class GroupService {
public GroupService() { public GroupService() {
} }
/**
* find group with given properties
*
* @param time scheduled time for group as int of minutes passed from 00:00
* @param capacity capacity of group
* @param room class room
* @return optional with Groups instance if found
*/
public Optional<Groups> find(int time, int capacity, String room) { public Optional<Groups> find(int time, int capacity, String room) {
return this.repo.find(time, room, capacity); return this.repo.find(time, room, capacity);
} }
/**
* find group with given properties
*
* @param zajCykId proteprty from usos
* @param nrGr group number
* @return optional with Groups instance if found
*/
public Optional<Groups> find(Integer zajCykId, Integer nrGr) { public Optional<Groups> find(Integer zajCykId, Integer nrGr) {
return this.repo.find(zajCykId, nrGr); return this.repo.find(zajCykId, nrGr);
} }
/**
* find group with given properties
*
* @param id course id of groups belogns to
* @return list of found groups
*/
public List<Groups> getGroupsByCourse(Long id) { public List<Groups> getGroupsByCourse(Long id) {
return this.repo.getByCourse(id); return this.repo.getByCourse(id);
} }
/**
* save group to database
*
* @param group insatnce to be saved
* @return new instance that has id form database
*/
public Groups save(Groups group) { public Groups save(Groups group) {
return this.repo.save(group); return this.repo.save(group);
} }
/**
* delete from database
*
* @param groups isntance to delete
*/
public void delete(Groups groups) { public void delete(Groups groups) {
this.repo.delete(groups); this.repo.delete(groups);
} }
/**
* get hom manyh groups are in database in general
*
* @return int - groups ammount
*/
public int getGroupsAmmount() { public int getGroupsAmmount() {
return (int) this.repo.count(); return (int) this.repo.count();
} }
/**
* find group with given properties
*
* @param id group id
* @return optional with group if found
*/
public Optional<Groups> getGroupById(Long id) { public Optional<Groups> getGroupById(Long id) {
return this.repo.findById(id); return this.repo.findById(id);
} }
/**
* get wich of provided id is not existind groups
*
* @param ids list of ids to check
* @return optional with id that is not group if found. If there is multiple
* will be returned first found
*/
public Optional<Long> findNotExistingGroup(List<Long> ids) { public Optional<Long> findNotExistingGroup(List<Long> ids) {
for (Long oneId : ids) { for (Long oneId : ids) {
if (this.repo.existsById(oneId) == false) { if (this.repo.existsById(oneId) == false) {