Skip to content
Snippets Groups Projects
Commit 7b040c5a authored by ywb16155's avatar ywb16155
Browse files

commit #8 - adding services and controllers for adding, viewing submissions,...

commit #8 - adding services and controllers for adding, viewing submissions, adding TODOs for adding, viewing papers, also adding changes to entities to use get,set methods, updating frontend services to reflect backend updates
parent ca8b988b
No related branches found
No related tags found
No related merge requests found
Showing
with 530 additions and 59 deletions
package com.diss.omppapp.api;
import com.diss.omppapp.pojo.LoginPojo;
import com.diss.omppapp.services.AuthService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
......@@ -19,7 +18,7 @@ class AuthController {
@PostMapping(value = "/login",consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public Map<String,Boolean> getAuth(@RequestBody LoginPojo login) {
return authService.authorise(login.username, login.password);
public Map<String,Boolean> getAuth(@RequestBody Map<String,String> request) {
return authService.authorise(request.get("username"), request.get("password"));
}
}
package com.diss.omppapp.api;
import com.diss.omppapp.entities.MinutePaperEntity;
import com.diss.omppapp.services.MinutePaperService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@RestController
public class MinutePaperController {
@Autowired
private MinutePaperService minutePaperService;
@PostMapping(value = "/getOpenPapers",consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public List<MinutePaperEntity> getOpenPapers(@RequestBody Map<String,String> request) {
if(request.isEmpty()) {
return new ArrayList<>();
}
return minutePaperService.getOpenPapers(request.get("username"));
}
@PostMapping(value = "/getClosedPapers",consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public List<MinutePaperEntity> getClosedPapers(@RequestBody Map<String,String> request) {
if(request.isEmpty()) {
return new ArrayList<>();
}
return minutePaperService.getClosedPapers(request.get("username"),request.get("classCode") );
}
}
package com.diss.omppapp.api;
import com.diss.omppapp.entities.SubmissionEntity;
import com.diss.omppapp.services.SubmissionService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@RestController
public class SubmissionController {
@Autowired
private SubmissionService submissionService;
@PostMapping(value = "/getClassSubmissions",consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public List<SubmissionEntity> getClassSubmissions(@RequestBody Map<String,String> request) {
if(request.isEmpty()) {
return new ArrayList<>();
}
if(request.get("username").isEmpty() || request.get("classCode").isEmpty()) {
return new ArrayList<>();
}
return submissionService.getClassSubmissions(request.get("username"), request.get("classCode"));
}
@PostMapping(value = "/getPaperSubmissions",consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public List<SubmissionEntity> getPaperSubmissions(@RequestBody Map<String,String> request) {
if(request.isEmpty() || request.get("id").isEmpty()) {
return new ArrayList<>();
}
return submissionService.getPaperSubmissions(request.get("paperId"));
}
@PutMapping(value = "/createSubmission", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public Map<String,String> createSubmission(@RequestBody Map<String,String> request) {
Map<String,String> errorMap = new HashMap<>();
if(!submissionService.createSubmission(request)) {
errorMap.put("error","true");
return errorMap;
}
errorMap.put("error","false");
return errorMap;
}
@PutMapping(value = "/createDraft", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public Map<String,String> createDraft(@RequestBody Map<String,String> request) {
Map<String,String> errorMap = new HashMap<>();
if(!submissionService.createDraft(request)) {
errorMap.put("error","true");
return errorMap;
}
errorMap.put("error","false");
return errorMap;
}
}
......@@ -21,10 +21,10 @@ public class UserInfoController {
@PostMapping(value = "/getClassList",consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public List<ClassEntity> getClasses(@RequestBody Map<String,String> id) {
if(id.isEmpty()) {
public List<ClassEntity> getClasses(@RequestBody Map<String,String> request) {
if(request.isEmpty()) {
return new ArrayList<>();
}
return userInfoService.getClassList(id.get("id"));
return userInfoService.getClassList(request.get("username"));
}
}
......@@ -11,21 +11,47 @@ import java.io.Serializable;
public class ClassEntity implements Serializable {
@Id
public String classCode;
private String classCode;
@Column
public String classname;
private String classname;
@Column
public String description;
private String description;
public ClassEntity(){
}
public ClassEntity(String class_code, String classname, String description){
this.classCode = class_code;
this.setClassCode(class_code);
this.setClassname(classname);
this.setDescription(description);
}
public String getClassCode() {
return classCode;
}
public void setClassCode(String classCode) {
this.classCode = classCode;
}
public String getClassname() {
return classname;
}
public void setClassname(String classname) {
this.classname = classname;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
......@@ -12,25 +12,74 @@ public class MinutePaperEntity implements Serializable {
@Id
@GeneratedValue(strategy= GenerationType.AUTO)
public int paperId;
private int paperId;
@Column
public String username;
private String username;
@Column
public String classCode;
private String classCode;
@Column
public String paperText;
private String paperText;
@Column
@DateTimeFormat
public Date openDate;
private Date openDate;
@Column
@DateTimeFormat
public Date closeDate;
private Date closeDate;
public MinutePaperEntity() {
}
public int getPaperId() {
return paperId;
}
public void setPaperId(int paperId) {
this.paperId = paperId;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getClassCode() {
return classCode;
}
public void setClassCode(String classCode) {
this.classCode = classCode;
}
public String getPaperText() {
return paperText;
}
public void setPaperText(String paperText) {
this.paperText = paperText;
}
public Date getOpenDate() {
return openDate;
}
public void setOpenDate(Date openDate) {
this.openDate = openDate;
}
public Date getCloseDate() {
return closeDate;
}
public void setCloseDate(Date closeDate) {
this.closeDate = closeDate;
}
}
......@@ -12,36 +12,84 @@ public class SubmissionEntity implements Serializable {
@Id
@GeneratedValue(strategy= GenerationType.AUTO)
public int submissionId;
private int submissionId;
@Column
public int paperId;
private int paperId;
@Column
public String username;
private String username;
@Column
public String classCode;
private String classCode;
@Column
public String submissionText;
private String submissionText;
@Column
public boolean isSubmitted;
private boolean isSubmitted;
@Column
@DateTimeFormat
public Date submissionDate;
private Date submissionDate;
public SubmissionEntity() {
}
public SubmissionEntity(int paperId, String username, String classCode, String submissionText, boolean isSubmitted, Date submissionDate) {
this.setPaperId(paperId);
this.setUsername(username);
this.setClassCode(classCode);
this.setSubmissionText(submissionText);
this.setSubmitted(isSubmitted);
this.setSubmissionDate(submissionDate);
}
public int getPaperId() {
return paperId;
}
public void setPaperId(int paperId) {
this.paperId = paperId;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getClassCode() {
return classCode;
}
public void setClassCode(String classCode) {
this.classCode = classCode;
}
public String getSubmissionText() {
return submissionText;
}
public void setSubmissionText(String submissionText) {
this.submissionText = submissionText;
this.isSubmitted = isSubmitted;
}
public boolean isSubmitted() {
return isSubmitted;
}
public void setSubmitted(boolean submitted) {
isSubmitted = submitted;
}
public Date getSubmissionDate() {
return submissionDate;
}
public void setSubmissionDate(Date submissionDate) {
this.submissionDate = submissionDate;
}
}
......@@ -9,12 +9,28 @@ import java.io.Serializable;
public class UserClassEntity implements Serializable {
@Id
public String username;
private String username;
@Id
public String classCode;
private String classCode;
public UserClassEntity() {
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getClassCode() {
return classCode;
}
public void setClassCode(String classCode) {
this.classCode = classCode;
}
}
......@@ -6,13 +6,30 @@ import java.io.Serializable;
@Entity
public class UserClassKey implements Serializable {
@Id
public String username;
private String username;
@Id
public String classCode;
private String classCode;
public UserClassKey(){
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getClassCode() {
return classCode;
}
public void setClassCode(String classCode) {
this.classCode = classCode;
}
}
......@@ -11,25 +11,57 @@ import java.io.Serializable;
public class UserEntity implements Serializable {
@Id
public String username;
private String username;
@Column
public String password;
private String password;
@Column
public String email;
private String email;
@Column
public boolean isLecturer;
private boolean isLecturer;
public UserEntity() {
}
public UserEntity(String username, String password, String email, boolean isLecturer){
this.setUsername(username);
this.setPassword(password);
this.setEmail(email);
this.setLecturer(isLecturer);
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
this.isLecturer = isLecturer;
}
public boolean isLecturer() {
return isLecturer;
}
public void setLecturer(boolean lecturer) {
isLecturer = lecturer;
}
public boolean isEmpty() {
......
......@@ -10,13 +10,30 @@ import java.io.Serializable;
@IdClass(UserMinutePaperKey.class)
@Table(name = "user_minute_papers")
public class UserMinutePaperEntity implements Serializable {
@Id
public String username;
private String username;
@Id
public int paperId;
private int paperId;
public UserMinutePaperEntity() {
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public int getPaperId() {
return paperId;
}
public void setPaperId(int paperId) {
this.paperId = paperId;
}
}
......@@ -6,12 +6,29 @@ import java.io.Serializable;
@Entity
public class UserMinutePaperKey implements Serializable {
@Id
public String username;
private String username;
@Id
public int paperId;
private int paperId;
public UserMinutePaperKey() {
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public int getPaperId() {
return paperId;
}
public void setPaperId(int paperId) {
this.paperId = paperId;
}
}
package com.diss.omppapp.pojo;
public class LoginPojo {
public String username;
public String password;
public LoginPojo(String username, String password) {
this.username = username;
this.password = password;
}
}
......@@ -11,5 +11,5 @@ import java.util.Optional;
public interface MinutePaperEntityRepository extends CrudRepository<MinutePaperEntity, Integer> {
Optional<MinutePaperEntity> findByPaperId(int paperId);
Optional<List<MinutePaperEntity>> findByUsername(String username);
Optional<List<MinutePaperEntity>> findByClassCode(String classCode);
Optional<List<MinutePaperEntity>> findByUsernameAndClassCode(String username,String classCode);
}
......@@ -9,5 +9,6 @@ import java.util.Optional;
@Repository
public interface SubmissionEntityRepository extends CrudRepository<SubmissionEntity, Integer> {
Optional<List<SubmissionEntity>> findByUsernameAndClassCode(String username, String classCode);
Optional<List<SubmissionEntity>> findByUsernameAndClassCodeAndSubmitted(String username, String classCode, boolean isSubmitted);
Optional<List<SubmissionEntity>> findByPaperIdAndSubmitted(int paperId, boolean isSubmitted);
}
......@@ -22,13 +22,13 @@ public class AuthService {
public Map<String,Boolean> authorise(String username, String password) {
Map<String,Boolean> map = new HashMap<>();
UserEntity entity = findByUsername(username);
if(entity.isEmpty() || !compare(password,entity.password)) {
if(entity.isEmpty() || !compare(password,entity.getPassword())) {
map.put("auth",false);
map.put("lec",false);
return map;
}
map.put("auth", true);
map.put("lec", entity.isLecturer);
map.put("lec", entity.isLecturer());
return map;
}
......@@ -48,7 +48,6 @@ public class AuthService {
return new UserEntity("","","",false);
}
private Boolean compare(String userHash, String dbHash) {
BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
return encoder.matches(userHash,dbHash);
......
package com.diss.omppapp.services;
import com.diss.omppapp.entities.MinutePaperEntity;
import com.diss.omppapp.repositories.MinutePaperEntityRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Optional;
@Component
public class MinutePaperService {
@Autowired
MinutePaperEntityRepository minutePaperEntityRepository;
public MinutePaperService() {
}
public List<MinutePaperEntity> getOpenPapers(String username) {
Date now = new Date();
Optional<List<MinutePaperEntity>> allPapers = minutePaperEntityRepository.findByUsername(username);
List<MinutePaperEntity> openPapers = new ArrayList<>();
if(!allPapers.isPresent()) {
return new ArrayList<>();
}
allPapers.get().forEach(e -> {
if(now.before(e.getCloseDate())) {
openPapers.add(e);
}
});
return openPapers;
}
public List<MinutePaperEntity> getClosedPapers(String username, String classCode) {
Date now = new Date();
Optional<List<MinutePaperEntity>> allPapers = minutePaperEntityRepository.findByUsernameAndClassCode(username,classCode);
List<MinutePaperEntity> closedPapers = new ArrayList<>();
if(!allPapers.isPresent()) {
return new ArrayList<>();
}
allPapers.get().forEach(e -> {
if(now.after(e.getCloseDate())) {
closedPapers.add(e);
}
});
return closedPapers;
}
public Boolean createMinutePaper() {
//TODO - 5. Allow lecturers to create papers. | 6. Allow lecturers to view created papers for a class.
return true;
}
}
package com.diss.omppapp.services;
import com.diss.omppapp.entities.SubmissionEntity;
import com.diss.omppapp.repositories.SubmissionEntityRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.persistence.criteria.CriteriaBuilder;
import java.sql.Date;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
@Component
public class SubmissionService {
@Autowired
private SubmissionEntityRepository submissionEntityRepository;
public SubmissionService(){
}
public List<SubmissionEntity> getClassSubmissions(String username, String classCode) {
Optional<List<SubmissionEntity>> possibleList = submissionEntityRepository.findByUsernameAndClassCodeAndSubmitted(username,classCode, true);
return possibleList.orElseGet(ArrayList::new);
}
public List<SubmissionEntity> getPaperSubmissions(String paperId) {
int id = -1;
try {
id = Integer.parseInt(paperId);
} catch (NumberFormatException nfe) {
return new ArrayList<>();
}
Optional<List<SubmissionEntity>> possibleList = submissionEntityRepository.findByPaperIdAndSubmitted(id, true);
return possibleList.orElseGet(ArrayList::new);
}
public Boolean createSubmission(Map<String,String> entity) {
SubmissionEntity submission;
try {
submission = createEntity(entity);
} catch (IllegalArgumentException iae) {
return false;
}
if(entity.get("isSubmitted").equals("true")) {
submission.setSubmitted(true);
} else {
return false;
}
submissionEntityRepository.save(submission);
return true;
}
public Boolean createDraft(Map<String,String> entity) {
SubmissionEntity submission;
try {
submission = createEntity(entity);
} catch (IllegalArgumentException iae) {
return false;
}
if(entity.get("isSubmitted").equals("false")) {
submission.setSubmitted(false);
} else {
return false;
}
submissionEntityRepository.save(submission);
return true;
}
private SubmissionEntity createEntity(Map<String, String> entityMap) throws IllegalArgumentException {
SubmissionEntity submission = new SubmissionEntity();
int paperId = Integer.parseInt(entityMap.get("paperId"));
submission.setPaperId(paperId);
submission.setUsername(entityMap.get("username"));
submission.setClassCode(entityMap.get("classCode"));
submission.setSubmissionText(entityMap.get("submissionText"));
submission.setSubmitted(false);
submission.setSubmissionDate(Date.valueOf(entityMap.get("submissionDate")));
return submission;
}
}
......@@ -32,7 +32,7 @@ public class UserInfoService {
}
usersClassesList.get().forEach(e -> {
Optional<ClassEntity> ce = classEntityRepository.findByClassCode(e.classCode);
Optional<ClassEntity> ce = classEntityRepository.findByClassCode(e.getClassCode());
ce.ifPresent(usersClasses::add);
});
......
import {Component, OnDestroy, OnInit} from '@angular/core';
import {LoginService} from './login.service';
import {LoginService} from '../services/login.service';
import {FormBuilder, FormGroup, Validators} from '@angular/forms';
import {Router} from '@angular/router';
import {takeWhile} from 'rxjs/operators';
import {error} from '@angular/compiler/src/util';
@Component({
selector: 'app-login',
......@@ -44,7 +43,7 @@ export class LoginComponent implements OnInit, OnDestroy {
if (data['lec']) {
this.router.navigate(['/ldashboard', { id: this.loginForm.controls.username.value }]);
} else {
this.router.navigate(['/sdashboard', { id: this.loginForm.controls.username.value }]).catch(error);
this.router.navigate(['/sdashboard', { id: this.loginForm.controls.username.value }]);
}
}
});
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment