Compare commits
93 Commits
refresh-to
...
exchanges
Author | SHA1 | Date | |
---|---|---|---|
9c1a148e20 | |||
ab32ad8561 | |||
1506270dec | |||
75a3bc46f2
|
|||
986407b8f8
|
|||
11469e9314
|
|||
d1641277ac
|
|||
ed528ad9a0
|
|||
f9a27abb32
|
|||
1e1160736d
|
|||
bc8f7407fc
|
|||
1c12a778af
|
|||
3583d30b26
|
|||
76faedc40d
|
|||
5e459ac429
|
|||
b18f9cd50e
|
|||
6311ecee92
|
|||
6fe72465b9
|
|||
00f639ad55
|
|||
81f870eaa1
|
|||
2e6f373997
|
|||
c7feb10997
|
|||
b0a1d929e4
|
|||
3335155cd8
|
|||
df90a57715
|
|||
2320d66a35
|
|||
11d21be627
|
|||
756e854f31
|
|||
bbf14b0ff9
|
|||
a25843ebfd
|
|||
149796c42a
|
|||
c6c67e7e29
|
|||
ad0d9e40c1
|
|||
1682448627
|
|||
e24938dfce
|
|||
842e38898a
|
|||
56120c4724
|
|||
c8c8b62263
|
|||
ebacbe892d
|
|||
90f154f23b
|
|||
b633d2c2df
|
|||
df7701ebc8
|
|||
f24e62a335
|
|||
3bcc35e75b
|
|||
6e65c26e3c
|
|||
cfc1e3eba7
|
|||
3b80a70921 | |||
5edec5aa71
|
|||
5b0097e6c7
|
|||
fddd5b757d
|
|||
7813f148eb
|
|||
8c0b880412
|
|||
fe06243bda
|
|||
f9fc7fa7bd
|
|||
68dfd2473a | |||
ddabc1a0b9 | |||
463af01dc6 | |||
0b40d3729c | |||
3485dff86f | |||
2141f35e3f | |||
a6e6618202 | |||
44f8c610d9 | |||
95cc34c676 | |||
61d035e342 | |||
0f8b4eafb5 | |||
2c0008afe1 | |||
4b096a50bf | |||
ff9aa64470 | |||
a41c6f2583 | |||
ef896e9c12
|
|||
3bce1f91ec | |||
665807240f | |||
cd0f4bccd9 | |||
ccb0161609 | |||
9f1e21a29f | |||
a0570a055f | |||
eecb1a6d36 | |||
389e934035 | |||
4cec07e369 | |||
817350e85e
|
|||
da4e683248
|
|||
09cc994d92
|
|||
c3d78505c8
|
|||
f51979484f
|
|||
038d0b95d2
|
|||
4758c505c4
|
|||
7a62c8d7d8
|
|||
9e6ee6dbb3
|
|||
2ba4082373
|
|||
2ec3699978
|
|||
507d9fddc0
|
|||
e647698591
|
|||
da46582fc0
|
6
.gitignore
vendored
6
.gitignore
vendored
@ -34,3 +34,9 @@ build/
|
||||
### Python ###
|
||||
__pycache__
|
||||
.pytest_cache
|
||||
|
||||
### Parser ###
|
||||
parser/
|
||||
|
||||
|
||||
envs.sh
|
61
README.md
61
README.md
@ -1,4 +1,4 @@
|
||||
## Start aplikacji
|
||||
# Start aplikacji
|
||||
|
||||
Zeby wystartowac aplikacje backendu najpierw nalezy postawic testowa baze danych na naszym komputerze za pomoca dockera. Jesli raz juz go odpalimy przy nastepnym razem bardzo mozliwe, ze wlaczy sie sam. AAby sprawdzic czy docker jesty wystartowany mozna uzyc `docker ps`
|
||||
|
||||
@ -13,17 +13,29 @@ cd restservice
|
||||
mvn spring-boot:run
|
||||
```
|
||||
|
||||
## Token obtaining
|
||||
# Token obtaining
|
||||
|
||||
Żeby tesotwać API wpełni potrzebny nam jest token który otrzymujemy na podstawie ticketa z systemu autoryzacyjnego **CAS**. Z tego powodu system autoryzacji działa inaczej niż w "książkowych" restowych aplikacjach i np Postman za nas jej nie dokona. Musimy mu podać już uzyskany token. Aby łatwo go uzyskać odpal skrypt
|
||||
|
||||
```
|
||||
```bash
|
||||
python gettoken.py
|
||||
```
|
||||
|
||||
Jeżeli chcesz używać skryptu zmiejaniąc gdzie znajduje się backend wpisz:
|
||||
|
||||
```bash
|
||||
python gettoken.py 192.168.0.212
|
||||
```
|
||||
|
||||
Jeżeli chcesz używać skryptu bez uruchamiania przeglądarki wpisz:
|
||||
|
||||
```bash
|
||||
python gettoken.py no-browser
|
||||
```
|
||||
|
||||
Na koniec w przęglądarce dostaniesz w odpowiedzi token. W samym pliku można zmienić porty aplikacji jeśli to potrzebne.
|
||||
|
||||
## Profiles
|
||||
# Profiles
|
||||
|
||||
W aplikacji posiadamy dwa profile. `dev` i `prod`. **Dev** używamy do testowania aplikacji lokalnie. **Pord** służy do stworzenia builda na produkcję.
|
||||
Profil wybieramy w pliku `restservice/src/main/resources/application.properties` wpisując odpowiednią nazwę
|
||||
@ -45,8 +57,12 @@ W paczce dla proda w protpertiesach poufne dane odczytywane są ze zmiennych śr
|
||||
- `PLANNAPLAN_EMAIL_USERNAME` - login naszego maila
|
||||
- `PLANNAPLAN_EMAIL_PASSWORD` - hasło naszego maila
|
||||
- `PLANNAPLAN_EMAIL` - nasz adres maila
|
||||
- `PLANNAPLAN_CONSUMER_KEY` - nasz klucz do usos api
|
||||
- `PLANNAPLAN_CONSUMER_SECRET` - secret naszego klucza
|
||||
|
||||
## Packaging
|
||||
Należy też pamiętać, że zmienne `PLANNAPLAN_CONSUMER_KEY` oraz `PLANNAPLAN_CONSUMER_SECRET` są potrzebne również w profilu `dev` więc trzeba je dodać w celu tesotowania do zmiennych we własnym systemie
|
||||
|
||||
# Packaging
|
||||
|
||||
Zeby spakowac apke do `jara` wystarcza dwie komendy zaczynajac z glownego katalogu projektu
|
||||
|
||||
@ -56,23 +72,23 @@ mvn clean; mvn install; cd restservice; mvn clean package spring-boot:repackage
|
||||
|
||||
Utworzony zostanie jar w `restservice/target/restservice-1.0-SNAPSHOT.jar`. Oczywiscie zeby jar zadzialal kontenery dockerowe musza byc odpalone (lub baza danych na serwerze jesli zmienialismy propertisy z localhost)
|
||||
|
||||
## Generowanie dokumentacji
|
||||
# Generowanie dokumentacji
|
||||
|
||||
### Javadocs
|
||||
## Javadocs
|
||||
|
||||
```bash
|
||||
mvn javadoc:javadoc
|
||||
```
|
||||
|
||||
### Api docs
|
||||
## Api docs
|
||||
|
||||
Żeby zobaczyć dokumentację api trzeba wejść w przeglądarce na `http://localhost:1285/swagger-ui.html` po odpaleniu aplikacji.
|
||||
|
||||
#### Nazewnictwo odpowiedzi
|
||||
### Nazewnictwo odpowiedzi
|
||||
|
||||
Każdą odpowiedź zaczynamy od modelu, który opisuje np. `Courses` a kończymy na `Response`. Między tymi dwoma członami możemy dodawać modyfikatory opisujące dokładniej odpowiedź np. `Default`. W ten sposób możemy otrzymać nazwę `CoursesDefaultResponse.java`
|
||||
|
||||
## Troubleshooting
|
||||
# Troubleshooting
|
||||
|
||||
Spring chyba cacheuje jakies dane dotyczace polaczenia wiec jesli spring wywali Ci blad `Connection Refused`, a wiesz, ze ta baza stoi na podanym ip i porcie to sprobuj
|
||||
|
||||
@ -80,3 +96,28 @@ Spring chyba cacheuje jakies dane dotyczace polaczenia wiec jesli spring wywali
|
||||
mvn clean
|
||||
mvn install
|
||||
```
|
||||
|
||||
Jeżeli używasz VSCode i testy, które wymagają podanych zmiennych środowiskowych (testy odpytywania usos api) trzeba podać te zmienne w pliku `.vscode/settings.json`
|
||||
|
||||
```json
|
||||
{
|
||||
"files.exclude": {
|
||||
"**/.classpath": true,
|
||||
"**/.project": true,
|
||||
"**/.settings": true,
|
||||
"**/.factorypath": true
|
||||
},
|
||||
"java.configuration.updateBuildConfiguration": "disabled",
|
||||
"java.format.settings.url": "eclipse-formatter.xml",
|
||||
"java.test.config": [
|
||||
{
|
||||
"name": "myConfiguration",
|
||||
"workingDirectory": "${workspaceFolder}",
|
||||
"env": {
|
||||
"PLANNAPLAN_CONSUMER_KEY": "value",
|
||||
"PLANNAPLAN_CONSUMER_SECRET": "value"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
@ -74,6 +74,31 @@
|
||||
<version>2.2.5.RELEASE</version>
|
||||
</dependency>
|
||||
|
||||
<!-- https://mvnrepository.com/artifact/org.springframework.social/spring-social-core -->
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.httpcomponents</groupId>
|
||||
<artifactId>httpclient</artifactId>
|
||||
<version>4.5.12</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-web</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.github.scribejava</groupId>
|
||||
<artifactId>scribejava-core</artifactId>
|
||||
<version>8.1.0</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.fasterxml.jackson.core</groupId>
|
||||
<artifactId>jackson-databind</artifactId>
|
||||
<version>2.9.8</version>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
|
@ -4,6 +4,21 @@
|
||||
"name": "plannaplan.email",
|
||||
"type": "java.lang.String",
|
||||
"description": "Email from which app sends message"
|
||||
},
|
||||
{
|
||||
"name": "plannaplan.apiurl",
|
||||
"type": "java.lang.String",
|
||||
"description": "Url to usos api endpoints"
|
||||
},
|
||||
{
|
||||
"name": "plannaplan.apikey",
|
||||
"type": "java.lang.String",
|
||||
"description": "Api consumer key"
|
||||
},
|
||||
{
|
||||
"name": "plannaplan.apisecret",
|
||||
"type": "java.lang.String",
|
||||
"description": "Api consumer secret"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
61
buisnesslogic/src/main/java/com/plannaplan/api/UsosOauth1Service.java
Executable file
61
buisnesslogic/src/main/java/com/plannaplan/api/UsosOauth1Service.java
Executable file
@ -0,0 +1,61 @@
|
||||
package com.plannaplan.api;
|
||||
|
||||
import com.github.scribejava.core.builder.api.DefaultApi10a;
|
||||
|
||||
/**
|
||||
* singleton class to sign usos api requests with oauth
|
||||
*/
|
||||
public class UsosOauth1Service extends DefaultApi10a {
|
||||
|
||||
private static final String AUTHORIZE_URL = "https://usosapidemo.amu.edu.pl/services/oauth/authorize";
|
||||
private static final String REQUEST_TOKEN_URL = "https://usosapidemo.amu.edu.pl/services/oauth/request_token";
|
||||
|
||||
private final String scopesAsString;
|
||||
|
||||
protected UsosOauth1Service() {
|
||||
scopesAsString = null;
|
||||
}
|
||||
|
||||
protected UsosOauth1Service(String... scopes) {
|
||||
final StringBuilder builder = new StringBuilder();
|
||||
for (String scope : scopes) {
|
||||
builder.append('+').append(scope);
|
||||
}
|
||||
scopesAsString = "?scope=" + builder.substring(1);
|
||||
}
|
||||
|
||||
private static class InstanceHolder {
|
||||
|
||||
private static final UsosOauth1Service INSTANCE = new UsosOauth1Service();
|
||||
}
|
||||
|
||||
public static UsosOauth1Service instance() {
|
||||
return InstanceHolder.INSTANCE;
|
||||
}
|
||||
|
||||
/**
|
||||
* get instance withj scopes
|
||||
*
|
||||
* @param scopes to get instance with
|
||||
* @return UsosOauth1Service instance
|
||||
*/
|
||||
public static UsosOauth1Service instance(String... scopes) {
|
||||
return scopes == null || scopes.length == 0 ? instance() : new UsosOauth1Service(scopes);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getRequestTokenEndpoint() {
|
||||
return scopesAsString == null ? REQUEST_TOKEN_URL : REQUEST_TOKEN_URL + scopesAsString;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAccessTokenEndpoint() {
|
||||
return "https://usosapidemo.amu.edu.pl/services/oauth/access_token";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getAuthorizationBaseUrl() {
|
||||
return AUTHORIZE_URL;
|
||||
}
|
||||
|
||||
}
|
@ -8,6 +8,7 @@ import com.plannaplan.models.FileData;
|
||||
import com.plannaplan.services.CourseService;
|
||||
import com.plannaplan.services.GroupService;
|
||||
import com.plannaplan.services.LecturerService;
|
||||
import com.plannaplan.types.GroupType;
|
||||
import com.plannaplan.types.WeekDay;
|
||||
|
||||
import org.apache.poi.ss.usermodel.Row;
|
||||
@ -31,6 +32,10 @@ public class FileToDatabaseMigrator {
|
||||
private static final String GROUP_TIME_STRING = "godz_od";
|
||||
private static final String ROOM_STRING = "sala";
|
||||
private static final String CAPACITY_STRING = "Mc";
|
||||
private static final String TYPE_GROUP= "typ";
|
||||
|
||||
private static final String ZAJ_CYK_ID = "zaj_cyk_id";
|
||||
private static final String GR_NR = "gr_nr";
|
||||
|
||||
@Autowired
|
||||
private LecturerService lecturerService;
|
||||
@ -55,6 +60,10 @@ public class FileToDatabaseMigrator {
|
||||
int timeIndex = data.getIndexOf(FileToDatabaseMigrator.GROUP_TIME_STRING);
|
||||
int roomIndex = data.getIndexOf(FileToDatabaseMigrator.ROOM_STRING);
|
||||
int capacityIndex = data.getIndexOf(FileToDatabaseMigrator.CAPACITY_STRING);
|
||||
int typeGroupIndex = data.getIndexOf(FileToDatabaseMigrator.TYPE_GROUP);
|
||||
|
||||
int zajCykIdIndex = data.getIndexOf(FileToDatabaseMigrator.ZAJ_CYK_ID);
|
||||
int grNrIndex = data.getIndexOf(FileToDatabaseMigrator.GR_NR);
|
||||
|
||||
while (rows.hasNext()) {
|
||||
Row row = rows.next();
|
||||
@ -67,11 +76,18 @@ public class FileToDatabaseMigrator {
|
||||
String lecturerSurname = row.getCell(surnameIndex) != null ? row.getCell(surnameIndex).toString().trim()
|
||||
: "";
|
||||
|
||||
int day = (int) Double.parseDouble(row.getCell(dayIndex).toString());
|
||||
Integer zajCykId = row.getCell(zajCykIdIndex) != 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;
|
||||
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());
|
||||
|
||||
Course course = this.courseService.getCourseByName(courseName)
|
||||
.orElseGet(() -> this.courseService.save(new Course(courseName, symbol)));
|
||||
@ -80,8 +96,11 @@ public class FileToDatabaseMigrator {
|
||||
.orElseGet(() -> this.lecturerService
|
||||
.save(new Lecturer(lecturerTitle, lecturerName, lecturerSurname)));
|
||||
|
||||
this.groupService.find(time, capacity, room).orElseGet(
|
||||
() -> this.groupService.save(new Groups(capacity, room, course, time, groupDay, lecturer)));
|
||||
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);
|
||||
|
||||
}
|
||||
|
||||
|
@ -2,6 +2,8 @@ package com.plannaplan.entities;
|
||||
|
||||
import java.sql.Date;
|
||||
import java.sql.Timestamp;
|
||||
import java.time.LocalDate;
|
||||
import java.util.TimeZone;
|
||||
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.GeneratedValue;
|
||||
@ -11,6 +13,8 @@ import javax.persistence.Id;
|
||||
import com.plannaplan.models.TourData;
|
||||
import com.plannaplan.types.AppState;
|
||||
|
||||
import org.springframework.scheduling.support.CronTrigger;
|
||||
|
||||
/**
|
||||
* entity that keeps app configurations
|
||||
*/
|
||||
@ -115,4 +119,53 @@ public class AppConfig {
|
||||
return AppState.NO_TOUR;
|
||||
}
|
||||
|
||||
/**
|
||||
* get cron expression of first tour end
|
||||
*
|
||||
* @return spring cron expression
|
||||
*/
|
||||
public CronTrigger getFirstTourEndCron() {
|
||||
return getCron(this.firstTourEnd);
|
||||
}
|
||||
|
||||
/**
|
||||
* get cron expression of second tour end
|
||||
*
|
||||
* @return spring cron expression
|
||||
*/
|
||||
public CronTrigger getSecondTourEndCron() {
|
||||
return getCron(this.secondTourEnd);
|
||||
}
|
||||
|
||||
/**
|
||||
* get cron expression of first tour start
|
||||
*
|
||||
* @return spring cron expression
|
||||
*/
|
||||
public CronTrigger getFirstTourStartCron() {
|
||||
return getCron(this.firstTourStart);
|
||||
}
|
||||
|
||||
/**
|
||||
* get cron expression of second tour start
|
||||
*
|
||||
* @return spring cron expression
|
||||
*/
|
||||
public CronTrigger getSecondTourStartCron() {
|
||||
return getCron(this.secondTourStart);
|
||||
}
|
||||
|
||||
/**
|
||||
* create spring cron expression
|
||||
*
|
||||
* @param date date to create cron exp from
|
||||
* @return spring cron expression. Remember that spring's cron deosn't contain
|
||||
* year in it.
|
||||
*/
|
||||
private CronTrigger getCron(Date date) {
|
||||
final LocalDate tourEnd = date.toLocalDate();
|
||||
return new CronTrigger("0 0 0 " + tourEnd.getDayOfMonth() + " " + tourEnd.getMonthValue() + " ?",
|
||||
TimeZone.getTimeZone(TimeZone.getDefault().getID()));
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -8,7 +8,8 @@ import javax.persistence.JoinColumn;
|
||||
import javax.persistence.ManyToOne;
|
||||
|
||||
/**
|
||||
* Entity of Assignment grouping of state associated about group_id and commision_id
|
||||
* Entity of Assignment grouping of state associated about group_id and
|
||||
* commision_id
|
||||
*
|
||||
*/
|
||||
|
||||
@ -27,6 +28,7 @@ public class Assignment {
|
||||
|
||||
/**
|
||||
* Assignment
|
||||
*
|
||||
* @param group group we would like to assign
|
||||
* @param commision commision that assignment belongs to
|
||||
* @param isPastAssignment is assignment past or no
|
||||
@ -36,8 +38,26 @@ public class Assignment {
|
||||
this.group = group;
|
||||
}
|
||||
|
||||
/**
|
||||
* If it returns trues it mesans u are assigned to group accepted by algorythm
|
||||
*
|
||||
* @return boolean isAccepted
|
||||
*/
|
||||
public boolean isAccepted() {
|
||||
return this.group.getRegisteredStudents().contains(this.commision.getCommisionOwner());
|
||||
}
|
||||
|
||||
/**
|
||||
* Getter of commision
|
||||
* @return Commision Commision of given assignments
|
||||
*/
|
||||
public Commision getCommision(){
|
||||
return this.commision;
|
||||
}
|
||||
|
||||
/**
|
||||
* Assignment
|
||||
*
|
||||
* @param group group we would like to assign
|
||||
* @param commision commision that assignment belongs to
|
||||
*/
|
||||
@ -48,8 +68,12 @@ public class Assignment {
|
||||
public Assignment() {
|
||||
}
|
||||
|
||||
public void setCommision(Commision commision) {
|
||||
this.commision = commision;
|
||||
}
|
||||
/**
|
||||
* Id getter
|
||||
*
|
||||
* @return id id of assignment
|
||||
*/
|
||||
|
||||
@ -68,6 +92,7 @@ public class Assignment {
|
||||
|
||||
/**
|
||||
* isPastAssignment getter
|
||||
*
|
||||
* @return isPastAssignment
|
||||
*/
|
||||
public boolean isPastAssignment() {
|
||||
@ -76,7 +101,8 @@ public class Assignment {
|
||||
|
||||
/**
|
||||
* setter isPastAssignment
|
||||
* @param isPastAssignment
|
||||
*
|
||||
* @param isPastAssignment is assignment past or not
|
||||
*/
|
||||
public void setPastAssignment(boolean isPastAssignment) {
|
||||
this.isPastAssignment = isPastAssignment;
|
||||
|
102
buisnesslogic/src/main/java/com/plannaplan/entities/Exchange.java
Executable file
102
buisnesslogic/src/main/java/com/plannaplan/entities/Exchange.java
Executable file
@ -0,0 +1,102 @@
|
||||
package com.plannaplan.entities;
|
||||
|
||||
import java.sql.Timestamp;
|
||||
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.GeneratedValue;
|
||||
import javax.persistence.GenerationType;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.JoinColumn;
|
||||
import javax.persistence.OneToOne;
|
||||
|
||||
/**
|
||||
* Entity that keeps user exchange offer.
|
||||
*/
|
||||
@Entity
|
||||
public class Exchange {
|
||||
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.AUTO)
|
||||
private Long id;
|
||||
|
||||
@OneToOne
|
||||
@JoinColumn(name = "owned_id")
|
||||
private Assignment ownedAssignment;
|
||||
|
||||
@OneToOne
|
||||
@JoinColumn(name = "desired_id")
|
||||
private Groups desiredAssignment;
|
||||
|
||||
private Long ownerId;
|
||||
|
||||
private Timestamp dateExchange;
|
||||
|
||||
public Exchange(){
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Long ID of exchange trader
|
||||
*/
|
||||
public Long getOwnerId() {
|
||||
return ownerId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param ownerId ID of exchange trader
|
||||
*/
|
||||
public void setOwnerId(Long ownerId) {
|
||||
this.ownerId = ownerId;
|
||||
}
|
||||
|
||||
public Timestamp getDataExchange() {
|
||||
return this.dateExchange;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param ownedAssignment Assignment which owner would like to trade
|
||||
* @param desiredAssignment Groups instance that trader wants
|
||||
*/
|
||||
public Exchange(Assignment ownedAssignment, Groups desiredAssignment) {
|
||||
this.ownedAssignment = ownedAssignment;
|
||||
this.desiredAssignment = desiredAssignment;
|
||||
this.ownerId = this.ownedAssignment != null ? this.ownedAssignment.getCommision().getCommisionOwner().getId() : null;
|
||||
this.dateExchange = new Timestamp(System.currentTimeMillis());
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Long ID in database
|
||||
*/
|
||||
public Long getId(){
|
||||
return this.id;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Groups Target group
|
||||
*/
|
||||
public Groups getDesiredAssignment() {
|
||||
return desiredAssignment;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param desiredAssignment Target group
|
||||
*/
|
||||
public void setDesiredAssignment(Groups desiredAssignment) {
|
||||
this.desiredAssignment = desiredAssignment;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Assignment Owned assignment
|
||||
*/
|
||||
public Assignment getOwnedAssignment() {
|
||||
return ownedAssignment;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param ownedAssignment Owned assignment
|
||||
*/
|
||||
public void setOwnedAssignment(Assignment ownedAssignment) {
|
||||
this.ownedAssignment = ownedAssignment;
|
||||
}
|
||||
}
|
@ -1,10 +1,15 @@
|
||||
package com.plannaplan.entities;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.FetchType;
|
||||
import javax.persistence.GeneratedValue;
|
||||
import javax.persistence.GenerationType;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.JoinColumn;
|
||||
import javax.persistence.ManyToMany;
|
||||
import javax.persistence.ManyToOne;
|
||||
|
||||
import com.plannaplan.types.GroupType;
|
||||
@ -34,10 +39,41 @@ public class Groups {
|
||||
@ManyToOne
|
||||
@JoinColumn(name = "lecturer_id")
|
||||
private Lecturer lecturer;
|
||||
private Integer zajCykId;
|
||||
private Integer grNr;
|
||||
@ManyToMany(mappedBy = "studentRegisteredGrups", fetch = FetchType.EAGER)
|
||||
private Set<User> registeredStudents;
|
||||
|
||||
public Set<User> getRegisteredStudents() {
|
||||
return this.registeredStudents;
|
||||
}
|
||||
|
||||
public void assignUser(User user) {
|
||||
if (this.registeredStudents == null) {
|
||||
this.registeredStudents = new HashSet<>();
|
||||
}
|
||||
this.registeredStudents.add(user);
|
||||
}
|
||||
|
||||
public Groups() {
|
||||
}
|
||||
|
||||
public Integer getGrNr() {
|
||||
return grNr;
|
||||
}
|
||||
|
||||
public void setGrNr(Integer grNr) {
|
||||
this.grNr = grNr;
|
||||
}
|
||||
|
||||
public Integer getZajCykId() {
|
||||
return zajCykId;
|
||||
}
|
||||
|
||||
public void setZajCykId(Integer zajCykId) {
|
||||
this.zajCykId = zajCykId;
|
||||
}
|
||||
|
||||
/**
|
||||
* Groups
|
||||
*
|
||||
@ -60,6 +96,84 @@ public class Groups {
|
||||
this.type = capacity >= 50 ? GroupType.LECTURE : GroupType.CLASS;
|
||||
}
|
||||
|
||||
/**
|
||||
* Groups
|
||||
*
|
||||
* @param capacity capacity given to the groups
|
||||
* @param room room given to the groups
|
||||
* @param course course given to the groups
|
||||
* @param time time given to the groups
|
||||
* @param endTime end time of class in minutes
|
||||
* @param day day given to the groups
|
||||
* @param lecturer lecturer given to the groups
|
||||
* @param zajCykId number of class in the term
|
||||
* @param grNr Number of class/course
|
||||
* @param type type of class/cource
|
||||
*/
|
||||
public Groups(int capacity, String room, Course course, int time, int endTime, WeekDay day, Lecturer lecturer,
|
||||
Integer zajCykId, Integer grNr, GroupType type) {
|
||||
this(capacity, room, course, time, endTime, day, lecturer, zajCykId, grNr);
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
/**
|
||||
* Groups
|
||||
*
|
||||
* @param capacity capacity given to the groups
|
||||
* @param room room given to the groups
|
||||
* @param course course given to the groups
|
||||
* @param time time given to the groups
|
||||
* @param day day given to the groups
|
||||
* @param lecturer lecturer given to the groups
|
||||
* @param zajCykId number of class in the term
|
||||
* @param grNr Number of class/course
|
||||
* @param type type of class/cource
|
||||
*/
|
||||
public Groups(int capacity, String room, Course course, int time, WeekDay day, Lecturer lecturer,
|
||||
Integer zajCykId, Integer grNr, GroupType type) {
|
||||
this(capacity, room, course, time, time + DEFAULT_CLASS_TIME, day, lecturer, zajCykId, grNr);
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
/**
|
||||
* Groups
|
||||
*
|
||||
* @param capacity capacity given to the groups
|
||||
* @param room room given to the groups
|
||||
* @param course course given to the groups
|
||||
* @param time time given to the groups
|
||||
* @param endTime end time of class in minutes
|
||||
* @param day day given to the groups
|
||||
* @param lecturer lecturer given to the groups
|
||||
* @param zajCykId number of class in the term
|
||||
* @param grNr Number of class/course
|
||||
*/
|
||||
public Groups(int capacity, String room, Course course, int time, int endTime, WeekDay day, Lecturer lecturer,
|
||||
Integer zajCykId, Integer grNr) {
|
||||
this(capacity, room, course, time, endTime, day, lecturer);
|
||||
this.zajCykId = zajCykId;
|
||||
this.grNr = grNr;
|
||||
}
|
||||
|
||||
/**
|
||||
* Groups
|
||||
*
|
||||
* @param capacity capacity given to the groups
|
||||
* @param room room given to the groups
|
||||
* @param course course given to the groups
|
||||
* @param time time given to the groups
|
||||
* @param day day given to the groups
|
||||
* @param lecturer lecturer given to the groups
|
||||
* @param zajCykId number of class in the term
|
||||
* @param grNr Number of class/course
|
||||
*/
|
||||
public Groups(int capacity, String room, Course course, int time, WeekDay day, Lecturer lecturer, Integer zajCykId,
|
||||
Integer grNr) {
|
||||
this(capacity, room, course, time, time + DEFAULT_CLASS_TIME, day, lecturer);
|
||||
this.zajCykId = zajCykId;
|
||||
this.grNr = grNr;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create groups with default class duration
|
||||
*
|
||||
@ -74,6 +188,53 @@ public class Groups {
|
||||
this(capacity, room, course, time, time + DEFAULT_CLASS_TIME, day, lecturer);
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates given values other that are not null
|
||||
*
|
||||
* @param capacity capacity given to the groups
|
||||
* @param room room given to the groups
|
||||
* @param course course given to the groups
|
||||
* @param time time given to the groups
|
||||
* @param endTime end time of class in minutes
|
||||
* @param day day given to the groups
|
||||
* @param lecturer lecturer given to the groups
|
||||
* @param type type given to the groups
|
||||
*/
|
||||
public void update(Integer capacity, String room, Course course, Integer time, Integer endTime, WeekDay day,
|
||||
Lecturer lecturer, GroupType type) {
|
||||
if (capacity != null) {
|
||||
this.capacity = capacity;
|
||||
}
|
||||
|
||||
if (room != null) {
|
||||
this.room = room;
|
||||
}
|
||||
|
||||
if (course != null) {
|
||||
this.course = course;
|
||||
}
|
||||
|
||||
if (time != null) {
|
||||
this.time = time;
|
||||
}
|
||||
|
||||
if (endTime != null) {
|
||||
this.endTime = endTime;
|
||||
}
|
||||
|
||||
if (day != null) {
|
||||
this.day = day;
|
||||
}
|
||||
|
||||
if (lecturer != null) {
|
||||
this.lecturer = lecturer;
|
||||
}
|
||||
|
||||
if (type != null) {
|
||||
this.type = type;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* get time of class end
|
||||
*
|
||||
|
@ -1,14 +1,21 @@
|
||||
package com.plannaplan.entities;
|
||||
|
||||
import java.sql.Timestamp;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import javax.persistence.CascadeType;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.FetchType;
|
||||
import javax.persistence.GeneratedValue;
|
||||
import javax.persistence.GenerationType;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.JoinTable;
|
||||
import javax.persistence.ManyToMany;
|
||||
|
||||
import com.plannaplan.models.UserApiResponse;
|
||||
import com.plannaplan.types.UserRoles;
|
||||
|
||||
/**
|
||||
@ -31,6 +38,26 @@ public class User {
|
||||
private String token;
|
||||
private String refreshToken;
|
||||
private Timestamp tokenUsageDate;
|
||||
private Integer ranking;
|
||||
@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
|
||||
@JoinTable
|
||||
private Set<Groups> studentRegisteredGrups;
|
||||
|
||||
public Set<Groups> getStudentRegisteredGrups() {
|
||||
return this.studentRegisteredGrups;
|
||||
}
|
||||
|
||||
public void removeGroup(Long id) {
|
||||
final Groups groupToDelete = this.studentRegisteredGrups.stream().filter(e -> e.getId().equals(id)).findFirst().get();
|
||||
this.studentRegisteredGrups.remove(groupToDelete);
|
||||
}
|
||||
|
||||
public void claimGroup(Groups group) {
|
||||
if (this.studentRegisteredGrups == null) {
|
||||
this.studentRegisteredGrups = new HashSet<>();
|
||||
}
|
||||
this.studentRegisteredGrups.add(group);
|
||||
}
|
||||
|
||||
public User() {
|
||||
}
|
||||
@ -40,7 +67,7 @@ public class User {
|
||||
* @param name name given to the user
|
||||
* @param surname surname given to the user
|
||||
* @param mail mail given to the user
|
||||
* @param role
|
||||
* @param role user's role
|
||||
*/
|
||||
public User(String name, String surname, String mail, UserRoles role) {
|
||||
this.name = name;
|
||||
@ -55,13 +82,28 @@ public class User {
|
||||
* @param surname surname given to the user
|
||||
* @param mail mail given to the user
|
||||
* @param usosId id in the USOS system
|
||||
* @param role
|
||||
* @param role user's role
|
||||
*/
|
||||
public User(String name, String surname, String mail, String usosId, UserRoles role) {
|
||||
this(name, surname, mail, role);
|
||||
this.usosId = usosId;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param name name given to the user
|
||||
* @param surname surname given to the user
|
||||
* @param mail mail given to the user
|
||||
* @param usosId id in the USOS system
|
||||
* @param role user's role
|
||||
* @param ranking ranking points [100;500]. It's calculated by
|
||||
* gradesAvg*100*studiesYear
|
||||
*/
|
||||
public User(String name, String surname, String mail, String usosId, UserRoles role, Integer ranking) {
|
||||
this(name, surname, mail, usosId, role);
|
||||
this.ranking = ranking;
|
||||
}
|
||||
|
||||
/**
|
||||
* usos id getter
|
||||
*
|
||||
@ -188,6 +230,35 @@ public class User {
|
||||
return this.id;
|
||||
}
|
||||
|
||||
/**
|
||||
* Ranking points are [100;500]. It's calculated by gradesAvg*100*studiesYear
|
||||
*
|
||||
* @return ranking points [100;500]
|
||||
*/
|
||||
public Integer getRanking() {
|
||||
return ranking;
|
||||
}
|
||||
|
||||
/**
|
||||
* Ranking points setter. Ranking points are [100;500]. It's calculated by
|
||||
* gradesAvg*100*studiesYear
|
||||
*
|
||||
* @param ranking ranking points [100;500]
|
||||
*/
|
||||
public void setRanking(Integer ranking) {
|
||||
this.ranking = ranking;
|
||||
}
|
||||
|
||||
/**
|
||||
* updates user entity with data got by UsosApiService::getUserData
|
||||
*
|
||||
* @param usosData UserApiResponse model with needed data
|
||||
*/
|
||||
public void updateWithUsosData(UserApiResponse usosData) {
|
||||
this.name = usosData.getName();
|
||||
this.surname = usosData.getSurname();
|
||||
}
|
||||
|
||||
/**
|
||||
* it checks if given ammount of time passed since last token usage. If not
|
||||
* retunr true and reset time otherwise return false and token won work anymore
|
||||
|
97
buisnesslogic/src/main/java/com/plannaplan/models/EmailAcceptedData.java
Executable file
97
buisnesslogic/src/main/java/com/plannaplan/models/EmailAcceptedData.java
Executable file
@ -0,0 +1,97 @@
|
||||
package com.plannaplan.models;
|
||||
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
import com.plannaplan.entities.Groups;
|
||||
|
||||
/**
|
||||
* Instance to keep data to send in mail about accepted courses results
|
||||
*/
|
||||
public class EmailAcceptedData {
|
||||
private List<Groups> accepted;
|
||||
private List<Groups> removed;
|
||||
|
||||
public EmailAcceptedData() {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* creates instance of class
|
||||
*
|
||||
* @param accepted list of groups that user joined to
|
||||
* @param removed lsit of groups that user failed to join
|
||||
*/
|
||||
public EmailAcceptedData(List<Groups> accepted, List<Groups> removed) {
|
||||
this.accepted = accepted;
|
||||
this.removed = removed;
|
||||
}
|
||||
|
||||
/**
|
||||
* get list of removed assignments
|
||||
*
|
||||
* @return removed assingments
|
||||
*/
|
||||
public List<Groups> getRemoved() {
|
||||
return removed;
|
||||
}
|
||||
|
||||
/**
|
||||
* set list of removed assignments
|
||||
*
|
||||
* @param removed list of removed assignments
|
||||
*/
|
||||
public void setRemoved(List<Groups> removed) {
|
||||
this.removed = removed;
|
||||
}
|
||||
|
||||
/**
|
||||
* get list of accepted assignments
|
||||
*
|
||||
* @return accepted assingments
|
||||
*/
|
||||
public List<Groups> getAccepted() {
|
||||
return accepted;
|
||||
}
|
||||
|
||||
/**
|
||||
* set list of accepted assignments
|
||||
*
|
||||
* @param accepted list of accepted assignments
|
||||
*/
|
||||
public void setAccepted(List<Groups> accepted) {
|
||||
this.accepted = accepted;
|
||||
}
|
||||
|
||||
/**
|
||||
* it creates and return email message body
|
||||
*
|
||||
* @return string with emiale massage
|
||||
*/
|
||||
public String getEmailMessage() {
|
||||
String response = "Akceptacja Twoich przedmiotów właśnie dobiegła końca.\n\n";
|
||||
if (this.accepted != null && this.accepted.size() > 0) {
|
||||
response += "Zatwierdzone grupy: \n";
|
||||
Iterator<Groups> iterator = accepted.iterator();
|
||||
while (iterator.hasNext()) {
|
||||
final Groups gorup = iterator.next();
|
||||
final String courseName = gorup.getCourseId() != null ? gorup.getCourseId().getName()
|
||||
: "Nieznana grupa";
|
||||
response += (" - " + courseName + " - " + gorup.getType() + "\n");
|
||||
}
|
||||
|
||||
}
|
||||
if (this.removed != null && this.removed.size() > 0) {
|
||||
response += "Usunięte grupy: \n";
|
||||
Iterator<Groups> iterator = removed.iterator();
|
||||
while (iterator.hasNext()) {
|
||||
final Groups gorup = iterator.next();
|
||||
final String courseName = gorup.getCourseId() != null ? gorup.getCourseId().getName()
|
||||
: "Nieznana grupa";
|
||||
response += (" - " + courseName + " - " + gorup.getType() + "\n");
|
||||
}
|
||||
|
||||
}
|
||||
return response;
|
||||
}
|
||||
}
|
45
buisnesslogic/src/main/java/com/plannaplan/models/EmailExchangesData.java
Executable file
45
buisnesslogic/src/main/java/com/plannaplan/models/EmailExchangesData.java
Executable file
@ -0,0 +1,45 @@
|
||||
package com.plannaplan.models;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import com.plannaplan.entities.Exchange;
|
||||
import com.plannaplan.entities.User;
|
||||
|
||||
/**
|
||||
* Class to keepm data to be send after exchanges being accept
|
||||
*/
|
||||
public class EmailExchangesData {
|
||||
private Map<Long, List<Exchange>> data;
|
||||
|
||||
public EmailExchangesData() {
|
||||
this.data = new HashMap<>();
|
||||
}
|
||||
|
||||
/**
|
||||
* method to add user and his event to data to be send
|
||||
*
|
||||
* @param user owner of exchange being performed
|
||||
* @param data exchange that was executed
|
||||
*/
|
||||
public void addExchange(User user, Exchange data) {
|
||||
final Long id = user.getId();
|
||||
if (this.data.get(id) == null) {
|
||||
this.data.put(id, new ArrayList<>());
|
||||
}
|
||||
this.data.get(id).add(data);
|
||||
}
|
||||
|
||||
/**
|
||||
* get datas entry set
|
||||
*
|
||||
* @return set with entries that contains Long that is user id and list of hiss
|
||||
* performed Exchanges
|
||||
*/
|
||||
public Set<Map.Entry<Long, List<Exchange>>> getDataEntry() {
|
||||
return this.data.entrySet();
|
||||
}
|
||||
}
|
66
buisnesslogic/src/main/java/com/plannaplan/models/MatchData.java
Executable file
66
buisnesslogic/src/main/java/com/plannaplan/models/MatchData.java
Executable file
@ -0,0 +1,66 @@
|
||||
package com.plannaplan.models;
|
||||
|
||||
import com.plannaplan.entities.Assignment;
|
||||
import com.plannaplan.entities.Exchange;
|
||||
|
||||
public class MatchData {
|
||||
private Exchange exchangeOne;
|
||||
private Exchange exchangeTwo;
|
||||
|
||||
public MatchData(Exchange exchangeOne, Exchange exchangeTwo) {
|
||||
this.exchangeOne = exchangeOne;
|
||||
this.exchangeTwo = exchangeTwo;
|
||||
}
|
||||
|
||||
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)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// typecast o to Complex so that we can compare data members
|
||||
MatchData c = (MatchData) o;
|
||||
|
||||
// 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()));
|
||||
}
|
||||
|
||||
public int compare(MatchData m1) {
|
||||
return Long.compare(m1.getExchangesMsValue(), this.getExchangesMsValue());
|
||||
}
|
||||
|
||||
public long getExchangesMsValue(){
|
||||
return this.exchangeOne.getDataExchange().getTime() + this.exchangeTwo.getDataExchange().getTime();
|
||||
}
|
||||
}
|
29
buisnesslogic/src/main/java/com/plannaplan/models/UserApiResponse.java
Executable file
29
buisnesslogic/src/main/java/com/plannaplan/models/UserApiResponse.java
Executable file
@ -0,0 +1,29 @@
|
||||
package com.plannaplan.models;
|
||||
|
||||
/**
|
||||
* Model to keep data from /services/users/user response called in
|
||||
* UsosApiService
|
||||
*/
|
||||
public class UserApiResponse {
|
||||
private String name;
|
||||
private String surname;
|
||||
|
||||
public UserApiResponse() {
|
||||
}
|
||||
|
||||
public String getSurname() {
|
||||
return surname;
|
||||
}
|
||||
|
||||
public void setSurname(String surname) {
|
||||
this.surname = surname;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
}
|
@ -0,0 +1,26 @@
|
||||
package com.plannaplan.repositories;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
import com.plannaplan.entities.Assignment;
|
||||
import com.plannaplan.entities.Exchange;
|
||||
import com.plannaplan.entities.Groups;
|
||||
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.data.jpa.repository.Query;
|
||||
import org.springframework.data.repository.query.Param;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
@Repository
|
||||
public interface ExchangeRepository extends JpaRepository<Exchange, Long>{
|
||||
|
||||
@Query("FROM Exchange WHERE owned_id = ?1 AND desired_id = ?2")
|
||||
Optional<Exchange> checkForExchange(@Param("owned_id") Assignment assignment, @Param("desired_id") Groups group);
|
||||
|
||||
@Query("FROM Exchange WHERE ownerId = ?1")
|
||||
List<Exchange> getByUserId(@Param("id") Long id);
|
||||
|
||||
@Query("Select e1,e2 FROM Exchange e1, Exchange e2 WHERE e1.ownedAssignment.group.id = e2.desiredAssignment.id")
|
||||
List<Object[]> getMatches();
|
||||
}
|
@ -28,6 +28,9 @@ public interface GroupRepository extends JpaRepository<Groups, Long> {
|
||||
@Query("FROM Groups WHERE time = ?1 AND room = ?2 AND capacity = ?3")
|
||||
Optional<Groups> find(@Param("time") int time, @Param("room") String room, @Param("capacity") int capacity);
|
||||
|
||||
@Query("FROM Groups WHERE zajCykId = ?1 AND grNr = ?2")
|
||||
Optional<Groups> find(@Param("zajCykId") Integer zaj_cyk_id, @Param("grNr") Integer gr_nr);
|
||||
|
||||
@Query("FROM Groups WHERE course_id = ?1")
|
||||
List<Groups> getByCourse(@Param("id") Long id);
|
||||
|
||||
|
@ -35,9 +35,18 @@ import org.springframework.stereotype.Repository;
|
||||
|
||||
@Repository
|
||||
public interface UserRepository extends JpaRepository<User, Long> {
|
||||
@Query("FROM User WHERE email = ?1")
|
||||
/**
|
||||
* return user by given authority
|
||||
*
|
||||
* @param authority user usosId or email
|
||||
* @return optional with user if found
|
||||
*/
|
||||
@Query("FROM User WHERE email = ?1 OR usosId = ?1")
|
||||
Optional<User> getByAuthority(@Param("authority") String authority);
|
||||
|
||||
@Query("FROM User WHERE email = ?1")
|
||||
Optional<User> getByEmail(@Param("authority") String authority);
|
||||
|
||||
@Query("FROM User WHERE refreshToken = ?1")
|
||||
Optional<User> getByRefreshToken(@Param("refreshToken") String refreshToken);
|
||||
|
||||
@ -47,6 +56,13 @@ public interface UserRepository extends JpaRepository<User, Long> {
|
||||
@Query("FROM User WHERE (name LIKE %?1% OR surname LIKE %?1%)")
|
||||
List<User> searchForUsers(@Param("query") String query);
|
||||
|
||||
/**
|
||||
* search for user with given query
|
||||
*
|
||||
* @param query string that will be matched to users name and surname
|
||||
* @param role limits results by role
|
||||
* @return list opf results
|
||||
*/
|
||||
@Query("FROM User WHERE (name LIKE %?1% OR surname LIKE %?1%) AND role=?2")
|
||||
List<User> searchForUsers(@Param("query") String query, @Param("role") UserRoles role);
|
||||
|
||||
|
@ -1,17 +1,22 @@
|
||||
package com.plannaplan.services;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
import com.plannaplan.entities.Assignment;
|
||||
import com.plannaplan.entities.Commision;
|
||||
import com.plannaplan.entities.Groups;
|
||||
import com.plannaplan.entities.User;
|
||||
import com.plannaplan.models.EmailAcceptedData;
|
||||
import com.plannaplan.repositories.AssignmentRepository;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* Service of Assignment which can save assignments, diplay assignments, get ammount of assigments.
|
||||
* Service of Assignment which can save assignments, diplay assignments, get
|
||||
* ammount of assigments.
|
||||
*/
|
||||
|
||||
@Service
|
||||
@ -19,11 +24,21 @@ public class AssignmentService {
|
||||
@Autowired
|
||||
private AssignmentRepository repo;
|
||||
|
||||
@Autowired
|
||||
private CommisionService service;
|
||||
|
||||
@Autowired
|
||||
private UserService userService;
|
||||
|
||||
@Autowired
|
||||
private EmailService emailService;
|
||||
|
||||
public AssignmentService() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Save given assignment
|
||||
*
|
||||
* @param assignment assignment to save
|
||||
* @return assignment saved assignment with database id
|
||||
*/
|
||||
@ -31,17 +46,20 @@ public class AssignmentService {
|
||||
return this.repo.save(assignment);
|
||||
}
|
||||
|
||||
/*
|
||||
* getCommisionAssignments
|
||||
* Return id of the commision
|
||||
/**
|
||||
* gets list of assignments of given commision
|
||||
*
|
||||
* @param com Commision to get assinments from
|
||||
* @return list of assignments
|
||||
*/
|
||||
public List<Assignment> getCommisionAssignments(Commision com) {
|
||||
return this.repo.getByCommision(com.getId());
|
||||
}
|
||||
|
||||
/*
|
||||
* getAssignmentsAmmount
|
||||
* Return count assignments ammount
|
||||
/**
|
||||
* get ammount of all assignments (not only for selected commision)
|
||||
*
|
||||
* @return long - ammount of assingments
|
||||
*/
|
||||
public long getAssignmentsAmmount() {
|
||||
return this.repo.count();
|
||||
@ -49,10 +67,41 @@ public class AssignmentService {
|
||||
|
||||
/**
|
||||
* Get assigmnent by id
|
||||
*
|
||||
* @param id id of assigmnent
|
||||
* @return Optional of assignment
|
||||
*/
|
||||
public Optional<Assignment> getById(Long id) {
|
||||
return this.repo.findById(id);
|
||||
}
|
||||
|
||||
/**
|
||||
* this method will activate accept algorythm for all students. Algorythm is
|
||||
* takeing each student in order defined by ranking and accept for him groups
|
||||
* that are joinable for him
|
||||
*/
|
||||
public void callAcceptAlgorythm() {
|
||||
final List<User> students = this.userService.getStudentsSortedByRanking();
|
||||
|
||||
students.forEach(e -> {
|
||||
final Optional<Commision> com = this.service.getNewestCommision(e);
|
||||
final List<Groups> accepted = new ArrayList<>();
|
||||
final List<Groups> removed = new ArrayList<>();
|
||||
|
||||
if (com.isPresent()) {
|
||||
final List<Assignment> assignments = this.getCommisionAssignments(com.get());
|
||||
assignments.forEach(a -> {
|
||||
final Groups group = a.getGroup();
|
||||
if (group.getCapacity() > group.getRegisteredStudents().size()) {
|
||||
e.claimGroup(group);
|
||||
accepted.add(group);
|
||||
} else {
|
||||
removed.add(group);
|
||||
}
|
||||
});
|
||||
}
|
||||
this.userService.save(e);
|
||||
this.emailService.sendAcceptationResult(e, new EmailAcceptedData(accepted, removed));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -12,7 +12,8 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* Service of CommisionService which can save commision, get user's commisions, get newest user's commision, get ammount of commisions.
|
||||
* Service of CommisionService which can save commision, get user's commisions,
|
||||
* get newest user's commision, get ammount of commisions.
|
||||
*/
|
||||
|
||||
@Service
|
||||
@ -25,12 +26,6 @@ public class CommisionService {
|
||||
public CommisionService() {
|
||||
}
|
||||
|
||||
/*
|
||||
* save
|
||||
*
|
||||
* @param commision which assignment should be save in service
|
||||
* @return commision
|
||||
*/
|
||||
public Commision save(Commision commision) {
|
||||
Optional<Commision> lastCommision = this.getNewestCommision(commision.getCommisionOwner());
|
||||
if (lastCommision.isPresent()) {
|
||||
@ -45,25 +40,31 @@ public class CommisionService {
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
* getUsersCommisions
|
||||
* Return given users id
|
||||
/**
|
||||
* gets user commisions
|
||||
*
|
||||
* @param user owner of commisions
|
||||
* @return list of user commisions
|
||||
*/
|
||||
public List<Commision> getUsersCommisions(User user) {
|
||||
return this.repo.getUsers(user.getId());
|
||||
}
|
||||
|
||||
/*
|
||||
* getNewestCommision
|
||||
* Return the newest commision of the user
|
||||
/**
|
||||
* get newest commision ov given user
|
||||
*
|
||||
* @param user owener of commision we attemp to get
|
||||
* @return optional if commition was found
|
||||
*/
|
||||
public Optional<Commision> getNewestCommision(User user) {
|
||||
return this.repo.getNewestCommision(user.getId()).stream().findFirst();
|
||||
}
|
||||
|
||||
/*
|
||||
* getCommisionsAmmount
|
||||
* Return ammount of commisions
|
||||
/**
|
||||
* get ammpounts of commisions
|
||||
*
|
||||
* @return long - ammounts of commisions (all even from history, not only
|
||||
* cutrrent one)
|
||||
*/
|
||||
public long getCommisionsAmmount() {
|
||||
return this.repo.count();
|
||||
|
@ -2,11 +2,15 @@ package com.plannaplan.services;
|
||||
|
||||
import com.plannaplan.models.ConfigData;
|
||||
import com.plannaplan.models.FileData;
|
||||
import com.plannaplan.models.TourData;
|
||||
import com.plannaplan.repositories.AppConfigRepository;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.sql.Date;
|
||||
import java.time.LocalDate;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
@ -24,20 +28,40 @@ public class ConfiguratorService {
|
||||
private FileToDatabaseMigrator migrator;
|
||||
@Autowired
|
||||
private AppConfigRepository configRepo;
|
||||
@Autowired
|
||||
private EventService eventService;
|
||||
@Autowired
|
||||
private AssignmentService assignmentService;
|
||||
|
||||
public ConfiguratorService() {
|
||||
}
|
||||
|
||||
/**
|
||||
* methoid to config system
|
||||
* methoid to config system. it shedules PerformAcceptAlgorythmTask as a side
|
||||
* effect
|
||||
*
|
||||
* @param data ConfigData containng system configs
|
||||
*/
|
||||
public void config(ConfigData data) {
|
||||
FileReader reader = new FileReader(data.getFilestream());
|
||||
FileData coursesData = reader.read();
|
||||
this.configRepo.save(new AppConfig(data.getFirstTour(), data.getSecondTour()));
|
||||
final AppConfig config = new AppConfig(data.getFirstTour(), data.getSecondTour());
|
||||
this.configRepo.save(config);
|
||||
migrator.migrate(coursesData);
|
||||
this.shceduleTaskAfterToursDateChange(config);
|
||||
}
|
||||
|
||||
/**
|
||||
* Save tours to DataBase and shedule PerformAcceptAlgorythmTask as a side
|
||||
* effect
|
||||
*
|
||||
* @param firstTour First tour period.
|
||||
* @param secondTour Second tour period.
|
||||
*/
|
||||
public void saveTours(TourData firstTour, TourData secondTour) {
|
||||
final AppConfig config = new AppConfig(firstTour, secondTour);
|
||||
this.configRepo.save(config);
|
||||
this.shceduleTaskAfterToursDateChange(config);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -62,4 +86,52 @@ public class ConfiguratorService {
|
||||
|
||||
return repsonse.get(0);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param inputStream This input stream contains new courses to import.
|
||||
*/
|
||||
public void importCoursesStream(InputStream inputStream) {
|
||||
FileReader reader = new FileReader(inputStream);
|
||||
FileData coursesData = reader.read();
|
||||
migrator.migrate(coursesData);
|
||||
}
|
||||
|
||||
private void shceduleTaskAfterToursDateChange(AppConfig config) {
|
||||
|
||||
this.eventService.scheduleTask(EventService.FIRST_TOUR_SCHEDULE,
|
||||
new AlgorythmAcceptTask(config.getFirstTourEnd()), config.getFirstTourEndCron());
|
||||
|
||||
this.eventService.scheduleTask(EventService.SECOND_TOUR_SCHEDULE,
|
||||
new AlgorythmAcceptTask(config.getSecondTourEnd()), config.getSecondTourEndCron());
|
||||
}
|
||||
|
||||
/**
|
||||
* It's local class to perform accept Task. It's needed to be here due to have
|
||||
* acces to AssignmentService.
|
||||
*/
|
||||
private class AlgorythmAcceptTask implements Runnable {
|
||||
|
||||
private LocalDate localDate;
|
||||
|
||||
/**
|
||||
* create instance of AlgorythmAcceptTask
|
||||
*
|
||||
* @param date date of algorythm perform. Needed to check if ti's being called
|
||||
* in correct year
|
||||
*/
|
||||
public AlgorythmAcceptTask(Date date) {
|
||||
this.localDate = date.toLocalDate();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
System.out.println("Performing event");
|
||||
if (localDate.getYear() == LocalDate.now().getYear()) {
|
||||
assignmentService.callAcceptAlgorythm();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -1,5 +1,14 @@
|
||||
package com.plannaplan.services;
|
||||
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.plannaplan.entities.Exchange;
|
||||
import com.plannaplan.entities.User;
|
||||
import com.plannaplan.models.EmailAcceptedData;
|
||||
import com.plannaplan.models.EmailExchangesData;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.mail.SimpleMailMessage;
|
||||
@ -15,6 +24,9 @@ public class EmailService {
|
||||
@Autowired
|
||||
private JavaMailSender emailSender;
|
||||
|
||||
@Autowired
|
||||
private UserService userService;
|
||||
|
||||
@Value("${plannaplan.email}")
|
||||
private String appEmail;
|
||||
|
||||
@ -35,4 +47,55 @@ public class EmailService {
|
||||
mailMessage.setText(message);
|
||||
emailSender.send(mailMessage);
|
||||
}
|
||||
|
||||
/**
|
||||
* sends email with infromation about accepted groups
|
||||
*
|
||||
* @param user user to send a mail
|
||||
* @param data EmailAcceptedData instance containing informations about accepted
|
||||
* and removed groups
|
||||
*/
|
||||
public void sendAcceptationResult(User user, EmailAcceptedData data) {
|
||||
SimpleMailMessage mailMessage = new SimpleMailMessage();
|
||||
mailMessage.setFrom(appEmail);
|
||||
mailMessage.setTo(user.getEmail());
|
||||
mailMessage.setSubject("[PlanNaPlan] Akceptacja przedmiotów");
|
||||
mailMessage.setText(data.getEmailMessage());
|
||||
emailSender.send(mailMessage);
|
||||
}
|
||||
|
||||
/**
|
||||
* method to send email for students whose groups were swaped
|
||||
*
|
||||
* @param data EmailExchangesData instance that contains pair of datas user and
|
||||
* list of performed exhanges
|
||||
*/
|
||||
public void sendExchangesResults(EmailExchangesData data) {
|
||||
for (Map.Entry<Long, List<Exchange>> entry : data.getDataEntry()) {
|
||||
final User user = this.userService.getById(entry.getKey()).get();
|
||||
String response = "Znaleźliśmy dla Ciebie osobę, która zamieniła się z Tobą przedmiotami!!!\n Zamienione przedmioty: \n";
|
||||
|
||||
final Iterator<Exchange> interator = entry.getValue().iterator();
|
||||
|
||||
while (interator.hasNext()) {
|
||||
final Exchange exchange = interator.next();
|
||||
final String courseFrom = exchange.getDesiredAssignment().getCourseId() != null
|
||||
? exchange.getDesiredAssignment().getCourseId().getName()
|
||||
: "Nieznane zajęcie";
|
||||
final String courseTo = exchange.getOwnedAssignment().getGroup().getCourseId() != null
|
||||
? exchange.getOwnedAssignment().getGroup().getCourseId().getName()
|
||||
: "Nieznane zajęcie";
|
||||
|
||||
response += (" - " + courseFrom + " za " + courseTo.toLowerCase());
|
||||
}
|
||||
|
||||
SimpleMailMessage mailMessage = new SimpleMailMessage();
|
||||
mailMessage.setFrom(appEmail);
|
||||
mailMessage.setTo(user.getEmail());
|
||||
mailMessage.setSubject("[PlanNaPlan] Zamiana przedmiotów");
|
||||
mailMessage.setText(response);
|
||||
emailSender.send(mailMessage);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,17 +1,61 @@
|
||||
package com.plannaplan.services;
|
||||
|
||||
// import org.springframework.beans.factory.annotation.Autowired;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ScheduledFuture;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.scheduling.annotation.Scheduled;
|
||||
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
|
||||
import org.springframework.scheduling.support.CronTrigger;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Service
|
||||
public class EventService {
|
||||
|
||||
// @Autowired
|
||||
// private EmailService emailService;
|
||||
@Autowired
|
||||
private ExchangeService exchangeService;
|
||||
|
||||
@Scheduled(cron = "0 2 17 * * *")
|
||||
public static final int FIRST_TOUR_SCHEDULE = 0;
|
||||
public static final int SECOND_TOUR_SCHEDULE = 1;
|
||||
|
||||
private ThreadPoolTaskScheduler scheduler;
|
||||
private Map<Integer, ScheduledFuture<?>> jobsMap = new HashMap<>();
|
||||
|
||||
@Scheduled(cron = "0 24 17 * * *")
|
||||
public void collectGroupLosses() {
|
||||
System.out.println("Checking for groups");
|
||||
}
|
||||
|
||||
@Scheduled(cron = "0 0 0 * * *")
|
||||
public void performExchangeService() {
|
||||
System.out.println("Performing Exchange");
|
||||
this.exchangeService.performExchange();
|
||||
}
|
||||
|
||||
/**
|
||||
* Schedule provided task to perform
|
||||
*
|
||||
* @param taskId static filed of this class that represents to what event
|
||||
* we want to assign task
|
||||
* @param task runnable class that perform task in implemented run method
|
||||
* @param cronTrigger CronTrigger instance with date to perform
|
||||
*/
|
||||
public void scheduleTask(int taskId, Runnable task, CronTrigger cronTrigger) {
|
||||
ScheduledFuture<?> scheduledTask = jobsMap.get(taskId);
|
||||
if (scheduledTask != null) {
|
||||
scheduledTask.cancel(true);
|
||||
jobsMap.put(taskId, null);
|
||||
}
|
||||
scheduledTask = this.scheduler.schedule(task, cronTrigger);
|
||||
jobsMap.put(taskId, scheduledTask);
|
||||
}
|
||||
|
||||
@PostConstruct
|
||||
public void initialize() {
|
||||
this.scheduler = new ThreadPoolTaskScheduler();
|
||||
this.scheduler.initialize();
|
||||
}
|
||||
}
|
||||
|
143
buisnesslogic/src/main/java/com/plannaplan/services/ExchangeService.java
Executable file
143
buisnesslogic/src/main/java/com/plannaplan/services/ExchangeService.java
Executable file
@ -0,0 +1,143 @@
|
||||
package com.plannaplan.services;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import com.plannaplan.entities.Assignment;
|
||||
import com.plannaplan.entities.Commision;
|
||||
import com.plannaplan.entities.Exchange;
|
||||
import com.plannaplan.entities.Groups;
|
||||
import com.plannaplan.entities.User;
|
||||
import com.plannaplan.models.EmailExchangesData;
|
||||
import com.plannaplan.models.MatchData;
|
||||
import com.plannaplan.repositories.ExchangeRepository;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Service
|
||||
public class ExchangeService {
|
||||
|
||||
@Autowired
|
||||
private ExchangeRepository repo;
|
||||
|
||||
@Autowired
|
||||
private AssignmentService assignmentService;
|
||||
|
||||
@Autowired
|
||||
private UserService userService;
|
||||
|
||||
@Autowired
|
||||
private EmailService emailService;
|
||||
|
||||
/**
|
||||
* @param exchange Instance to save in database
|
||||
* @return Exchange Instance contains database id
|
||||
*/
|
||||
public Exchange save(Exchange exchange) {
|
||||
return this.repo.save(exchange);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param id Id of exchange in database
|
||||
* @return Optional Exchange if found
|
||||
*/
|
||||
public Optional<Exchange> getById(Long id) {
|
||||
return this.repo.findById(id);
|
||||
}
|
||||
|
||||
public List<Exchange> getAllExchanges() {
|
||||
return this.repo.findAll();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param id Id of user
|
||||
* @return List of exchanges that belong to user
|
||||
*/
|
||||
public List<Exchange> getByUserId(Long id) {
|
||||
return this.repo.getByUserId(id);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param entity Exchange entity which we would like to delete
|
||||
*/
|
||||
public void deleteExchange(Exchange entity) {
|
||||
this.repo.delete(entity);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param assignment Assignment to trade for
|
||||
* @param group Desired group
|
||||
* @return Optional with Exchange if exist
|
||||
*/
|
||||
public Optional<Exchange> checkForExchange(Assignment assignment, Groups group) {
|
||||
return this.repo.checkForExchange(assignment, group);
|
||||
}
|
||||
|
||||
public void performExchange() {
|
||||
final List<MatchData> matchData = this.getMatches();
|
||||
final List<Long> performedAssignmentExchanges = new ArrayList<>();
|
||||
final EmailExchangesData emailData = new EmailExchangesData();
|
||||
final List<Exchange> exchangesToDelete = new ArrayList<>();
|
||||
|
||||
matchData.forEach(m -> {
|
||||
final Assignment assignmentOne = m.getAssignmentOne();
|
||||
final Assignment assignmentTwo = m.getAssignmentTwo();
|
||||
|
||||
final Exchange exchange1 = m.getExchangeOne();
|
||||
final Exchange exchange2 = m.getExchangeTwo();
|
||||
|
||||
if (!(performedAssignmentExchanges.contains(assignmentOne.getId())
|
||||
|| performedAssignmentExchanges.contains(assignmentTwo.getId()))) {
|
||||
final Commision commisionOne = assignmentOne.getCommision();
|
||||
final User userOne = commisionOne.getCommisionOwner();
|
||||
final Commision commisionTwo = assignmentTwo.getCommision();
|
||||
final User userTwo = commisionTwo.getCommisionOwner();
|
||||
|
||||
assignmentOne.setCommision(commisionTwo);
|
||||
assignmentTwo.setCommision(commisionOne);
|
||||
|
||||
userOne.removeGroup(assignmentOne.getGroup().getId());
|
||||
userTwo.removeGroup(assignmentTwo.getGroup().getId());
|
||||
|
||||
userOne.claimGroup(assignmentTwo.getGroup());
|
||||
userTwo.claimGroup(assignmentOne.getGroup());
|
||||
|
||||
this.assignmentService.save(assignmentOne);
|
||||
this.assignmentService.save(assignmentTwo);
|
||||
|
||||
this.userService.save(userOne);
|
||||
this.userService.save(userTwo);
|
||||
|
||||
performedAssignmentExchanges.add(assignmentOne.getId());
|
||||
performedAssignmentExchanges.add(assignmentTwo.getId());
|
||||
|
||||
emailData.addExchange(exchange1.getOwnedAssignment().getCommision().getCommisionOwner(), exchange1);
|
||||
emailData.addExchange(exchange2.getOwnedAssignment().getCommision().getCommisionOwner(), exchange2);
|
||||
}
|
||||
|
||||
exchangesToDelete.add(exchange1);
|
||||
exchangesToDelete.add(exchange2);
|
||||
});
|
||||
this.emailService.sendExchangesResults(emailData);
|
||||
this.repo.deleteAll(exchangesToDelete);
|
||||
}
|
||||
|
||||
public List<MatchData> getMatches() {
|
||||
final List<MatchData> matches = this.repo.getMatches().stream().map(m -> {
|
||||
final Exchange exchangeOne = (Exchange) m[0];
|
||||
final Exchange exchangeTwo = (Exchange) m[1];
|
||||
return new MatchData(exchangeOne, exchangeTwo);
|
||||
}).collect(Collectors.toList());
|
||||
|
||||
final Set<MatchData> uniqData = new HashSet<>(matches);
|
||||
final List<MatchData> matchDataListSorted = uniqData.stream().sorted((m1, m2) -> -1 * m1.compare(m2))
|
||||
.collect(Collectors.toList());
|
||||
|
||||
return matchDataListSorted;
|
||||
}
|
||||
}
|
@ -7,6 +7,7 @@ import java.util.Optional;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.function.Function;
|
||||
|
||||
import com.plannaplan.entities.Assignment;
|
||||
import com.plannaplan.entities.Groups;
|
||||
import com.plannaplan.repositories.GroupRepository;
|
||||
|
||||
@ -30,6 +31,10 @@ public class GroupService {
|
||||
return this.repo.find(time, room, capacity);
|
||||
}
|
||||
|
||||
public Optional<Groups> find(Integer zajCykId, Integer nrGr) {
|
||||
return this.repo.find(zajCykId, nrGr);
|
||||
}
|
||||
|
||||
public List<Groups> getGroupsByCourse(Long id) {
|
||||
return this.repo.getByCourse(id);
|
||||
}
|
||||
@ -60,11 +65,21 @@ public class GroupService {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param assignments list of assignments you want to get taken places ammount
|
||||
* @return HashMap of Long to Integer where Long is group id and Integer is how
|
||||
* many places in gorup is already taken
|
||||
*/
|
||||
public HashMap<Long, Integer> getTakenPlacesOfAssignments(List<Assignment> assignments) {
|
||||
return getTakenPlaces(assignments.stream().map(Assignment::getGroup).collect(Collectors.toList()));
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @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
|
||||
* @return HashMap of Long to 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<>();
|
||||
|
@ -3,9 +3,11 @@ package com.plannaplan.services;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import com.plannaplan.entities.User;
|
||||
import com.plannaplan.exceptions.UserNotFoundException;
|
||||
import com.plannaplan.models.UserApiResponse;
|
||||
import com.plannaplan.repositories.UserRepository;
|
||||
import com.plannaplan.types.UserRoles;
|
||||
|
||||
@ -20,17 +22,40 @@ public class UserService {
|
||||
@Autowired
|
||||
private UserRepository repo;
|
||||
|
||||
@Autowired
|
||||
private UsosApiService service;
|
||||
|
||||
public UserService() {
|
||||
super();
|
||||
}
|
||||
|
||||
/**
|
||||
* checks if user exist and return him or creates new one with student role
|
||||
* otherwise
|
||||
*
|
||||
* @param email user email in usos
|
||||
* @param usosId user id in usos
|
||||
* @return user entity instace containing changes saved in database
|
||||
*/
|
||||
public User checkForUser(String email, String usosId) {
|
||||
return this.checkForUser(email, usosId, UserRoles.STUDENT);
|
||||
}
|
||||
|
||||
/**
|
||||
* checks if user exist and creates new one if doesn't
|
||||
*
|
||||
* @param email user email in usos
|
||||
* @param usosId user id in usos
|
||||
* @param roleIfNotExist role to be set in case user is not in database yet
|
||||
* @return user entity instace containing changes saved in database
|
||||
*/
|
||||
public User checkForUser(String email, String usosId, UserRoles roleIfNotExist) {
|
||||
if (usosId == null) {
|
||||
Optional<User> user = this.repo.getByAuthority(email.replace("\n", "").trim());
|
||||
Optional<User> user = this.repo.getByEmail(email.replace("\n", "").trim());
|
||||
if (user.isPresent()) {
|
||||
return user.get();
|
||||
} else {
|
||||
final User newUser = new User(null, null, email.replace("\n", "").trim(), UserRoles.STUDENT);
|
||||
final User newUser = new User(null, null, email.replace("\n", "").trim(), roleIfNotExist);
|
||||
return this.repo.save(newUser);
|
||||
}
|
||||
} else {
|
||||
@ -38,14 +63,26 @@ public class UserService {
|
||||
if (user.isPresent()) {
|
||||
return user.get();
|
||||
} else {
|
||||
final User newUser = new User(null, null, email.replace("\n", "").trim(), usosId, UserRoles.STUDENT);
|
||||
final User newUser = new User(null, null, email.replace("\n", "").trim(), usosId, roleIfNotExist);
|
||||
return this.repo.save(newUser);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* generates token for user and if user don't have name in database it will
|
||||
* attemp to obtain these from usos api and saves changes in database
|
||||
*
|
||||
* @param authority user we want to login
|
||||
* @return user with changed values after save in db
|
||||
* @throws UserNotFoundException throwed if user doesn't exist
|
||||
*/
|
||||
public User login(User authority) throws UserNotFoundException {
|
||||
final String token = UUID.randomUUID().toString();
|
||||
if ((authority.getName() == null || authority.getSurname() == null) && authority.getUsosId() != null) {
|
||||
final UserApiResponse resp = this.service.getUserData(authority.getUsosId());
|
||||
authority.updateWithUsosData(resp);
|
||||
}
|
||||
try {
|
||||
authority.setToken(token);
|
||||
this.repo.save(authority);
|
||||
@ -55,20 +92,48 @@ public class UserService {
|
||||
return authority;
|
||||
}
|
||||
|
||||
/**
|
||||
* sacves user to databse and return instatnce with id
|
||||
*
|
||||
* @param user to be saved
|
||||
* @return instatnce with bd id
|
||||
*/
|
||||
public User save(User user) {
|
||||
return this.repo.save(user);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param email of user to be find
|
||||
* @return user with given mail
|
||||
* @throws UserNotFoundException throwed if user doesn't exist
|
||||
*/
|
||||
public User getUserByEmail(String email) throws UserNotFoundException {
|
||||
return this.repo.getByAuthority(email.replace("\n", "").trim())
|
||||
return this.repo.getByEmail(email.replace("\n", "").trim())
|
||||
.orElseThrow(() -> new UserNotFoundException("Cannot find user with given authority"));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* return user by given authority
|
||||
*
|
||||
* @param authority user usosId or email
|
||||
* @return optional with user if found
|
||||
*/
|
||||
public Optional<User> getByAuthority(String authority) {
|
||||
return this.repo.getByAuthority(authority);
|
||||
}
|
||||
|
||||
public Optional<User> getByToken(String token) {
|
||||
return this.repo.getByToken(token);
|
||||
}
|
||||
|
||||
/**
|
||||
* search for user with given query
|
||||
*
|
||||
* @param query string that will be matched to users name and surname
|
||||
* @return list opf results
|
||||
*/
|
||||
public List<User> searchForStudents(String query) {
|
||||
return this.repo.searchForUsers(query, UserRoles.STUDENT);
|
||||
}
|
||||
@ -85,4 +150,23 @@ public class UserService {
|
||||
return this.repo.getByRefreshToken(refreshToken);
|
||||
}
|
||||
|
||||
public boolean adminExists() {
|
||||
return this.repo.getAllByRole(UserRoles.ADMIN).size() > 0;
|
||||
}
|
||||
|
||||
public void saveAll(List<User> users) {
|
||||
this.repo.saveAll(users);
|
||||
}
|
||||
|
||||
/**
|
||||
* get students sorted by their ranking
|
||||
*
|
||||
* @return list of students
|
||||
*/
|
||||
public List<User> getStudentsSortedByRanking() {
|
||||
return this.repo.getAllByRole(UserRoles.STUDENT).stream().sorted((u1, u2) -> {
|
||||
return -1 * u1.getRanking().compareTo(u2.getRanking());
|
||||
}).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
}
|
75
buisnesslogic/src/main/java/com/plannaplan/services/UsosApiService.java
Executable file
75
buisnesslogic/src/main/java/com/plannaplan/services/UsosApiService.java
Executable file
@ -0,0 +1,75 @@
|
||||
package com.plannaplan.services;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.fasterxml.jackson.core.type.TypeReference;
|
||||
|
||||
import com.github.scribejava.core.builder.ServiceBuilder;
|
||||
import com.github.scribejava.core.model.OAuth1AccessToken;
|
||||
import com.github.scribejava.core.model.OAuthRequest;
|
||||
import com.github.scribejava.core.model.Response;
|
||||
import com.github.scribejava.core.model.Verb;
|
||||
import com.github.scribejava.core.oauth.OAuth10aService;
|
||||
import com.plannaplan.api.UsosOauth1Service;
|
||||
import com.plannaplan.models.UserApiResponse;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* service to call usos api endpoints
|
||||
*/
|
||||
@Service
|
||||
public class UsosApiService {
|
||||
|
||||
private static final String NAME_FIELD = "first_name";
|
||||
private static final String SURNAME_FIELD = "last_name";
|
||||
|
||||
@Value("${plannaplan.apiurl}")
|
||||
private String apiUrl;
|
||||
|
||||
@Value("${plannaplan.apikey}")
|
||||
private String apikey;
|
||||
|
||||
@Value("${plannaplan.apisecret}")
|
||||
private String apisecret;
|
||||
|
||||
public UsosApiService() {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* /services/users/user
|
||||
*
|
||||
* @param usosId user id in usos
|
||||
* @return UserApiResponse modle contatining desired values
|
||||
*/
|
||||
public UserApiResponse getUserData(String usosId) {
|
||||
final UserApiResponse apiResponse = new UserApiResponse();
|
||||
try {
|
||||
final OAuth10aService service = new ServiceBuilder(apikey).apiSecret(apisecret)
|
||||
.build(UsosOauth1Service.instance());
|
||||
|
||||
final OAuthRequest request = new OAuthRequest(Verb.GET, apiUrl + "/services/users/user?user_id=" + usosId);
|
||||
service.signRequest(new OAuth1AccessToken("", ""), request);
|
||||
try (Response response = service.execute(request)) {
|
||||
final String json = response.getBody();
|
||||
if (!json.equals("null")){
|
||||
final ObjectMapper mapper = new ObjectMapper();
|
||||
Map<String, String> map = mapper.readValue(json, new TypeReference<Map<String, String>>() {
|
||||
});
|
||||
apiResponse.setName(map.get(NAME_FIELD));
|
||||
apiResponse.setSurname(map.get(SURNAME_FIELD));
|
||||
}
|
||||
}
|
||||
} catch (IOException | InterruptedException | ExecutionException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
return apiResponse;
|
||||
}
|
||||
|
||||
}
|
@ -1,9 +1,23 @@
|
||||
package com.plannaplan.types;
|
||||
|
||||
/**
|
||||
* GroupType contains types: LECTURE, CLASS
|
||||
* GroupType contains types: LECTURE, CLASS, LAB, SEMINAR, CONSERVATORY, PRATICE
|
||||
*/
|
||||
|
||||
public enum GroupType {
|
||||
LECTURE, CLASS
|
||||
LECTURE("Wykład"), CLASS("Ćwiczenia"), LAB("Laboratorium"), SEMINAR("Seminarium"),CONSERVATORY("Konwersatorium"), PRATICE("Praktyka");
|
||||
|
||||
public final String type;
|
||||
private GroupType(String type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public final static GroupType getType(String type) {
|
||||
for (GroupType d : values()) {
|
||||
if (d.type.equals(type)) {
|
||||
return d;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
@ -10,12 +10,11 @@ import org.junit.Test;
|
||||
|
||||
public class FileReaderTest {
|
||||
@Test
|
||||
public void shoulReturnNull() {
|
||||
public void shouldNotReturnNull() {
|
||||
final InputStream inputStream = getClass().getClassLoader().getResourceAsStream("Zajecia.xlsx");
|
||||
final FileReader r = new FileReader(inputStream);
|
||||
final FileData d = r.read();
|
||||
assertTrue(d.getRows().next().getCell(0).toString().equals("1.0"));
|
||||
assertTrue(d.getKeys().size() == 22);
|
||||
assertTrue(d.getKeys().size() == 12);
|
||||
assertTrue(d != null);
|
||||
}
|
||||
}
|
@ -138,4 +138,52 @@ public class AppConfigTest {
|
||||
assertTrue(config.getCurrentState() == AppState.SECOND_TOUR);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldReturnFirstStartDatesCorns() {
|
||||
final Date firtstTourStart = Date.valueOf("2020-11-12");
|
||||
final Date firtstTourEnd = Date.valueOf("2020-11-13");
|
||||
final Date secondTourStart = Date.valueOf("2020-11-14");
|
||||
final Date secondTourEnd = Date.valueOf("2020-11-15");
|
||||
|
||||
final AppConfig config = new AppConfig(new TourData(firtstTourStart, firtstTourEnd),
|
||||
new TourData(secondTourStart, secondTourEnd));
|
||||
assertTrue(config.getFirstTourStartCron().getExpression().equals("0 0 0 12 11 ?"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldReturnSecondStartDatesCorns() {
|
||||
final Date firtstTourStart = Date.valueOf("2020-11-12");
|
||||
final Date firtstTourEnd = Date.valueOf("2020-11-13");
|
||||
final Date secondTourStart = Date.valueOf("2020-11-14");
|
||||
final Date secondTourEnd = Date.valueOf("2020-11-15");
|
||||
|
||||
final AppConfig config = new AppConfig(new TourData(firtstTourStart, firtstTourEnd),
|
||||
new TourData(secondTourStart, secondTourEnd));
|
||||
assertTrue(config.getSecondTourStartCron().getExpression().equals("0 0 0 14 11 ?"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldReturnFirstEndDatesCorns() {
|
||||
final Date firtstTourStart = Date.valueOf("2020-11-12");
|
||||
final Date firtstTourEnd = Date.valueOf("2020-11-13");
|
||||
final Date secondTourStart = Date.valueOf("2020-11-14");
|
||||
final Date secondTourEnd = Date.valueOf("2020-11-15");
|
||||
|
||||
final AppConfig config = new AppConfig(new TourData(firtstTourStart, firtstTourEnd),
|
||||
new TourData(secondTourStart, secondTourEnd));
|
||||
assertTrue(config.getFirstTourEndCron().getExpression().equals("0 0 0 13 11 ?"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldReturnSecondEndDatesCorns() {
|
||||
final Date firtstTourStart = Date.valueOf("2020-11-12");
|
||||
final Date firtstTourEnd = Date.valueOf("2020-11-13");
|
||||
final Date secondTourStart = Date.valueOf("2020-11-14");
|
||||
final Date secondTourEnd = Date.valueOf("2020-11-15");
|
||||
|
||||
final AppConfig config = new AppConfig(new TourData(firtstTourStart, firtstTourEnd),
|
||||
new TourData(secondTourStart, secondTourEnd));
|
||||
assertTrue(config.getSecondTourEndCron().getExpression().equals("0 0 0 15 11 ?"));
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,69 @@
|
||||
package com.plannaplan.repositories;
|
||||
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.plannaplan.entities.Assignment;
|
||||
import com.plannaplan.entities.Commision;
|
||||
import com.plannaplan.entities.Exchange;
|
||||
import com.plannaplan.entities.Groups;
|
||||
import com.plannaplan.entities.User;
|
||||
import com.plannaplan.services.AssignmentService;
|
||||
import com.plannaplan.services.GroupService;
|
||||
import com.plannaplan.services.UserService;
|
||||
import com.plannaplan.types.UserRoles;
|
||||
import com.plannaplan.types.WeekDay;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.test.annotation.DirtiesContext;
|
||||
import org.springframework.test.annotation.DirtiesContext.MethodMode;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.springframework.test.context.junit4.SpringRunner;
|
||||
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest
|
||||
@ContextConfiguration
|
||||
public class ExchangeRepositoryTest{
|
||||
@Autowired
|
||||
private ExchangeRepository exchangeRepository;
|
||||
|
||||
@Autowired
|
||||
private AssignmentService assignmentService;
|
||||
|
||||
@Autowired
|
||||
private GroupService groupService;
|
||||
|
||||
@Autowired
|
||||
private UserService userService;
|
||||
|
||||
@Autowired
|
||||
private CommisionRepository commisionRepository;
|
||||
|
||||
@Test
|
||||
@DirtiesContext(methodMode = MethodMode.BEFORE_METHOD)
|
||||
public void shouldReturnMatches() {
|
||||
final User user1 = this.userService.save(
|
||||
new User(null, null, "shouldReturnMatches@ExchangeRepository.test", "123454", UserRoles.STUDENT, 451));
|
||||
final Groups group1 = this.groupService.save(new Groups(123, "A2-3", null, 430, WeekDay.MONDAY, null));
|
||||
final Commision commision1 = this.commisionRepository.save(new Commision(user1));
|
||||
final User user2 = this.userService.save(
|
||||
new User(null, null, "shouldReturnMatches@ExchangeRepository.test", "123454", UserRoles.STUDENT, 451));
|
||||
final Groups group2 = this.groupService.save(new Groups(123, "A2-3", null, 430, WeekDay.MONDAY, null));
|
||||
final Commision commision2 = this.commisionRepository.save(new Commision(user2));
|
||||
final Assignment assignmentUser1 = this.assignmentService.save(new Assignment(group1, commision1));
|
||||
final Assignment assignmentUser2 = this.assignmentService.save(new Assignment(group2, commision2));
|
||||
|
||||
this.assignmentService.callAcceptAlgorythm();
|
||||
|
||||
this.exchangeRepository.save(new Exchange(assignmentUser1, group2));
|
||||
this.exchangeRepository.save(new Exchange(assignmentUser2, group1));
|
||||
|
||||
final List<Object[]> exchangeRepoMatches = this.exchangeRepository.getMatches();
|
||||
assertTrue(exchangeRepoMatches.size() == 2);
|
||||
}
|
||||
}
|
@ -0,0 +1,52 @@
|
||||
package com.plannaplan.repositories;
|
||||
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
import com.plannaplan.entities.User;
|
||||
import com.plannaplan.services.UserService;
|
||||
import com.plannaplan.types.UserRoles;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.springframework.test.context.junit4.SpringRunner;
|
||||
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest
|
||||
@ContextConfiguration
|
||||
public class UserRepositoryTest {
|
||||
|
||||
@Autowired
|
||||
private UserService userService;
|
||||
|
||||
@Autowired
|
||||
private UserRepository userRepository;
|
||||
|
||||
@Test
|
||||
public void shouldReturnByAuthorityWithGivenEmail(){
|
||||
final String email = "shouldReturnByAuthorityWithGivenEmail@UserRepository.Test";
|
||||
final String usosId = "45678";
|
||||
final User user = this.userService.save(new User("shouldReturnByAuthority", "WithGivenEmail", email, usosId, UserRoles.TEST_USER));
|
||||
|
||||
final Optional<User> response = this.userRepository.getByAuthority(email);
|
||||
assertTrue(response.get().getEmail().equals(email));
|
||||
assertTrue(response.get().getUsosId().equals(usosId));
|
||||
assertTrue(response.get().getId().equals(user.getId()));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldReturnByAuthorityWithUsosId(){
|
||||
final String email = "shouldReturnByAuthorityWithUsosId@UserRepository.Test";
|
||||
final String usosId = "45678";
|
||||
final User user = this.userService.save(new User("shouldReturnByAuthority", "WithGivenEmail", email, usosId, UserRoles.TEST_USER));
|
||||
|
||||
final Optional<User> response = this.userRepository.getByAuthority(usosId);
|
||||
assertTrue(response.get().getEmail().equals(email));
|
||||
assertTrue(response.get().getUsosId().equals(usosId));
|
||||
assertTrue(response.get().getId().equals(user.getId()));
|
||||
}
|
||||
}
|
@ -2,18 +2,27 @@ package com.plannaplan.services;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.test.annotation.DirtiesContext;
|
||||
import org.springframework.test.annotation.DirtiesContext.MethodMode;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.springframework.test.context.junit4.SpringRunner;
|
||||
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
import java.util.UUID;
|
||||
import java.util.stream.IntStream;
|
||||
|
||||
import com.plannaplan.entities.Assignment;
|
||||
import com.plannaplan.entities.Commision;
|
||||
import com.plannaplan.entities.Groups;
|
||||
import com.plannaplan.entities.User;
|
||||
import com.plannaplan.types.UserRoles;
|
||||
import com.plannaplan.types.WeekDay;
|
||||
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
|
||||
import org.junit.runner.RunWith;
|
||||
@ -29,6 +38,8 @@ public class AssignmentServiceTest {
|
||||
private CommisionService comServie;
|
||||
@Autowired
|
||||
private UserService userService;
|
||||
@Autowired
|
||||
private GroupService groupService;
|
||||
|
||||
@Test
|
||||
public void shouldSaveAssignment() {
|
||||
@ -56,6 +67,70 @@ public class AssignmentServiceTest {
|
||||
assertTrue("Returned list size should be 1", response.size() == 1);
|
||||
}
|
||||
|
||||
@Test
|
||||
@Ignore
|
||||
@DirtiesContext(methodMode = MethodMode.BEFORE_METHOD)
|
||||
public void shouldPerformAcceptAlgorythm() {
|
||||
final Random generator = new Random();
|
||||
|
||||
final List<Groups> groups = new ArrayList<>();
|
||||
|
||||
IntStream.range(0, 418).forEach(i -> {
|
||||
groups.add(this.groupService.save(new Groups(generator.nextInt(80) + 20, null, null,
|
||||
generator.nextInt(9) * 30 + 9 * 30, WeekDay.getDay(generator.nextInt(5)), null)));
|
||||
});
|
||||
|
||||
IntStream.range(0, 1700).forEach(i -> {
|
||||
final User user = this.userService.save(new User(null, null,
|
||||
"shouldPerformAcceptAlgorythm-" + UUID.randomUUID().toString() + "@AssignmentService.test", null,
|
||||
UserRoles.STUDENT, generator.nextInt(400) + 100));
|
||||
final Commision com = this.comServie.save(new Commision(user));
|
||||
IntStream.range(0, 5).forEach(j -> {
|
||||
this.service.save(new Assignment(groups.get(generator.nextInt(groups.size())), com));
|
||||
});
|
||||
});
|
||||
this.service.callAcceptAlgorythm();
|
||||
}
|
||||
|
||||
/**
|
||||
* This test will also sand a mail to users as a side effect. U can check them
|
||||
* in mailcater
|
||||
*/
|
||||
@Test
|
||||
@DirtiesContext(methodMode = MethodMode.BEFORE_METHOD)
|
||||
public void shouldNotAcceptForOnePerson() {
|
||||
final Random generator = new Random();
|
||||
final Groups group = this.groupService.save(new Groups(5, null, null, 840, WeekDay.MONDAY, null));
|
||||
|
||||
IntStream.range(0, 6).forEach(i -> {
|
||||
final User user = this.userService.save(new User(null, null,
|
||||
"shouldNotAcceptForOnePerson-" + UUID.randomUUID().toString() + "@AssignmentService.test", null,
|
||||
UserRoles.STUDENT, generator.nextInt(400) + 100));
|
||||
|
||||
final Commision com = this.comServie.save(new Commision(user));
|
||||
|
||||
this.service.save(new Assignment(group, com));
|
||||
});
|
||||
|
||||
this.service.callAcceptAlgorythm();
|
||||
|
||||
final List<User> users = this.userService.getStudentsSortedByRanking();
|
||||
final User loser = users.get(users.size() - 1);
|
||||
|
||||
assertTrue(loser.getStudentRegisteredGrups().size() == 0);
|
||||
|
||||
users.forEach(u -> {
|
||||
final Commision com = this.comServie.getNewestCommision(u).get();
|
||||
final List<Assignment> assignments = com.getAssignments();
|
||||
if (u.getId() == loser.getId()) {
|
||||
assertTrue(!assignments.get(0).isAccepted());
|
||||
} else {
|
||||
assertTrue(assignments.get(0).isAccepted());
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
private void addAssignmentToCommision(Commision com) {
|
||||
Assignment a = new Assignment(null, com);
|
||||
this.service.save(a);
|
||||
|
@ -2,16 +2,23 @@ package com.plannaplan.services;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.test.annotation.DirtiesContext;
|
||||
import org.springframework.test.annotation.DirtiesContext.MethodMode;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.springframework.test.context.junit4.SpringRunner;
|
||||
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.lang.reflect.Field;
|
||||
import java.sql.Date;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.concurrent.ScheduledFuture;
|
||||
|
||||
import com.plannaplan.TestApplication;
|
||||
import com.plannaplan.entities.AppConfig;
|
||||
import com.plannaplan.entities.Groups;
|
||||
import com.plannaplan.models.ConfigData;
|
||||
import com.plannaplan.models.TourData;
|
||||
import com.plannaplan.repositories.AppConfigRepository;
|
||||
@ -24,6 +31,9 @@ import org.junit.runner.RunWith;
|
||||
@ContextConfiguration
|
||||
public class ConfiguratorServiceTest {
|
||||
|
||||
private final static String BEFORE_UPDATE_FILE = "ZajeciaBeforeUpdate.xlsx";
|
||||
private final static String AFTER_UPDATE_FILE = "ZajeciaAfterUpdate.xlsx";
|
||||
|
||||
@Autowired
|
||||
private ConfiguratorService configuratorService;
|
||||
|
||||
@ -39,6 +49,9 @@ public class ConfiguratorServiceTest {
|
||||
@Autowired
|
||||
private AppConfigRepository appConfigRepo;
|
||||
|
||||
@Autowired
|
||||
private EventService eventService;
|
||||
|
||||
@Test
|
||||
public void shouldImportDataToDataBase() {
|
||||
final InputStream inputStream = getClass().getClassLoader()
|
||||
@ -57,6 +70,31 @@ public class ConfiguratorServiceTest {
|
||||
assertTrue(courses_ammount > 0 && groups_ammount > 0 && lecturers_ammount > 0);
|
||||
}
|
||||
|
||||
@Test
|
||||
@DirtiesContext(methodMode = MethodMode.BEFORE_METHOD)
|
||||
public void shouldUpdatePreviousImport() {
|
||||
final InputStream inputStream = getClass().getClassLoader()
|
||||
.getResourceAsStream(ConfiguratorServiceTest.BEFORE_UPDATE_FILE);
|
||||
this.configuratorService.importCoursesStream(inputStream);
|
||||
int groups_ammount = this.groupService.getGroupsAmmount();
|
||||
|
||||
assertTrue(groups_ammount == 2);
|
||||
|
||||
final InputStream inputStream2 = getClass().getClassLoader()
|
||||
.getResourceAsStream(ConfiguratorServiceTest.AFTER_UPDATE_FILE);
|
||||
this.configuratorService.importCoursesStream(inputStream2);
|
||||
int groups_ammount2 = this.groupService.getGroupsAmmount();
|
||||
|
||||
Optional<Groups> newGroup = this.groupService.find(456458, 3);
|
||||
Optional<Groups> updateGroup = this.groupService.find(456457, 2);
|
||||
|
||||
assertTrue(groups_ammount2 == 3);
|
||||
assertTrue(newGroup.isPresent());
|
||||
assertTrue(updateGroup.get().getLecturer().getSurname().equals("Murawski"));
|
||||
assertTrue(updateGroup.get().getLecturer().getName().equals("Roman"));
|
||||
assertTrue(updateGroup.get().getLecturer().getTitle().equals("prof. dr hab."));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldRetrunNewestConfig() throws InterruptedException {
|
||||
final Date dateToCheck = new Date(System.currentTimeMillis());
|
||||
@ -69,4 +107,28 @@ public class ConfiguratorServiceTest {
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
@DirtiesContext(methodMode = MethodMode.BEFORE_METHOD)
|
||||
public void shlouldScheduleTaskWhenSetTourDate()
|
||||
throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
|
||||
final InputStream inputStream = getClass().getClassLoader()
|
||||
.getResourceAsStream(TestApplication.TEST_CONFIG_FILE);
|
||||
final ConfigData data = new ConfigData(
|
||||
new TourData(new Date(System.currentTimeMillis()), new Date(System.currentTimeMillis() + 86400000)),
|
||||
new TourData(new Date(System.currentTimeMillis() + 86400000),
|
||||
new Date(System.currentTimeMillis() + 2 * 86400000)),
|
||||
inputStream);
|
||||
this.configuratorService.config(data);
|
||||
|
||||
final Field reader = EventService.class.getDeclaredField("jobsMap");
|
||||
reader.setAccessible(true);
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
final Map<Integer, ScheduledFuture<?>> map = (Map<Integer, ScheduledFuture<?>>) reader.get(this.eventService);
|
||||
|
||||
assertTrue(map.size() == 2);
|
||||
assertTrue(map.get(EventService.FIRST_TOUR_SCHEDULE).isDone() == false);
|
||||
assertTrue(map.get(EventService.SECOND_TOUR_SCHEDULE).isDone() == false);
|
||||
}
|
||||
|
||||
}
|
||||
|
208
buisnesslogic/src/test/java/com/plannaplan/services/ExchangeServiceTest.java
Executable file
208
buisnesslogic/src/test/java/com/plannaplan/services/ExchangeServiceTest.java
Executable file
@ -0,0 +1,208 @@
|
||||
package com.plannaplan.services;
|
||||
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import com.plannaplan.entities.Assignment;
|
||||
import com.plannaplan.entities.Commision;
|
||||
import com.plannaplan.entities.Exchange;
|
||||
import com.plannaplan.entities.Groups;
|
||||
import com.plannaplan.entities.User;
|
||||
import com.plannaplan.models.MatchData;
|
||||
import com.plannaplan.repositories.CommisionRepository;
|
||||
import com.plannaplan.types.UserRoles;
|
||||
import com.plannaplan.types.WeekDay;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.test.annotation.DirtiesContext;
|
||||
import org.springframework.test.annotation.DirtiesContext.MethodMode;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.springframework.test.context.junit4.SpringRunner;
|
||||
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest
|
||||
@ContextConfiguration
|
||||
public class ExchangeServiceTest {
|
||||
|
||||
@Autowired
|
||||
private AssignmentService assignmentService;
|
||||
|
||||
@Autowired
|
||||
private GroupService groupService;
|
||||
|
||||
@Autowired
|
||||
private UserService userService;
|
||||
|
||||
@Autowired
|
||||
private CommisionRepository commisionRepository;
|
||||
|
||||
@Autowired
|
||||
private ExchangeService exchangeService;
|
||||
|
||||
@Test
|
||||
@DirtiesContext(methodMode = MethodMode.BEFORE_METHOD)
|
||||
public void shouldReturnUniqMatches() {
|
||||
final User user1 = this.userService.save(
|
||||
new User(null, null, "shouldReturnMatches@ExchangeRepository.test", "123454", UserRoles.STUDENT, 451));
|
||||
final Groups group1 = this.groupService.save(new Groups(123, "A2-3", null, 430, WeekDay.MONDAY, null));
|
||||
final Commision commision1 = this.commisionRepository.save(new Commision(user1));
|
||||
final User user2 = this.userService.save(
|
||||
new User(null, null, "shouldReturnMatches@ExchangeRepository.test", "123454", UserRoles.STUDENT, 451));
|
||||
final Groups group2 = this.groupService.save(new Groups(123, "A2-3", null, 430, WeekDay.MONDAY, null));
|
||||
final Commision commision2 = this.commisionRepository.save(new Commision(user2));
|
||||
final Assignment assignmentUser1 = this.assignmentService.save(new Assignment(group1, commision1));
|
||||
final Assignment assignmentUser2 = this.assignmentService.save(new Assignment(group2, commision2));
|
||||
|
||||
this.assignmentService.callAcceptAlgorythm();
|
||||
|
||||
this.exchangeService.save(new Exchange(assignmentUser1, group2));
|
||||
this.exchangeService.save(new Exchange(assignmentUser2, group1));
|
||||
|
||||
final List<MatchData> uniqList = this.exchangeService.getMatches();
|
||||
assertTrue(uniqList.size() == 1);
|
||||
}
|
||||
|
||||
@Test
|
||||
@DirtiesContext(methodMode = MethodMode.BEFORE_METHOD)
|
||||
public void shouldPerformExchange() throws Exception{
|
||||
User user1 = this.userService.save(
|
||||
new User(null, null, "1shouldReturnMatches@ExchangeRepository.test", "123454", UserRoles.STUDENT, 451));
|
||||
final Long user1Id = user1.getId();
|
||||
final Groups group1 = this.groupService.save(new Groups(123, "A2-3", null, 430, WeekDay.MONDAY, null));
|
||||
final Commision commision1 = this.commisionRepository.save(new Commision(user1));
|
||||
|
||||
User user2 = this.userService.save(
|
||||
new User(null, null, "2shouldReturnMatches@ExchangeRepository.test", "123455", UserRoles.STUDENT, 452));
|
||||
final Long user2Id = user2.getId();
|
||||
final Groups group2 = this.groupService.save(new Groups(123, "A2-3", null, 430, WeekDay.THURSDAY, null));
|
||||
final Commision commision2 = this.commisionRepository.save(new Commision(user2));
|
||||
|
||||
User user3 = this.userService.save(
|
||||
new User(null, null, "3shouldReturnMatches@ExchangeRepository.test", "123456", UserRoles.STUDENT, 453));
|
||||
final Long user3Id = user3.getId();
|
||||
final Groups group3 = this.groupService.save(new Groups(123, "A2-3", null, 430, WeekDay.WEDNESDAY, null));
|
||||
final Commision commision3 = this.commisionRepository.save(new Commision(user3));
|
||||
|
||||
User user4 = this.userService.save(
|
||||
new User(null, null, "2shouldReturnMatches@ExchangeRepository.test", "123457", UserRoles.STUDENT, 455));
|
||||
final Long user4Id = user4.getId();
|
||||
final Groups group4 = this.groupService.save(new Groups(123, "A2-3", null, 430, WeekDay.FRIDAY, null));
|
||||
final Commision commision4 = this.commisionRepository.save(new Commision(user4));
|
||||
|
||||
final Assignment assignmentUser1 = this.assignmentService.save(new Assignment(group1, commision1));
|
||||
final Assignment assignmentUser2 = this.assignmentService.save(new Assignment(group2, commision2));
|
||||
final Assignment assignmentUser3 = this.assignmentService.save(new Assignment(group2, commision3));
|
||||
final Assignment assignmentUser4 = this.assignmentService.save(new Assignment(group4, commision4));
|
||||
|
||||
this.assignmentService.callAcceptAlgorythm();
|
||||
|
||||
this.exchangeService.save(new Exchange(assignmentUser1, group2));
|
||||
Thread.sleep(1000);
|
||||
this.exchangeService.save(new Exchange(assignmentUser2, group1));
|
||||
Thread.sleep(1000);
|
||||
this.exchangeService.save(new Exchange(assignmentUser3, group1));
|
||||
Thread.sleep(1000);
|
||||
this.exchangeService.save(new Exchange(assignmentUser4, group3));
|
||||
|
||||
this.exchangeService.performExchange();
|
||||
|
||||
user1 = this.userService.getById(user1Id).get();
|
||||
Thread.sleep(1000);
|
||||
user2 = this.userService.getById(user2Id).get();
|
||||
Thread.sleep(1000);
|
||||
user3 = this.userService.getById(user3Id).get();
|
||||
Thread.sleep(1000);
|
||||
user4 = this.userService.getById(user4Id).get();
|
||||
Thread.sleep(1000);
|
||||
|
||||
final List<Long> listGroupsOfUser1 = user1.getStudentRegisteredGrups().stream().map(Groups::getId)
|
||||
.collect(Collectors.toList());
|
||||
final List<Long> listGroupsOfUser2 = user2.getStudentRegisteredGrups().stream().map(Groups::getId)
|
||||
.collect(Collectors.toList());
|
||||
final List<Long> listGroupsOfUser3 = user3.getStudentRegisteredGrups().stream().map(Groups::getId)
|
||||
.collect(Collectors.toList());
|
||||
final List<Long> listGroupsOfUser4 = user4.getStudentRegisteredGrups().stream().map(Groups::getId)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
assertTrue(listGroupsOfUser1.contains(group2.getId()));
|
||||
assertTrue(listGroupsOfUser2.contains(group1.getId()));
|
||||
assertTrue(listGroupsOfUser3.contains(group2.getId()));
|
||||
assertTrue(listGroupsOfUser4.contains(group4.getId()));
|
||||
}
|
||||
|
||||
@Test
|
||||
@DirtiesContext(methodMode = MethodMode.BEFORE_METHOD)
|
||||
public void shouldRemoveOutDatedExchnages() throws Exception {
|
||||
User user1 = this.userService.save(
|
||||
new User(null, null, "1shouldReturnMatches@ExchangeRepository.test", "123454", UserRoles.STUDENT, 451));
|
||||
final Long user1Id = user1.getId();
|
||||
final Groups group1 = this.groupService.save(new Groups(123, "A2-3", null, 430, WeekDay.MONDAY, null));
|
||||
final Commision commision1 = this.commisionRepository.save(new Commision(user1));
|
||||
|
||||
User user2 = this.userService.save(
|
||||
new User(null, null, "2shouldReturnMatches@ExchangeRepository.test", "123455", UserRoles.STUDENT, 452));
|
||||
final Long user2Id = user2.getId();
|
||||
final Groups group2 = this.groupService.save(new Groups(123, "A2-3", null, 430, WeekDay.THURSDAY, null));
|
||||
final Commision commision2 = this.commisionRepository.save(new Commision(user2));
|
||||
|
||||
final Groups group3 = this.groupService.save(new Groups(123, "A2-3", null, 430, WeekDay.THURSDAY, null));
|
||||
final Groups group4 = this.groupService.save(new Groups(123, "A2-3", null, 430, WeekDay.THURSDAY, null));
|
||||
|
||||
final Assignment assignmentUser1 = this.assignmentService.save(new Assignment(group1, commision1));
|
||||
final Assignment assignmentUser2 = this.assignmentService.save(new Assignment(group2, commision2));
|
||||
|
||||
this.assignmentService.callAcceptAlgorythm();
|
||||
|
||||
this.exchangeService.save(new Exchange(assignmentUser1, group2));
|
||||
Thread.sleep(1000);
|
||||
this.exchangeService.save(new Exchange(assignmentUser2, group1));
|
||||
Thread.sleep(1000);
|
||||
this.exchangeService.save(new Exchange(assignmentUser1, group3));
|
||||
Thread.sleep(1000);
|
||||
this.exchangeService.save(new Exchange(assignmentUser1, group4));
|
||||
Thread.sleep(1000);
|
||||
|
||||
this.exchangeService.performExchange();
|
||||
|
||||
user1 = this.userService.getById(user1Id).get();
|
||||
user2 = this.userService.getById(user2Id).get();
|
||||
|
||||
final List<Long> listGroupsOfUser1 = user1.getStudentRegisteredGrups().stream().map(Groups::getId)
|
||||
.collect(Collectors.toList());
|
||||
final List<Long> listGroupsOfUser2 = user2.getStudentRegisteredGrups().stream().map(Groups::getId)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
assertTrue(listGroupsOfUser1.contains(group2.getId()));
|
||||
assertTrue(listGroupsOfUser2.contains(group1.getId()));
|
||||
assertTrue(this.exchangeService.getAllExchanges().size() == 2);
|
||||
}
|
||||
|
||||
@Test
|
||||
@DirtiesContext(methodMode = MethodMode.BEFORE_METHOD)
|
||||
public void shouldSortExchanges() throws Exception{
|
||||
final List<MatchData> listMatrix = new ArrayList<>();
|
||||
final Exchange exchange1 = new Exchange(null, null);
|
||||
Thread.sleep(1000);
|
||||
final Exchange exchange2 = new Exchange(null, null);
|
||||
Thread.sleep(1000);
|
||||
final Exchange exchange3 = new Exchange(null, null);
|
||||
Thread.sleep(1000);
|
||||
final Exchange exchange4 = new Exchange(null, null);
|
||||
Thread.sleep(1000);
|
||||
|
||||
listMatrix.add(new MatchData(exchange2, exchange4));
|
||||
listMatrix.add(new MatchData(exchange1, exchange3));
|
||||
|
||||
final List<MatchData> matchDataListSorted = listMatrix.stream().sorted((m1, m2) -> -1 * m1.compare(m2)).collect(Collectors.toList());
|
||||
|
||||
assertTrue(listMatrix.get(0).equals(matchDataListSorted.get(1)));
|
||||
assertTrue(listMatrix.get(1).equals(matchDataListSorted.get(0)));
|
||||
assertTrue(matchDataListSorted.size() == 2);
|
||||
}
|
||||
}
|
@ -2,6 +2,8 @@ package com.plannaplan.services;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.test.annotation.DirtiesContext;
|
||||
import org.springframework.test.annotation.DirtiesContext.MethodMode;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.springframework.test.context.junit4.SpringRunner;
|
||||
|
||||
@ -100,4 +102,20 @@ public class UserServiceTest {
|
||||
|
||||
assertTrue(user.getName() != "Tom");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldReturnAdminExists() {
|
||||
final String email = "shouldReturnAdminExists@UserService.test";
|
||||
this.userService.save(new User("AdminTom", "Smieszny", email, UserRoles.ADMIN));
|
||||
assertTrue(userService.adminExists());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
@DirtiesContext(methodMode = MethodMode.BEFORE_METHOD)
|
||||
public void shouldReturnNotAdminExists() {
|
||||
final String email = "shouldReturnNotAdminExists@UserService.test";
|
||||
this.userService.save(new User("StudentTom", "Smieszny", email, UserRoles.STUDENT));
|
||||
assertTrue(userService.adminExists() == false);
|
||||
}
|
||||
}
|
||||
|
38
buisnesslogic/src/test/java/com/plannaplan/services/UsosApiServiceTest.java
Executable file
38
buisnesslogic/src/test/java/com/plannaplan/services/UsosApiServiceTest.java
Executable file
@ -0,0 +1,38 @@
|
||||
package com.plannaplan.services;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.springframework.test.context.junit4.SpringRunner;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
|
||||
import com.plannaplan.models.UserApiResponse;
|
||||
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest
|
||||
@ContextConfiguration
|
||||
public class UsosApiServiceTest {
|
||||
|
||||
@Autowired
|
||||
private UsosApiService service;
|
||||
|
||||
@Test
|
||||
@Ignore
|
||||
public void shouldReturnPersonalData() throws IOException, InterruptedException, ExecutionException {
|
||||
|
||||
final UserApiResponse response = this.service.getUserData("499054");
|
||||
|
||||
assertTrue(response.getName().equals("Marcin"));
|
||||
assertTrue(response.getSurname().equals("Woźniak"));
|
||||
|
||||
}
|
||||
|
||||
}
|
Binary file not shown.
BIN
buisnesslogic/src/test/resources/ZajeciaAfterUpdate.xlsx
Executable file
BIN
buisnesslogic/src/test/resources/ZajeciaAfterUpdate.xlsx
Executable file
Binary file not shown.
BIN
buisnesslogic/src/test/resources/ZajeciaBeforeUpdate.xlsx
Executable file
BIN
buisnesslogic/src/test/resources/ZajeciaBeforeUpdate.xlsx
Executable file
Binary file not shown.
@ -14,5 +14,8 @@ spring.mail.properties.mail.smtp.auth=false
|
||||
spring.mail.properties.mail.smtp.starttls.enable=false
|
||||
|
||||
plannaplan.email = plannaplan.kontakt@gmail.com
|
||||
plannaplan.apiurl = https://usosapidemo.amu.edu.pl
|
||||
plannaplan.apikey=${PLANNAPLAN_CONSUMER_KEY}
|
||||
plannaplan.apisecret=${PLANNAPLAN_CONSUMER_SECRET}
|
||||
|
||||
server.port=1285
|
12
gettoken.py
12
gettoken.py
@ -1,3 +1,4 @@
|
||||
#!/usr/bin/python
|
||||
import webbrowser
|
||||
from http.server import BaseHTTPRequestHandler, HTTPServer, SimpleHTTPRequestHandler
|
||||
import urllib.parse as urlparse
|
||||
@ -5,10 +6,14 @@ from urllib.parse import parse_qs
|
||||
import sys
|
||||
import requests as r
|
||||
|
||||
no_browser = False
|
||||
API_ADDRESS = "http://localhost:1285"
|
||||
|
||||
if len(sys.argv) > 1 :
|
||||
if (sys.argv[1] == "no-browser" or sys.argv[2] == "no-browser"):
|
||||
no_browser = True
|
||||
else:
|
||||
API_ADDRESS = "http://" + sys.argv[1] + ":1285"
|
||||
else:
|
||||
API_ADDRESS = "http://localhost:1285"
|
||||
|
||||
PORT = 3000
|
||||
|
||||
@ -38,5 +43,6 @@ def wait_for_request(server_class=HTTPServer,
|
||||
url = 'https://cas.amu.edu.pl/cas/login?service=http://localhost:' + \
|
||||
str(PORT) + '&locale=pl'
|
||||
|
||||
webbrowser.open_new_tab(url)
|
||||
if no_browser == False:
|
||||
webbrowser.open_new_tab(url)
|
||||
wait_for_request()
|
||||
|
@ -2,6 +2,7 @@ package com.plannaplan;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.sql.Date;
|
||||
import java.util.Random;
|
||||
|
||||
import com.plannaplan.models.ConfigData;
|
||||
import com.plannaplan.models.TourData;
|
||||
@ -30,7 +31,7 @@ public class App {
|
||||
private ConfiguratorService contrl;
|
||||
|
||||
@Autowired
|
||||
UserService userService;
|
||||
private UserService userService;
|
||||
|
||||
@Value("${plannaplan.dev}")
|
||||
private boolean isDev;
|
||||
@ -52,10 +53,11 @@ public class App {
|
||||
System.out.println(Logo.getInitInfo(isDev));
|
||||
|
||||
if (this.isDev) {
|
||||
InputStream inputStream = getClass().getClassLoader().getResourceAsStream("Zajecia.xlsx");
|
||||
ConfigData data = new ConfigData(
|
||||
new TourData(new Date(System.currentTimeMillis()),
|
||||
new Date(System.currentTimeMillis() + 86400000)),
|
||||
final Random generator = new Random();
|
||||
final InputStream inputStream = getClass().getClassLoader().getResourceAsStream("Zajecia.xlsx");
|
||||
final ConfigData data = new ConfigData(
|
||||
new TourData(new Date(System.currentTimeMillis() - 86400000),
|
||||
new Date(System.currentTimeMillis())),
|
||||
new TourData(new Date(System.currentTimeMillis() + 86400000),
|
||||
new Date(System.currentTimeMillis() + 2 * 86400000)),
|
||||
inputStream);
|
||||
@ -65,6 +67,7 @@ public class App {
|
||||
newuser.setEmail("tommy@st.amu.edu.pl");
|
||||
newuser.setName("Tomek");
|
||||
newuser.setSurname("Atomek");
|
||||
newuser.setRanking(generator.nextInt(400) + 100);
|
||||
newuser.setRole(UserRoles.STUDENT);
|
||||
this.userService.save(newuser);
|
||||
|
||||
@ -72,6 +75,7 @@ public class App {
|
||||
newuser.setEmail("robercik@st.amu.edu.pl");
|
||||
newuser.setName("Robert");
|
||||
newuser.setSurname("Głowacki");
|
||||
newuser.setRanking(generator.nextInt(400) + 100);
|
||||
newuser.setRole(UserRoles.STUDENT);
|
||||
this.userService.save(newuser);
|
||||
|
||||
@ -79,6 +83,7 @@ public class App {
|
||||
newuser.setEmail("mewa@st.amu.edu.pl");
|
||||
newuser.setName("Poznanska");
|
||||
newuser.setSurname("Mewa");
|
||||
newuser.setRanking(generator.nextInt(400) + 100);
|
||||
newuser.setRole(UserRoles.STUDENT);
|
||||
this.userService.save(newuser);
|
||||
|
||||
@ -86,6 +91,7 @@ public class App {
|
||||
newuser.setEmail("tkul2@st.amu.edu.pl");
|
||||
newuser.setName("Tomasz");
|
||||
newuser.setSurname("Kula");
|
||||
newuser.setRanking(generator.nextInt(400) + 100);
|
||||
newuser.setRole(UserRoles.STUDENT);
|
||||
this.userService.save(newuser);
|
||||
|
||||
@ -93,6 +99,7 @@ public class App {
|
||||
newuser.setEmail("annana@st.amu.edu.pl");
|
||||
newuser.setName("Anna");
|
||||
newuser.setSurname("Na");
|
||||
newuser.setRanking(generator.nextInt(400) + 100);
|
||||
newuser.setRole(UserRoles.STUDENT);
|
||||
this.userService.save(newuser);
|
||||
|
||||
@ -100,6 +107,7 @@ public class App {
|
||||
newuser.setEmail("mnart@st.amu.edu.pl");
|
||||
newuser.setName("Marta");
|
||||
newuser.setSurname("Narta");
|
||||
newuser.setRanking(generator.nextInt(400) + 100);
|
||||
newuser.setRole(UserRoles.STUDENT);
|
||||
this.userService.save(newuser);
|
||||
|
||||
@ -107,6 +115,7 @@ public class App {
|
||||
newuser.setEmail("zmineniane@st.amu.edu.pl");
|
||||
newuser.setName("Tutaj");
|
||||
newuser.setSurname("Koncza");
|
||||
newuser.setRanking(generator.nextInt(400) + 100);
|
||||
newuser.setRole(UserRoles.STUDENT);
|
||||
this.userService.save(newuser);
|
||||
|
||||
@ -114,6 +123,7 @@ public class App {
|
||||
newuser.setEmail("mi@st.amu.edu.pl");
|
||||
newuser.setName("Mi");
|
||||
newuser.setSurname("Sie");
|
||||
newuser.setRanking(generator.nextInt(400) + 100);
|
||||
newuser.setRole(UserRoles.STUDENT);
|
||||
this.userService.save(newuser);
|
||||
|
||||
@ -121,11 +131,13 @@ public class App {
|
||||
newuser.setEmail("pms@st.amu.edu.pl");
|
||||
newuser.setName("Pomysly");
|
||||
newuser.setSurname("Sad");
|
||||
newuser.setRanking(generator.nextInt(400) + 100);
|
||||
newuser.setRole(UserRoles.STUDENT);
|
||||
this.userService.save(newuser);
|
||||
|
||||
newuser = new User();
|
||||
newuser.setEmail("iamnull@st.amu.edu.pl");
|
||||
newuser.setRanking(generator.nextInt(400) + 100);
|
||||
newuser.setRole(UserRoles.STUDENT);
|
||||
this.userService.save(newuser);
|
||||
}
|
||||
|
@ -36,6 +36,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
|
||||
import com.plannaplan.responses.mappers.AssignmentResponseMappers;
|
||||
import com.plannaplan.responses.models.AssignmentResponse;
|
||||
@ -127,7 +128,10 @@ public class CommisionController extends TokenBasedController {
|
||||
|
||||
if (com.isPresent()) {
|
||||
List<Assignment> respone = this.assignmentService.getCommisionAssignments(com.get());
|
||||
return new ResponseEntity<>(AssignmentResponseMappers.mapToResponse(respone), HttpStatus.OK);
|
||||
final HashMap<Long, Integer> ammounts = this.groupServcicxe
|
||||
.getTakenPlacesOfAssignments(respone);
|
||||
return new ResponseEntity<>(AssignmentResponseMappers.mapToResponse(respone, ammounts),
|
||||
HttpStatus.OK);
|
||||
}
|
||||
|
||||
return new ResponseEntity<>(new ArrayList<>(), HttpStatus.OK);
|
||||
|
@ -7,11 +7,20 @@ import java.io.IOException;
|
||||
import java.util.Date;
|
||||
|
||||
import com.plannaplan.App;
|
||||
import com.plannaplan.entities.User;
|
||||
import com.plannaplan.models.ConfigData;
|
||||
import com.plannaplan.models.TourData;
|
||||
import com.plannaplan.security.cas.CasUserIdentity;
|
||||
import com.plannaplan.security.cas.CasValidationExcepiton;
|
||||
import com.plannaplan.security.cas.CasValidator;
|
||||
import com.plannaplan.security.cas.CustomUAMCasValidator;
|
||||
import com.plannaplan.security.cas.DefaultUAMCasValidator;
|
||||
import com.plannaplan.services.ConfiguratorService;
|
||||
import com.plannaplan.services.UserService;
|
||||
import com.plannaplan.types.UserRoles;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
@ -33,9 +42,19 @@ import io.swagger.annotations.ApiParam;
|
||||
@Api(tags = { "ConfigController" }, value = "ConfigController", description = "All endpoints to configure an app")
|
||||
public class ConfigController {
|
||||
|
||||
@Value("${plannaplan.frontendUrl}")
|
||||
private String serviceUrl;
|
||||
|
||||
@Value("${plannaplan.dev}")
|
||||
private boolean isDev;
|
||||
|
||||
@Autowired
|
||||
private ConfiguratorService contrl;
|
||||
|
||||
@Autowired
|
||||
private UserService userService;
|
||||
|
||||
|
||||
@PostMapping(path = "/config", consumes = { "multipart/form-data" })
|
||||
@PreAuthorize("hasRole('ROLE_ADMIN')")
|
||||
@ApiOperation("Imports data to system. To call you need to provide ADMIN token")
|
||||
@ -63,4 +82,63 @@ public class ConfigController {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@PostMapping(path = "/config/tours")
|
||||
@PreAuthorize("hasRole('ROLE_ADMIN')")
|
||||
@ApiOperation("Set tours dates. To call you need to provide ADMIN token")
|
||||
public ResponseEntity<String> configToursApp(
|
||||
@RequestParam("firstTourBegin") @DateTimeFormat(pattern = "dd.MM.yyyy") @ApiParam(value = "Date when first tour begin in format dd.MM.yyyy") Date firstTourBegin,
|
||||
@RequestParam("firstTourEnd") @DateTimeFormat(pattern = "dd.MM.yyyy") @ApiParam(value = "Date when first tour ends in format dd.MM.yyyy") Date firstTourEnd,
|
||||
@RequestParam("secondTourBegin") @DateTimeFormat(pattern = "dd.MM.yyyy") @ApiParam(value = "Date when second tour begin in format dd.MM.yyyy") Date secondTourBegin,
|
||||
@RequestParam("secondTourEnd") @DateTimeFormat(pattern = "dd.MM.yyyy") @ApiParam(value = "Date when second tour ends in format dd.MM.yyyy") Date secondTourEnd) {
|
||||
if (!(firstTourBegin.before(firstTourEnd)
|
||||
&& (firstTourEnd.before(secondTourBegin) || firstTourEnd.equals(secondTourBegin))
|
||||
&& secondTourBegin.before(secondTourEnd))) {
|
||||
return new ResponseEntity<>("Bad dates", HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
|
||||
final TourData firstTour = new TourData(firstTourBegin, firstTourEnd);
|
||||
final TourData secondTour = new TourData(secondTourBegin, secondTourEnd);
|
||||
|
||||
this.contrl.saveTours(firstTour, secondTour);
|
||||
return new ResponseEntity<>("Sucess", HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping(path = "/config/courses", consumes = { "multipart/form-data" })
|
||||
@PreAuthorize("hasRole('ROLE_ADMIN')")
|
||||
@ApiOperation("Imports data to system. To call you need to provide ADMIN token")
|
||||
public ResponseEntity<String> configAppChangeCources(
|
||||
@RequestParam("file") @ApiParam(value = "file .xlsx that contains courses and groups with apoinnted rules") MultipartFile file)
|
||||
{
|
||||
try {
|
||||
this.contrl.importCoursesStream(file.getInputStream());
|
||||
return new ResponseEntity<>("Sucess", HttpStatus.OK);
|
||||
} catch (IOException e) {
|
||||
return new ResponseEntity<>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
@PostMapping(path = "/admin/init")
|
||||
@ApiOperation("It can be run only in the initialization of the application. It will create admin user to manage the application.")
|
||||
public ResponseEntity<String> initAdmin(@RequestParam("ticket") @ApiParam(value = "Ticket for validation.") String ticket){
|
||||
if (this.userService.adminExists()){
|
||||
return new ResponseEntity<>("Admin had been already created.", HttpStatus.FORBIDDEN);
|
||||
}
|
||||
|
||||
final CasValidator validator = isDev ? new DefaultUAMCasValidator(serviceUrl, ticket)
|
||||
: new CustomUAMCasValidator(serviceUrl, ticket);
|
||||
|
||||
try {
|
||||
final CasUserIdentity casUserIdentity = validator.validate();
|
||||
final String usosId = casUserIdentity.getUsosId();
|
||||
final String authority = casUserIdentity.getEmail();
|
||||
this.userService.save(new User(null, null, authority, usosId, UserRoles.ADMIN));
|
||||
|
||||
return new ResponseEntity<>("Success", HttpStatus.OK);
|
||||
} catch (CasValidationExcepiton e) {
|
||||
return new ResponseEntity<>("CAS validation failed", HttpStatus.UNAUTHORIZED);
|
||||
} catch (Exception e) {
|
||||
return new ResponseEntity<>("Internal Server Error", HttpStatus.INTERNAL_SERVER_ERROR);
|
||||
}
|
||||
}
|
||||
}
|
@ -9,7 +9,7 @@ import com.plannaplan.entities.Course;
|
||||
import com.plannaplan.responses.mappers.CoursesResponseMappers;
|
||||
import com.plannaplan.responses.models.CoursesDefaultResponse;
|
||||
import com.plannaplan.responses.models.CoursesWithGroupsResponse;
|
||||
import com.plannaplan.responses.models.GroupDefaultResponse;
|
||||
import com.plannaplan.responses.models.GroupWithCapacityResponse;
|
||||
import com.plannaplan.services.CourseService;
|
||||
import com.plannaplan.services.GroupService;
|
||||
import com.plannaplan.types.GroupType;
|
||||
@ -53,16 +53,16 @@ public class CoursesController {
|
||||
final List<CoursesWithGroupsResponse> response = new ArrayList<>();
|
||||
|
||||
courses.forEach(course -> {
|
||||
final List<GroupDefaultResponse> lectures = new ArrayList<>();
|
||||
final List<GroupDefaultResponse> classes = new ArrayList<>();
|
||||
final List<GroupWithCapacityResponse> lectures = new ArrayList<>();
|
||||
final List<GroupWithCapacityResponse> classes = new ArrayList<>();
|
||||
|
||||
final HashMap<Long, Integer> ammounts = this.groupService.getTakenPlaces(course.getGroups());
|
||||
|
||||
course.getGroups().stream().forEach(group -> {
|
||||
if (group.getType() == GroupType.CLASS) {
|
||||
classes.add(new GroupDefaultResponse(group, ammounts.get(group.getId())));
|
||||
classes.add(new GroupWithCapacityResponse(group, ammounts.get(group.getId())));
|
||||
} else {
|
||||
lectures.add(new GroupDefaultResponse(group, ammounts.get(group.getId())));
|
||||
lectures.add(new GroupWithCapacityResponse(group, ammounts.get(group.getId())));
|
||||
}
|
||||
});
|
||||
|
||||
|
151
restservice/src/main/java/com/plannaplan/controllers/ExchangeController.java
Executable file
151
restservice/src/main/java/com/plannaplan/controllers/ExchangeController.java
Executable file
@ -0,0 +1,151 @@
|
||||
package com.plannaplan.controllers;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import com.plannaplan.App;
|
||||
import com.plannaplan.entities.Assignment;
|
||||
import com.plannaplan.entities.Exchange;
|
||||
import com.plannaplan.entities.Groups;
|
||||
import com.plannaplan.entities.User;
|
||||
import com.plannaplan.exceptions.UserNotFoundException;
|
||||
import com.plannaplan.responses.mappers.ExchangeResponseMappers;
|
||||
import com.plannaplan.responses.models.ExchangeResponse;
|
||||
import com.plannaplan.services.AssignmentService;
|
||||
import com.plannaplan.services.ExchangeService;
|
||||
import com.plannaplan.services.GroupService;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.CrossOrigin;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.DeleteMapping;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import io.swagger.annotations.ApiParam;
|
||||
|
||||
@RestController
|
||||
@CrossOrigin
|
||||
@RequestMapping("/api/" + App.API_VERSION + "/exchanges")
|
||||
@Api(tags = { "Exchange" }, value = "Exchange", description = "Endpoint to exchange with accepted assignments.")
|
||||
public class ExchangeController extends TokenBasedController{
|
||||
|
||||
@Autowired
|
||||
private GroupService groupService;
|
||||
|
||||
@Autowired
|
||||
private AssignmentService assignmentService;
|
||||
|
||||
@Autowired
|
||||
private ExchangeService exchangeService;
|
||||
|
||||
@PostMapping("/exchange")
|
||||
@ApiOperation(value = "Creates exchange offer.")
|
||||
public ResponseEntity<String> createExchange(
|
||||
@ApiParam( value = "Json object that contains assignment to trade and desired group")
|
||||
@RequestBody
|
||||
Map<String, Long> exchangeRequest)
|
||||
throws UserNotFoundException {
|
||||
|
||||
final User asker = this.getCurrentUser()
|
||||
.orElseThrow(() -> new UserNotFoundException("Invalid token"));
|
||||
final Long assignmentId = exchangeRequest.get("assignment");
|
||||
final Long groupId = exchangeRequest.get("group");
|
||||
final List<Long> ownedGroups = asker.getStudentRegisteredGrups().stream().map(Groups::getId).collect(Collectors.toList());
|
||||
|
||||
if(ownedGroups.contains(groupId)){
|
||||
return new ResponseEntity<>("User has already got this group.", HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
|
||||
if(assignmentId == null || groupId == null ){
|
||||
return new ResponseEntity<>("Some of values are missing", HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
|
||||
final Optional<Assignment> assignment = this.assignmentService.getById(assignmentId);
|
||||
final Optional<Groups> group = this.groupService.getGroupById(groupId);
|
||||
|
||||
if(assignment.isEmpty() || group.isEmpty()){
|
||||
return new ResponseEntity<>("Some of provided value does not exist.", HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
|
||||
final Assignment assignmentInstance = assignment.get();
|
||||
final Groups groupInstance = group.get();
|
||||
|
||||
if(!(assignmentInstance.getCommision().getCommisionOwner().getId().equals(asker.getId()) && assignmentInstance.isAccepted())){
|
||||
return new ResponseEntity<>("Some of problems appeared. Check if you have access to given assignment and if it is accepted or the exchange has not been already added.", HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
|
||||
this.exchangeService.save(new Exchange(assignmentInstance, groupInstance));
|
||||
|
||||
return new ResponseEntity<>("Success", HttpStatus.OK);
|
||||
}
|
||||
|
||||
@DeleteMapping("/exchange/{id}")
|
||||
@ApiOperation(value = "Delete exchange offer")
|
||||
public ResponseEntity<String> deleteExchange(@PathVariable(name = "id", required = false) Long offerId)
|
||||
throws UserNotFoundException {
|
||||
|
||||
final User asker = this.getCurrentUser()
|
||||
.orElseThrow(() -> new UserNotFoundException("Invalid token"));
|
||||
|
||||
final Optional<Exchange> exchange = this.exchangeService.getById(offerId);
|
||||
|
||||
if(exchange.isEmpty()){
|
||||
return new ResponseEntity<>("Given offer does not exist.", HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
|
||||
final Exchange exchangeToDelete = exchange.get();
|
||||
|
||||
if(!(exchangeToDelete.getOwnedAssignment().getCommision().getCommisionOwner().getId().equals(asker.getId()))){
|
||||
return new ResponseEntity<>("You have not permission for that action.", HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
|
||||
this.exchangeService.deleteExchange(exchangeToDelete);
|
||||
return new ResponseEntity<>("Success", HttpStatus.OK);
|
||||
}
|
||||
|
||||
@GetMapping("/exchange/all")
|
||||
@ApiOperation(value = "Get exchange offers")
|
||||
public ResponseEntity<List<ExchangeResponse>> getExchange()
|
||||
throws UserNotFoundException {
|
||||
|
||||
final User asker = this.getCurrentUser()
|
||||
.orElseThrow(() -> new UserNotFoundException("Invalid token"));
|
||||
|
||||
final List<Exchange> response = exchangeService.getByUserId(asker.getId());
|
||||
final List<ExchangeResponse> listOfResponses = ExchangeResponseMappers.mapToDefaultResponse(response);
|
||||
|
||||
return new ResponseEntity<>(listOfResponses, HttpStatus.OK);
|
||||
}
|
||||
|
||||
@GetMapping("/exchange/{id}")
|
||||
@ApiOperation(value = "Get exchange offers")
|
||||
public ResponseEntity<ExchangeResponse> getExchangeById(@PathVariable(name = "id", required = false) Long offerId)
|
||||
throws UserNotFoundException {
|
||||
|
||||
final User asker = this.getCurrentUser()
|
||||
.orElseThrow(() -> new UserNotFoundException("Invalid token"));
|
||||
|
||||
final Optional<Exchange> exchange = this.exchangeService.getById(offerId);
|
||||
|
||||
if(exchange.isEmpty()){
|
||||
return new ResponseEntity<>(null, HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
|
||||
final Exchange exchangeInstance = exchange.get();
|
||||
if(!exchangeInstance.getOwnerId().equals(asker.getId())){
|
||||
return new ResponseEntity<>(null, HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
|
||||
return new ResponseEntity<>(new ExchangeResponse(exchangeInstance), HttpStatus.OK);
|
||||
}
|
||||
}
|
@ -62,7 +62,6 @@ public class TokenController {
|
||||
} catch (Exception e) {
|
||||
return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@GetMapping("/token/refresh")
|
||||
|
@ -1,12 +1,14 @@
|
||||
package com.plannaplan.controllers;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
import com.plannaplan.App;
|
||||
import com.plannaplan.entities.User;
|
||||
import com.plannaplan.responses.mappers.UserResponseMappers;
|
||||
import com.plannaplan.responses.models.UserResponse;
|
||||
import com.plannaplan.services.UserService;
|
||||
import com.plannaplan.types.UserRoles;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.HttpStatus;
|
||||
@ -21,6 +23,7 @@ import io.swagger.annotations.ApiOperation;
|
||||
import io.swagger.annotations.ApiParam;
|
||||
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
|
||||
@ -51,4 +54,26 @@ public class UsersController {
|
||||
final List<UserResponse> response = UserResponseMappers.mapToDefaultResponse(searches);
|
||||
return new ResponseEntity<>(response, HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping(path = "/admin")
|
||||
@PreAuthorize("hasRole('ROLE_ADMIN')")
|
||||
@ApiOperation(value = "Adds new admin user.")
|
||||
public ResponseEntity<String> addAdmin(@RequestParam("authority") @ApiParam(value = "USOS ID or E-mail. If user does not exist it should be USOS ID") String authority) {
|
||||
final Optional<User> userResponse = this.userService.getByAuthority(authority);
|
||||
final User user = userResponse.orElseGet(() -> new User(null, null, null, authority, UserRoles.ADMIN));
|
||||
user.setRole(UserRoles.ADMIN);
|
||||
this.userService.save(user);
|
||||
return new ResponseEntity<>("Success", HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping(path = "/deanery")
|
||||
@PreAuthorize("hasRole('ROLE_ADMIN')")
|
||||
@ApiOperation(value = "Adds new deanery user.")
|
||||
public ResponseEntity<String> addDeanery(@RequestParam("authority") @ApiParam(value = "USOS ID or E-mail. If user does not exist it should be USOS ID") String authority) {
|
||||
final Optional<User> userResponse = this.userService.getByAuthority(authority);
|
||||
final User user = userResponse.orElseGet(() -> new User(null, null, null, authority, UserRoles.DEANERY));
|
||||
user.setRole(UserRoles.DEANERY);
|
||||
this.userService.save(user);
|
||||
return new ResponseEntity<>("Success", HttpStatus.OK);
|
||||
}
|
||||
}
|
@ -14,6 +14,11 @@ import com.plannaplan.types.GroupType;
|
||||
public class AssignmentResponseMappers {
|
||||
|
||||
public static final List<AssignmentResponse> mapToResponse(List<Assignment> assignments) {
|
||||
return mapToResponse(assignments, null);
|
||||
}
|
||||
|
||||
public static final List<AssignmentResponse> mapToResponse(List<Assignment> assignments,
|
||||
HashMap<Long, Integer> ammounts) {
|
||||
List<AssignmentResponse> response = new ArrayList<>();
|
||||
HashMap<Course, List<Groups>> courses = new HashMap<>();
|
||||
assignments.stream().forEach((Assignment assignment) -> {
|
||||
@ -29,14 +34,23 @@ public class AssignmentResponseMappers {
|
||||
final Course course = entry.getKey();
|
||||
final List<Groups> courseGroups = entry.getValue();
|
||||
if (courseGroups.size() == 1) {
|
||||
if (ammounts != null) {
|
||||
response.add(new AssignmentResponse(course, courseGroups.get(0), ammounts));
|
||||
} else {
|
||||
response.add(new AssignmentResponse(course, courseGroups.get(0)));
|
||||
}
|
||||
}
|
||||
if (courseGroups.size() == 2) {
|
||||
final Groups lecture = courseGroups.stream().filter(o -> o.getType() == GroupType.LECTURE).findFirst()
|
||||
.get();
|
||||
final Groups classes = courseGroups.stream().filter(o -> o.getType() == GroupType.CLASS).findFirst()
|
||||
.get();
|
||||
|
||||
if (ammounts != null) {
|
||||
response.add(new AssignmentResponse(course, lecture, classes, ammounts));
|
||||
} else {
|
||||
response.add(new AssignmentResponse(course, lecture, classes));
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,14 @@
|
||||
package com.plannaplan.responses.mappers;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import com.plannaplan.entities.Exchange;
|
||||
import com.plannaplan.responses.models.ExchangeResponse;
|
||||
|
||||
public class ExchangeResponseMappers {
|
||||
public static final List<ExchangeResponse> mapToDefaultResponse(List<Exchange> exchanges) {
|
||||
return exchanges.stream().filter(Objects::nonNull).map(ExchangeResponse::new).collect(Collectors.toList());
|
||||
}
|
||||
}
|
@ -1,5 +1,7 @@
|
||||
package com.plannaplan.responses.models;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
import com.plannaplan.entities.Course;
|
||||
import com.plannaplan.entities.Groups;
|
||||
import com.plannaplan.types.GroupType;
|
||||
@ -20,11 +22,23 @@ public class AssignmentResponse {
|
||||
this.classes = classes == null ? null : new GroupWithCapacityResponse(classes);
|
||||
}
|
||||
|
||||
public AssignmentResponse(Course course, Groups lecture, Groups classes, HashMap<Long, Integer> ammounts) {
|
||||
this.id = course.getId();
|
||||
this.name = course.getName();
|
||||
this.lecture = lecture == null ? null : new GroupWithCapacityResponse(lecture, ammounts.get(lecture.getId()));
|
||||
this.classes = classes == null ? null : new GroupWithCapacityResponse(classes, ammounts.get(classes.getId()));
|
||||
}
|
||||
|
||||
public AssignmentResponse(Course course, Groups group) {
|
||||
this(course, group.getType() == GroupType.LECTURE ? group : null,
|
||||
group.getType() == GroupType.CLASS ? group : null);
|
||||
}
|
||||
|
||||
public AssignmentResponse(Course course, Groups group, HashMap<Long, Integer> ammounts) {
|
||||
this(course, group.getType() == GroupType.LECTURE ? group : null,
|
||||
group.getType() == GroupType.CLASS ? group : null, ammounts);
|
||||
}
|
||||
|
||||
public GroupWithCapacityResponse getLecture() {
|
||||
return this.lecture;
|
||||
}
|
||||
|
@ -12,32 +12,32 @@ import io.swagger.annotations.ApiModel;
|
||||
@ApiModel(description = "Response shows information about groups to given course.", value = "CoursesWithGroupsResponse")
|
||||
public class CoursesWithGroupsResponse extends CoursesResponse {
|
||||
|
||||
private List<GroupDefaultResponse> lectures = new ArrayList<>();
|
||||
private List<GroupDefaultResponse> classes = new ArrayList<>();
|
||||
private List<GroupWithCapacityResponse> lectures = new ArrayList<>();
|
||||
private List<GroupWithCapacityResponse> classes = new ArrayList<>();
|
||||
|
||||
public CoursesWithGroupsResponse(Course course) {
|
||||
super(course);
|
||||
course.getGroups().stream().forEach(group -> {
|
||||
if (group.getType() == GroupType.CLASS) {
|
||||
this.classes.add(new GroupDefaultResponse(group));
|
||||
this.classes.add(new GroupWithCapacityResponse(group));
|
||||
} else {
|
||||
this.lectures.add(new GroupDefaultResponse(group));
|
||||
this.lectures.add(new GroupWithCapacityResponse(group));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public CoursesWithGroupsResponse(Course course, List<GroupDefaultResponse> lectures,
|
||||
List<GroupDefaultResponse> classes) {
|
||||
public CoursesWithGroupsResponse(Course course, List<GroupWithCapacityResponse> lectures,
|
||||
List<GroupWithCapacityResponse> classes) {
|
||||
super(course);
|
||||
this.lectures = lectures;
|
||||
this.classes = classes;
|
||||
}
|
||||
|
||||
public List<GroupDefaultResponse> getClasses() {
|
||||
public List<GroupWithCapacityResponse> getClasses() {
|
||||
return this.classes;
|
||||
}
|
||||
|
||||
public List<GroupDefaultResponse> getLectures() {
|
||||
public List<GroupWithCapacityResponse> getLectures() {
|
||||
return this.lectures;
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,36 @@
|
||||
package com.plannaplan.responses.models;
|
||||
|
||||
import com.plannaplan.entities.Exchange;
|
||||
|
||||
public class ExchangeResponse {
|
||||
private Long id;
|
||||
private GroupDefaultResponse ownedAssignment;
|
||||
private GroupDefaultResponse desiredGroup;
|
||||
|
||||
public ExchangeResponse(Exchange exchange){
|
||||
this.id = exchange.getId();
|
||||
this.ownedAssignment = new GroupDefaultResponse(exchange.getOwnedAssignment().getGroup());
|
||||
this.desiredGroup = new GroupDefaultResponse(exchange.getDesiredAssignment());
|
||||
}
|
||||
|
||||
public GroupDefaultResponse getDesiredGroup() {
|
||||
return desiredGroup;
|
||||
}
|
||||
public void setDesiredGroup(GroupDefaultResponse desiredGroup) {
|
||||
this.desiredGroup = desiredGroup;
|
||||
}
|
||||
public GroupDefaultResponse getOwnedAssignment() {
|
||||
return ownedAssignment;
|
||||
}
|
||||
public void setOwnedAssignment(GroupDefaultResponse ownedAssignment) {
|
||||
this.ownedAssignment = ownedAssignment;
|
||||
}
|
||||
public Long getId() {
|
||||
return id;
|
||||
}
|
||||
public void setId(Long id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
|
||||
}
|
Binary file not shown.
@ -19,3 +19,6 @@ server.port=1285
|
||||
plannaplan.dev = true
|
||||
plannaplan.frontendUrl = http://localhost:3000
|
||||
plannaplan.email = plannaplan.kontakt@gmail.com
|
||||
plannaplan.apiurl = https://usosapidemo.amu.edu.pl
|
||||
plannaplan.apikey=${PLANNAPLAN_CONSUMER_KEY}
|
||||
plannaplan.apisecret=${PLANNAPLAN_CONSUMER_SECRET}
|
@ -20,6 +20,10 @@ server.port=1285
|
||||
plannaplan.email = ${PLANNAPLAN_EMAIL}
|
||||
plannaplan.dev = false
|
||||
plannaplan.frontendUrl= https://wmi.plannaplan.pl
|
||||
plannaplan.apiurl = https://usosapidemo.amu.edu.pl
|
||||
plannaplan.apikey=${PLANNAPLAN_CONSUMER_KEY}
|
||||
plannaplan.apisecret=${PLANNAPLAN_CONSUMER_SECRET}
|
||||
|
||||
security.require-ssl=true
|
||||
server.ssl.key-store=/keys/keystore.p12
|
||||
server.ssl.key-store-password=
|
||||
|
@ -4,6 +4,8 @@ import static org.springframework.test.web.servlet.request.MockMvcRequestBuilder
|
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.*;
|
||||
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
|
||||
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.sql.Date;
|
||||
@ -14,12 +16,15 @@ import com.plannaplan.services.ConfiguratorService;
|
||||
import com.plannaplan.services.UserService;
|
||||
import com.plannaplan.types.UserRoles;
|
||||
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.mock.web.MockMultipartFile;
|
||||
import org.springframework.test.annotation.DirtiesContext;
|
||||
import org.springframework.test.annotation.DirtiesContext.MethodMode;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.springframework.test.context.junit4.SpringRunner;
|
||||
import org.springframework.test.web.servlet.MockMvc;
|
||||
@ -32,6 +37,9 @@ public class ConfigControllerTest extends AbstractControllerTest {
|
||||
|
||||
private static final String FILE_NAME = "Zajecia.xlsx";
|
||||
private static final String CONFIG_ENDPOINT = "/api/v1/configurator/config";
|
||||
private static final String COURSE_ENDPOINT = "/api/v1/configurator/config/courses";
|
||||
private static final String TOURS_ENDPOINT = "/api/v1/configurator/config/tours";
|
||||
private static final String ADMIN_INIT_ENDPOINT = "/api/v1/configurator/admin/init";
|
||||
private static final String FIRST_TOUR_START = "firstTourBegin";
|
||||
private static final String FIRST_TOUR_END = "firstTourEnd";
|
||||
private static final String SECOND_TOUR_START = "secondTourBegin";
|
||||
@ -219,4 +227,120 @@ public class ConfigControllerTest extends AbstractControllerTest {
|
||||
.andExpect(status().is4xxClientError());
|
||||
}
|
||||
|
||||
@Test
|
||||
@Ignore
|
||||
@DirtiesContext(methodMode = MethodMode.BEFORE_METHOD)
|
||||
public void shouldCreateAdminBecouseOfEmptyDatabase() throws Exception{
|
||||
// have no idea how to make this test independent from user that run this
|
||||
final String ticket = "";
|
||||
MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
|
||||
mockMvc.perform(get(ADMIN_INIT_ENDPOINT).param("ticket", ticket)).andExpect(status().isOk());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldFailDueToExistingAdmin() throws Exception{
|
||||
this.service.save(new User(null, null, "shouldFailDueToExistingAdmin@ConfigController.Test", UserRoles.ADMIN));
|
||||
final String ticket = "hfewlhfjlewhipfqwehipqwef";
|
||||
MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
|
||||
mockMvc.perform(get(ADMIN_INIT_ENDPOINT).param("ticket", ticket)).andExpect(status().is4xxClientError());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldReturnOKAuthorizedForCourses() throws Exception {
|
||||
final String mail = "shouldReturnOKAuthorizedForCourses@ConfigController.test";
|
||||
final User usr = this.service.save(new User(null, null, mail, UserRoles.ADMIN));
|
||||
|
||||
final InputStream inputStream = getClass().getClassLoader().getResourceAsStream(FILE_NAME);
|
||||
final MockMultipartFile file = new MockMultipartFile("file", inputStream);
|
||||
final String token = this.service.login(usr).getToken();
|
||||
|
||||
MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build();
|
||||
mockMvc.perform(multipart(COURSE_ENDPOINT).file(file).header("Authorization", "Bearer " + token))
|
||||
.andExpect(status().isOk());
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldDenyForCoursesDueToWrongRole() throws Exception {
|
||||
final String mail = "shouldReturnOKAuthorizedForCourses@ConfigController.test";
|
||||
final User usr = this.service.save(new User(null, null, mail, UserRoles.TEST_USER));
|
||||
|
||||
final InputStream inputStream = getClass().getClassLoader().getResourceAsStream(FILE_NAME);
|
||||
final MockMultipartFile file = new MockMultipartFile("file", inputStream);
|
||||
final String token = this.service.login(usr).getToken();
|
||||
|
||||
MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build();
|
||||
mockMvc.perform(multipart(COURSE_ENDPOINT).file(file).header("Authorization", "Bearer " + token))
|
||||
.andExpect(status().is4xxClientError());
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldReturnOKAuthorizedForTours() throws Exception {
|
||||
final String mail = "shouldReturnOKAuthorizedForTours@ConfigController.test";
|
||||
final User usr = this.service.save(new User(null, null, mail, UserRoles.ADMIN));
|
||||
final String token = this.service.login(usr).getToken();
|
||||
|
||||
MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build();
|
||||
mockMvc.perform(post(TOURS_ENDPOINT).param(FIRST_TOUR_START, "12.12.2020")
|
||||
.param(FIRST_TOUR_END, "14.12.2020").param(SECOND_TOUR_START, "16.12.2020")
|
||||
.param(SECOND_TOUR_END, "20.12.2020").header("Authorization", "Bearer " + token))
|
||||
.andExpect(status().isOk());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldFailWithWrongSecondTour() throws Exception {
|
||||
final String mail = "shouldFailToursWithWrongSecondTour@ConfigController.test";
|
||||
final User usr = this.service.save(new User(null, null, mail, UserRoles.ADMIN));
|
||||
final String token = this.service.login(usr).getToken();
|
||||
|
||||
MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build();
|
||||
mockMvc.perform(post(TOURS_ENDPOINT).param(FIRST_TOUR_START, "12.12.2020")
|
||||
.param(FIRST_TOUR_END, "14.12.2020").param(SECOND_TOUR_START, "16.12.2020")
|
||||
.param(SECOND_TOUR_END, "13.12.2020").header("Authorization", "Bearer " + token))
|
||||
.andExpect(status().is4xxClientError());
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldFailWithWrongFirstTour() throws Exception {
|
||||
final String mail = "shouldFailWithWrongFirstTour@ConfigController.test";
|
||||
final User usr = this.service.save(new User(null, null, mail, UserRoles.ADMIN));
|
||||
final String token = this.service.login(usr).getToken();
|
||||
|
||||
MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build();
|
||||
mockMvc.perform(post(TOURS_ENDPOINT).param(FIRST_TOUR_START, "12.12.2020")
|
||||
.param(FIRST_TOUR_END, "10.12.2020").param(SECOND_TOUR_START, "16.12.2020")
|
||||
.param(SECOND_TOUR_END, "20.12.2020").header("Authorization", "Bearer " + token))
|
||||
.andExpect(status().is4xxClientError());
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldFailWithWrongSecondTourBegin() throws Exception {
|
||||
final String mail = "shouldFailWithWrongSecondTourBegin@ConfigController.test";
|
||||
final User usr = this.service.save(new User(null, null, mail, UserRoles.ADMIN));
|
||||
final String token = this.service.login(usr).getToken();
|
||||
|
||||
MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build();
|
||||
mockMvc.perform(post(TOURS_ENDPOINT).param(FIRST_TOUR_START, "12.12.2020")
|
||||
.param(FIRST_TOUR_END, "14.12.2020").param(SECOND_TOUR_START, "13.12.2020")
|
||||
.param(SECOND_TOUR_END, "20.12.2020").header("Authorization", "Bearer " + token))
|
||||
.andExpect(status().is4xxClientError());
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldDenyForTours() throws Exception {
|
||||
final String mail = "shouldDenyForTours@ConfigController.test";
|
||||
final User usr = this.service.save(new User(null, null, mail, UserRoles.TEST_USER));
|
||||
final String token = this.service.login(usr).getToken();
|
||||
|
||||
MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build();
|
||||
mockMvc.perform(post(TOURS_ENDPOINT).param(FIRST_TOUR_START, "12.12.2020")
|
||||
.param(FIRST_TOUR_END, "14.12.2020").param(SECOND_TOUR_START, "16.12.2020")
|
||||
.param(SECOND_TOUR_END, "20.12.2020").header("Authorization", "Bearer " + token))
|
||||
.andExpect(status().is4xxClientError());
|
||||
|
||||
}
|
||||
}
|
294
restservice/src/test/java/com/plannaplan/controllers/ExchangeControllerTest.java
Executable file
294
restservice/src/test/java/com/plannaplan/controllers/ExchangeControllerTest.java
Executable file
@ -0,0 +1,294 @@
|
||||
package com.plannaplan.controllers;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.test.annotation.DirtiesContext;
|
||||
import org.springframework.test.annotation.DirtiesContext.MethodMode;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.springframework.test.context.junit4.SpringRunner;
|
||||
import org.springframework.test.web.servlet.MockMvc;
|
||||
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
|
||||
|
||||
import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.*;
|
||||
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
|
||||
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
|
||||
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete;
|
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
||||
|
||||
import java.nio.charset.Charset;
|
||||
|
||||
import com.plannaplan.entities.Assignment;
|
||||
import com.plannaplan.entities.Commision;
|
||||
import com.plannaplan.entities.Exchange;
|
||||
import com.plannaplan.entities.Groups;
|
||||
import com.plannaplan.entities.User;
|
||||
import com.plannaplan.services.AssignmentService;
|
||||
import com.plannaplan.services.CommisionService;
|
||||
import com.plannaplan.services.ExchangeService;
|
||||
import com.plannaplan.services.GroupService;
|
||||
import com.plannaplan.services.UserService;
|
||||
import com.plannaplan.types.UserRoles;
|
||||
import com.plannaplan.types.WeekDay;
|
||||
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest
|
||||
@ContextConfiguration
|
||||
public class ExchangeControllerTest extends AbstractControllerTest {
|
||||
|
||||
private final static String EXCHANGE_ENDPOINT = "/api/v1/exchanges/exchange";
|
||||
private static final MediaType APPLICATION_JSON_UTF8 = new MediaType(MediaType.APPLICATION_JSON.getType(),
|
||||
MediaType.APPLICATION_JSON.getSubtype(), Charset.forName("utf8"));
|
||||
|
||||
@Autowired
|
||||
private UserService userService;
|
||||
|
||||
@Autowired
|
||||
private GroupService groupService;
|
||||
|
||||
@Autowired
|
||||
private AssignmentService assignmentService;
|
||||
|
||||
@Autowired
|
||||
private CommisionService commisionService;
|
||||
|
||||
@Autowired
|
||||
private ExchangeService exchangeService;
|
||||
|
||||
@Test
|
||||
@DirtiesContext(methodMode = MethodMode.BEFORE_METHOD)
|
||||
public void shouldGetAllUsersExchanges() throws Exception {
|
||||
final User user = this.userService.save(new User(null, null,
|
||||
"shouldGetAllUsersExchanges@ExchangeController.test", "11111", UserRoles.STUDENT, 320));
|
||||
final String token = this.userService.login(user).getToken();
|
||||
final Groups group = this.groupService.save(new Groups(215, "A2-2", null, 520, WeekDay.TUESDAY, null));
|
||||
final Groups groupDesired = this.groupService.save(new Groups(216, "A2-3", null, 530, WeekDay.MONDAY, null));
|
||||
final Commision commision = this.commisionService.save(new Commision(user));
|
||||
final Assignment assignment = this.assignmentService.save(new Assignment(group, commision));
|
||||
this.exchangeService.save(new Exchange(assignment, groupDesired));
|
||||
|
||||
MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build();
|
||||
mockMvc.perform(get(EXCHANGE_ENDPOINT + "/all").header("Authorization", "Bearer " +
|
||||
token)).andExpect(status().isOk());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldFailGettingNotExistingExchange() throws Exception {
|
||||
final User user = this.userService.save(new User(null, null,
|
||||
"shouldFailGettingNotExistingExchange@ExchangeController.test", UserRoles.STUDENT));
|
||||
|
||||
final String token = this.userService.login(user).getToken();
|
||||
|
||||
MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build();
|
||||
mockMvc.perform(get(EXCHANGE_ENDPOINT + "/" + user.getId()).header("Authorization", "Bearer " + token)).andExpect(status().isBadRequest());
|
||||
}
|
||||
|
||||
@Test
|
||||
@DirtiesContext(methodMode = MethodMode.BEFORE_METHOD)
|
||||
public void shouldGetSingleExchange() throws Exception{
|
||||
final User user = this.userService.save(new User(null, null,
|
||||
"shouldGetSingleExchange@ExchangeController.test", "11111", UserRoles.STUDENT, 320));
|
||||
final String token = this.userService.login(user).getToken();
|
||||
final Groups group = this.groupService.save(new Groups(215, "A2-2", null, 520, WeekDay.TUESDAY, null));
|
||||
final Groups groupDesired = this.groupService.save(new Groups(216, "A2-3", null, 530, WeekDay.MONDAY, null));
|
||||
final Commision commision = this.commisionService.save(new Commision(user));
|
||||
final Assignment assignment = this.assignmentService.save(new Assignment(group, commision));
|
||||
final Exchange exchange = this.exchangeService.save(new Exchange(assignment, groupDesired));
|
||||
|
||||
MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build();
|
||||
mockMvc.perform(get(EXCHANGE_ENDPOINT + "/" + exchange.getId()).header("Authorization", "Bearer " +
|
||||
token)).andExpect(status().isOk());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldFailGettingExchangeDueToPermission() throws Exception{
|
||||
final User user = this.userService.save(new User(null, null,
|
||||
"shouldFailGettingExchangeDueToPermission@ExchangeController.test", "11111", UserRoles.STUDENT, 320));
|
||||
final Groups group = this.groupService.save(new Groups(215, "A2-2", null, 520, WeekDay.TUESDAY, null));
|
||||
final Groups groupDesired = this.groupService.save(new Groups(216, "A2-3", null, 530, WeekDay.MONDAY, null));
|
||||
final Commision commision = this.commisionService.save(new Commision(user));
|
||||
final Assignment assignment = this.assignmentService.save(new Assignment(group, commision));
|
||||
final Exchange exchange = this.exchangeService.save(new Exchange(assignment, groupDesired));
|
||||
|
||||
final User user2 = this.userService.save(new User(null, null,
|
||||
"shouldFailGettingExchangeDueToPermission2@ExchangeController.test", "11112", UserRoles.STUDENT, 321));
|
||||
final String token2 = this.userService.login(user2).getToken();
|
||||
|
||||
MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build();
|
||||
mockMvc.perform(post(EXCHANGE_ENDPOINT + "/" + exchange.getId()).header("Authorization", "Bearer " +
|
||||
token2)).andExpect(status().is4xxClientError());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldFailPostDueToAssignmentNotFound() throws Exception{
|
||||
final User user = this.userService.save(new User(null, null,
|
||||
"shouldFailPostDueToAssignmentNotFound@ExchangeController.test", UserRoles.STUDENT));
|
||||
final String token = this.userService.login(user).getToken();
|
||||
final Groups group = this.groupService.save(new Groups(212, "A2-1", null, 420, WeekDay.WEDNESDAY, null));
|
||||
|
||||
MockMvc mockMvc =
|
||||
MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build();
|
||||
mockMvc.perform(post(EXCHANGE_ENDPOINT).header("Authorization", "Bearer " +
|
||||
token).contentType(APPLICATION_JSON_UTF8).content("{\"assignment\": "+ user.getId() +", \"group\": "+ group.getId() +" }")).andExpect(status().isBadRequest());
|
||||
}
|
||||
|
||||
@Test
|
||||
@DirtiesContext(methodMode = MethodMode.BEFORE_METHOD)
|
||||
public void shouldInsertExchange() throws Exception{
|
||||
final User user = this.userService.save(new User(null, null,
|
||||
"shouldInsertExchange@ExchangeController.test", "11111", UserRoles.STUDENT, 320));
|
||||
final String token = this.userService.login(user).getToken();
|
||||
final Groups group = this.groupService.save(new Groups(215, "A2-2", null, 520, WeekDay.TUESDAY, null));
|
||||
final Groups groupDesired = this.groupService.save(new Groups(216, "A2-3", null, 530, WeekDay.MONDAY, null));
|
||||
final Commision commision = this.commisionService.save(new Commision(user));
|
||||
final Assignment assignment = this.assignmentService.save(new Assignment(group, commision));
|
||||
|
||||
this.assignmentService.callAcceptAlgorythm();
|
||||
|
||||
MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build();
|
||||
mockMvc.perform(post(EXCHANGE_ENDPOINT).header("Authorization", "Bearer " +
|
||||
token).contentType(APPLICATION_JSON_UTF8).content("{\"assignment\": "+ assignment.getId() +", \"group\": "+ groupDesired.getId() +" }")).andExpect(status().isOk());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldFailInsertExchangeDueToMissingGroup() throws Exception{
|
||||
final User user = this.userService.save(new User(null, null,
|
||||
"shouldFailInsertExchangeDueToMissingGroup@ExchangeController.test", UserRoles.STUDENT));
|
||||
final String token = this.userService.login(user).getToken();
|
||||
|
||||
MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build();
|
||||
mockMvc.perform(post(EXCHANGE_ENDPOINT).header("Authorization", "Bearer " +
|
||||
token).contentType(APPLICATION_JSON_UTF8).content("{\"assignment\": "+ user.getId() +" }")).andExpect(status().isBadRequest());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldFailInsertExchangeDueToMissingAssignment() throws Exception{
|
||||
final User user = this.userService.save(new User(null, null,
|
||||
"shouldFailInsertExchangeDueToMissingAssignment@ExchangeController.test", UserRoles.STUDENT));
|
||||
final String token = this.userService.login(user).getToken();
|
||||
final Groups group = this.groupService.save(new Groups(212, "A2-1", null, 420, WeekDay.WEDNESDAY, null));
|
||||
|
||||
MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build();
|
||||
mockMvc.perform(post(EXCHANGE_ENDPOINT).header("Authorization", "Bearer " +
|
||||
token).contentType(APPLICATION_JSON_UTF8).content("{\"group\": "+ group.getId() +" }")).andExpect(status().isBadRequest());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldFailInsertExchangeDueToMissingParam() throws Exception{
|
||||
final User user = this.userService.save(new User(null, null,
|
||||
"shouldFailInsertExchangeDueToMissingParam@ExchangeController.test", UserRoles.STUDENT));
|
||||
final String token = this.userService.login(user).getToken();
|
||||
|
||||
MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build();
|
||||
mockMvc.perform(post(EXCHANGE_ENDPOINT).header("Authorization", "Bearer " +
|
||||
token).contentType(APPLICATION_JSON_UTF8)).andExpect(status().isBadRequest());
|
||||
}
|
||||
|
||||
@Test
|
||||
@DirtiesContext(methodMode = MethodMode.BEFORE_METHOD)
|
||||
public void shouldDenyExchangeDueToAssigmentOverlapping() throws Exception{
|
||||
final User user = this.userService.save(new User(null, null,
|
||||
"shouldDenyExchangeDueToAssigmentOverlapping@ExchangeController.test", "11111", UserRoles.STUDENT, 320));
|
||||
final String token = this.userService.login(user).getToken();
|
||||
final Groups group = this.groupService.save(new Groups(215, "A2-2", null, 520, WeekDay.TUESDAY, null));
|
||||
final Commision commision = this.commisionService.save(new Commision(user));
|
||||
final Assignment assignment = this.assignmentService.save(new Assignment(group, commision));
|
||||
this.exchangeService.save(new Exchange(assignment, group));
|
||||
|
||||
MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build();
|
||||
mockMvc.perform(post(EXCHANGE_ENDPOINT).header("Authorization", "Bearer " +
|
||||
token).contentType(APPLICATION_JSON_UTF8).content("{\"assignment\": "+ user.getId() +", \"group\": "+ group.getId() +" }")).andExpect(status().isBadRequest());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldDenyPostDueToAssignmentNotAccepted() throws Exception{
|
||||
final User user = this.userService.save(new User(null, null,
|
||||
"shouldDenyPostDueToAssignmentNotAccepted@ExchangeController.test", UserRoles.STUDENT));
|
||||
final String token = this.userService.login(user).getToken();
|
||||
final Groups group = this.groupService.save(new Groups(212, "A2-1", null, 420, WeekDay.WEDNESDAY, null));
|
||||
final Groups group2 = this.groupService.save(new Groups(213, "A2-2", null, 420, WeekDay.MONDAY, null));
|
||||
final Commision commision = this.commisionService.save(new Commision(user));
|
||||
final Assignment assignment = this.assignmentService.save(new Assignment(group,commision));
|
||||
|
||||
MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build();
|
||||
mockMvc.perform(post(EXCHANGE_ENDPOINT).header("Authorization", "Bearer " +
|
||||
token).contentType(APPLICATION_JSON_UTF8).content("{\"assignment\": "+ assignment.getId() +", \"group\": "+ group2.getId() +" }")).andExpect(status().isBadRequest());
|
||||
}
|
||||
|
||||
@Test
|
||||
@DirtiesContext(methodMode = MethodMode.BEFORE_METHOD)
|
||||
public void shouldDeleteExchange() throws Exception{
|
||||
final User user = this.userService.save(new User(null, null,
|
||||
"shouldDeleteExchange@ExchangeController.test", "11111", UserRoles.STUDENT, 320));
|
||||
final String token = this.userService.login(user).getToken();
|
||||
final Groups group = this.groupService.save(new Groups(215, "A2-2", null, 520, WeekDay.TUESDAY, null));
|
||||
final Groups groupDesired = this.groupService.save(new Groups(216, "A2-3", null, 530, WeekDay.MONDAY, null));
|
||||
final Commision commision = this.commisionService.save(new Commision(user));
|
||||
final Assignment assignment = this.assignmentService.save(new Assignment(group, commision));
|
||||
final Exchange exchange = this.exchangeService.save(new Exchange(assignment, groupDesired));
|
||||
|
||||
MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build();
|
||||
mockMvc.perform(delete(EXCHANGE_ENDPOINT + "/" + exchange.getId()).header("Authorization", "Bearer " +
|
||||
token)).andExpect(status().isOk());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldFailDeleteDueToWrongPermissions() throws Exception{
|
||||
final User user = this.userService.save(new User(null, null,
|
||||
"shouldFailDeleteDueToWrongPermissions@ExchangeController.test", "11111", UserRoles.STUDENT, 320));
|
||||
final Groups group = this.groupService.save(new Groups(215, "A2-2", null, 520, WeekDay.TUESDAY, null));
|
||||
final Groups groupDesired = this.groupService.save(new Groups(216, "A2-3", null, 530, WeekDay.MONDAY, null));
|
||||
final Commision commision = this.commisionService.save(new Commision(user));
|
||||
final Assignment assignment = this.assignmentService.save(new Assignment(group, commision));
|
||||
final Exchange exchange = this.exchangeService.save(new Exchange(assignment, groupDesired));
|
||||
|
||||
final User user2 = this.userService.save(new User(null, null,
|
||||
"shouldFailDeleteDueToWrongPermissions@ExchangeController2.test", "11112", UserRoles.STUDENT, 322));
|
||||
final String token2 = this.userService.login(user2).getToken();
|
||||
|
||||
MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build();
|
||||
mockMvc.perform(get(EXCHANGE_ENDPOINT + "/" + exchange.getId()).header("Authorization", "Bearer " +
|
||||
token2)).andExpect(status().isBadRequest());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldFailDeleteDueToMissingParam() throws Exception{
|
||||
final User user = this.userService.save(new User(null, null,
|
||||
"shouldFailDeleteDueToMissingParam@ExchangeController.test", UserRoles.STUDENT));
|
||||
final String token = this.userService.login(user).getToken();
|
||||
|
||||
MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build();
|
||||
mockMvc.perform(delete(EXCHANGE_ENDPOINT).header("Authorization", "Bearer " + token)).andExpect(status().is4xxClientError());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldFailDeleteDueToExchangeNotFound() throws Exception{
|
||||
final User user = this.userService.save(new User(null, null,
|
||||
"shouldFailDeleteDueToExchangeNotFound@ExchangeController.test", UserRoles.STUDENT));
|
||||
final String token = this.userService.login(user).getToken();
|
||||
|
||||
MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build();
|
||||
mockMvc.perform(delete(EXCHANGE_ENDPOINT + "/" + user.getId()).header("Authorization", "Bearer " +
|
||||
token)).andExpect(status().isBadRequest());
|
||||
}
|
||||
|
||||
@Test
|
||||
@DirtiesContext(methodMode = MethodMode.BEFORE_METHOD)
|
||||
public void shouldFailPostDueToGroupAlreadyAccepted() throws Exception{
|
||||
final User user = this.userService.save(new User(null, null, "shouldFailPostDueToGroupAlreadyAccepted@ExchangeController.test", "11111", UserRoles.STUDENT, 320));
|
||||
final String token = this.userService.login(user).getToken();
|
||||
final Groups group = this.groupService.save(new Groups(215, "A2-2", null, 520, WeekDay.TUESDAY, null));
|
||||
final Groups group2 = this.groupService.save(new Groups(216, "A2-3", null, 530, WeekDay.MONDAY, null));
|
||||
final Commision commision = this.commisionService.save(new Commision(user));
|
||||
final Assignment assignment = this.assignmentService.save(new Assignment(group, commision));
|
||||
this.assignmentService.save(new Assignment(group2, commision));
|
||||
this.assignmentService.callAcceptAlgorythm();
|
||||
this.exchangeService.save(new Exchange(assignment, group2));
|
||||
|
||||
MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build();
|
||||
mockMvc.perform(post(EXCHANGE_ENDPOINT).header("Authorization", "Bearer " +
|
||||
token).contentType(APPLICATION_JSON_UTF8).content("{\"assignment\": "+ assignment.getId() +", \"group\": "+ group2.getId() +" }")).andExpect(status().isBadRequest());
|
||||
}
|
||||
}
|
@ -14,9 +14,13 @@ import org.springframework.test.web.servlet.MockMvc;
|
||||
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
|
||||
|
||||
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
|
||||
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.*;
|
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest
|
||||
@ContextConfiguration
|
||||
@ -24,6 +28,8 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.
|
||||
public class UsersControllerTest extends AbstractControllerTest {
|
||||
private static final String SEARCH_ENDPOINT = "/api/v1/users/student/search";
|
||||
private static final String ALL_USERS_ENDPOINT = "/api/v1/users/students";
|
||||
private static final String ADD_ADMIN_ENDPOINT = "/api/v1/users/admin";
|
||||
private static final String ADD_DEANERY_ENDPOINT = "/api/v1/users/deanery";
|
||||
|
||||
@Autowired
|
||||
private UserService service;
|
||||
@ -87,4 +93,117 @@ public class UsersControllerTest extends AbstractControllerTest {
|
||||
.andExpect(status().is4xxClientError());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldDenyNewAdminWithWrongRole() throws Exception {
|
||||
final String email = "shouldDenyNewAdminWithWrongRole@shouldDenyAllStudentsTryByStudent.test";
|
||||
final User user = this.service.save(new User(null, null, email, UserRoles.TEST_USER));
|
||||
final String token = this.service.login(user).getToken();
|
||||
|
||||
MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build();
|
||||
mockMvc.perform(post(ADD_ADMIN_ENDPOINT).param("authority","45611").header("Authorization", "Bearer " + token))
|
||||
.andExpect(status().is4xxClientError());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldDenyNewAdminWithNoParams() throws Exception {
|
||||
final String email = "shouldDenyNewAdminWithNoParams@shouldDenyAllStudentsTryByStudent.test";
|
||||
final User user = this.service.save(new User(null, null, email, UserRoles.ADMIN));
|
||||
final String token = this.service.login(user).getToken();
|
||||
|
||||
MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build();
|
||||
mockMvc.perform(post(ADD_ADMIN_ENDPOINT).header("Authorization", "Bearer " + token))
|
||||
.andExpect(status().is4xxClientError());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldCreateNewAdmin() throws Exception {
|
||||
final String email = "shouldCreateNewAdmin@shouldDenyAllStudentsTryByStudent.test";
|
||||
final String usosId = "121321";
|
||||
final User user = this.service.save(new User(null, null, email, UserRoles.ADMIN));
|
||||
final String token = this.service.login(user).getToken();
|
||||
|
||||
MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build();
|
||||
mockMvc.perform(post(ADD_ADMIN_ENDPOINT).param("authority",usosId).header("Authorization", "Bearer " + token))
|
||||
.andExpect(status().isOk());
|
||||
|
||||
final Optional<User> reponse = this.service.getByAuthority(usosId);
|
||||
assertTrue(reponse.get().getUsosId().equals(usosId));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldChangeExistingUserIntoAdmin() throws Exception {
|
||||
final String email = "shouldChangeExistingUserIntoAdmin@shouldDenyAllStudentsTryByStudent.test";
|
||||
final String email2 = "shouldChangeExistingUserIntoAdmin2@shouldDenyAllStudentsTryByStudent.test";
|
||||
final String usosId = "121327";
|
||||
final User user = this.service.save(new User(null, null, email, UserRoles.ADMIN));
|
||||
|
||||
this.service.save(new User(null, null, email2, usosId, UserRoles.TEST_USER));
|
||||
|
||||
final String token = this.service.login(user).getToken();
|
||||
|
||||
MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build();
|
||||
mockMvc.perform(post(ADD_ADMIN_ENDPOINT).param("authority",usosId).header("Authorization", "Bearer " + token))
|
||||
.andExpect(status().isOk());
|
||||
|
||||
final Optional<User> reponse = this.service.getByAuthority(usosId);
|
||||
assertTrue(reponse.get().getUsosId().equals(usosId));
|
||||
assertTrue(reponse.get().getRole().equals(UserRoles.ADMIN));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldDenyNewDeaneryWithWrongRole() throws Exception {
|
||||
final String email = "shouldDenyNewDeaneryWithWrongRole@shouldDenyAllStudentsTryByStudent.test";
|
||||
final User user = this.service.save(new User(null, null, email, UserRoles.TEST_USER));
|
||||
final String token = this.service.login(user).getToken();
|
||||
|
||||
MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build();
|
||||
mockMvc.perform(post(ADD_DEANERY_ENDPOINT).param("authority","45611").header("Authorization", "Bearer " + token))
|
||||
.andExpect(status().is4xxClientError());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldDenyNewDeaneryWithNoParams() throws Exception {
|
||||
final String email = "shouldDenyNewDeaneryWithNoParams@shouldDenyAllStudentsTryByStudent.test";
|
||||
final User user = this.service.save(new User(null, null, email, UserRoles.ADMIN));
|
||||
final String token = this.service.login(user).getToken();
|
||||
|
||||
MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build();
|
||||
mockMvc.perform(post(ADD_DEANERY_ENDPOINT).header("Authorization", "Bearer " + token))
|
||||
.andExpect(status().is4xxClientError());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldCreateNewDeanery() throws Exception {
|
||||
final String email = "shouldCreateNewDeanery@shouldDenyAllStudentsTryByStudent.test";
|
||||
final String usosId = "121322";
|
||||
final User user = this.service.save(new User(null, null, email, UserRoles.ADMIN));
|
||||
final String token = this.service.login(user).getToken();
|
||||
|
||||
MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build();
|
||||
mockMvc.perform(post(ADD_DEANERY_ENDPOINT).param("authority",usosId).header("Authorization", "Bearer " + token))
|
||||
.andExpect(status().isOk());
|
||||
|
||||
final Optional<User> reponse = this.service.getByAuthority(usosId);
|
||||
assertTrue(reponse.get().getUsosId().equals(usosId));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldChangeExistingUserIntoDeanery() throws Exception {
|
||||
final String email = "shouldChangeExistingUserIntoDeanery@shouldDenyAllStudentsTryByStudent.test";
|
||||
final String email2 = "shouldChangeExistingUserIntoDeanery2@shouldDenyAllStudentsTryByStudent.test";
|
||||
final String usosId = "121328";
|
||||
final User user = this.service.save(new User(null, null, email, UserRoles.ADMIN));
|
||||
|
||||
this.service.save(new User(null, null, email2, usosId, UserRoles.TEST_USER));
|
||||
|
||||
final String token = this.service.login(user).getToken();
|
||||
|
||||
MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build();
|
||||
mockMvc.perform(post(ADD_DEANERY_ENDPOINT).param("authority",usosId).header("Authorization", "Bearer " + token))
|
||||
.andExpect(status().isOk());
|
||||
|
||||
final Optional<User> reponse = this.service.getByAuthority(usosId);
|
||||
assertTrue(reponse.get().getUsosId().equals(usosId));
|
||||
assertTrue(reponse.get().getRole().equals(UserRoles.DEANERY));
|
||||
}
|
||||
}
|
||||
|
Binary file not shown.
Reference in New Issue
Block a user