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

commit #6 - adding repositories, entities, and controllers for classes, also...

commit #6 - adding repositories, entities, and controllers for classes, also added some services and components to frontend
parent 015f4841
No related branches found
No related tags found
No related merge requests found
Showing
with 264 additions and 96 deletions
......@@ -6,6 +6,7 @@ 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.Map;
......@@ -17,6 +18,7 @@ class AuthController {
private AuthService authService;
@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);
}
......
package com.diss.omppapp.api;
import com.diss.omppapp.entities.ClassEntity;
import com.diss.omppapp.services.UserInfoService;
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 UserInfoController {
@Autowired
private UserInfoService userInfoService;
@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()) {
return new ArrayList<>();
}
return userInfoService.getClassList(id.get("id"));
}
}
package com.diss.omppapp.database;
import com.diss.omppapp.entities.UserEntity;
import com.diss.omppapp.repositories.UserEntityRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Optional;
@Component
public class HibernateDBImpl implements ICommonDB {
@Autowired
private UserEntityRepository userEntityRepository;
@Override
public UserEntity findByUsername(String s) {
Optional<UserEntity> entity;
try {
entity = userEntityRepository.findByUsername(s);
} catch (NullPointerException npe) {
return getEmptyUserEntity();
}
return entity.orElseGet(this::getEmptyUserEntity);
}
private UserEntity getEmptyUserEntity() {
return new UserEntity("","","",false);
}
}
package com.diss.omppapp.database;
import com.diss.omppapp.entities.UserEntity;
public interface ICommonDB {
UserEntity findByUsername(String s);
}
package com.diss.omppapp.entities;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import java.io.Serializable;
@Entity
@Table(name = "omp_class")
public class ClassEntity implements Serializable {
@Id
public String classCode;
@Column
public String classname;
@Column
public String description;
public ClassEntity(){
}
public ClassEntity(String class_code, String classname, String description){
this.classCode = class_code;
this.classname = classname;
this.description = description;
}
}
package com.diss.omppapp.entities;
import javax.persistence.*;
import java.io.Serializable;
@Entity
@IdClass(UserClassKey.class)
@Table(name = "user_omp_classes")
public class UserClassEntity implements Serializable {
@Id
public String username;
@Id
public String classCode;
public UserClassEntity() {
}
}
package com.diss.omppapp.entities;
import javax.persistence.Entity;
import javax.persistence.Id;
import java.io.Serializable;
@Entity
public class UserClassKey implements Serializable {
@Id
public String username;
@Id
public String classCode;
public UserClassKey(){
}
}
package com.diss.omppapp.repositories;
import com.diss.omppapp.entities.ClassEntity;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
import java.util.Optional;
@Repository
public interface ClassEntityRepository extends CrudRepository<ClassEntity, String> {
Optional<ClassEntity> findByClassCode(String s);
}
package com.diss.omppapp.repositories;
import com.diss.omppapp.entities.UserClassEntity;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Optional;
@Repository
public interface UserClassEntityRepository extends CrudRepository<UserClassEntity, String> {
Optional<List<UserClassEntity>> findByUsername(String username);
Optional<List<UserClassEntity>> findByClassCode(String classCode);
}
package com.diss.omppapp.services;
import com.diss.omppapp.database.ICommonDB;
import com.diss.omppapp.entities.UserEntity;
import com.diss.omppapp.repositories.UserEntityRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
@Component
public class AuthService {
@Autowired
private ICommonDB iCommonDB;
private UserEntityRepository userEntityRepository;
public AuthService() {
}
public Map<String,Boolean> authorise(String username, String password) {
Map<String,Boolean> map = new HashMap<>();
UserEntity entity = iCommonDB.findByUsername(username);
UserEntity entity = findByUsername(username);
if(entity.isEmpty() || !compare(password,entity.password)) {
map.put("auth",false);
map.put("lec",false);
......@@ -31,6 +32,23 @@ public class AuthService {
return map;
}
private UserEntity findByUsername(String s) {
Optional<UserEntity> entity;
try {
entity = userEntityRepository.findByUsername(s);
} catch (NullPointerException npe) {
return getEmptyUserEntity();
}
return entity.orElseGet(this::getEmptyUserEntity);
}
private UserEntity getEmptyUserEntity() {
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.ClassEntity;
import com.diss.omppapp.entities.UserClassEntity;
import com.diss.omppapp.repositories.ClassEntityRepository;
import com.diss.omppapp.repositories.UserClassEntityRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
@Component
public class UserInfoService {
@Autowired
UserClassEntityRepository userClassEntityRepository;
@Autowired
ClassEntityRepository classEntityRepository;
public UserInfoService() {
}
public List<ClassEntity> getClassList(String id) {
Optional<List<UserClassEntity>> usersClassesList = userClassEntityRepository.findByUsername(id);
List<ClassEntity> usersClasses = new ArrayList<>();
if (!usersClassesList.isPresent()) {
return new ArrayList<>();
}
usersClassesList.get().forEach(e -> {
Optional<ClassEntity> ce = classEntityRepository.findByClassCode(e.classCode);
ce.ifPresent(usersClasses::add);
});
return usersClasses;
}
}
......@@ -23,7 +23,7 @@
</div>
<div class="form-group">
<div>
<button type="submit" [disabled]="!loginForm.valid">Login</button>
<button class="btn btn-primary" type="submit" [disabled]="!loginForm.valid">Login</button>
</div>
</div>
</form>
......
......@@ -3,6 +3,7 @@ import {LoginService} from './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',
......@@ -10,8 +11,8 @@ import {takeWhile} from 'rxjs/operators';
styleUrls: ['./login.component.css']
})
export class LoginComponent implements OnInit, OnDestroy {
private loginForm: FormGroup;
private isSubmitted: Boolean = false;
public loginForm: FormGroup;
public isSubmitted: Boolean = false;
private alive = true;
constructor(private loginService: LoginService,
......@@ -43,7 +44,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 }]);
this.router.navigate(['/sdashboard', { id: this.loginForm.controls.username.value }]).catch(error);
}
}
});
......
import {Injectable} from '@angular/core';
import {HttpClient, HttpHeaders} from '@angular/common/http';
import {HttpErrorService} from '../ErrorComponents/http-error.service';
import {catchError, takeUntil, takeWhile} from 'rxjs/operators';
import {catchError} from 'rxjs/operators';
const httpOptions = {
headers: new HttpHeaders({
......
#papers {
overflow: scroll;
height: 80vh;
}
#classes {
/*background-color: lawngreen;*/
}
<div class="row">
<div id="classes" class="col">
<h1>CLASSES</h1>
<div class="container"> <!-- TODO: add styling -->
<span class="row">Class Name: ABCD</span>
<span class="row">Description</span>
<span class="row"><button (click)="getClassList()">View minute-papers</button></span>
</div>
</div>
<div id="papers" class="col">
<div class="container">
<ul class="list-group">
<li class="list-group-item">Name</li>
<li class="list-group-item">Class</li>
<li class="list-group-item">Description</li>
<li class="list-group-item">Open until</li>
<li class="list-group-item"> **BUTTON**</li>
</ul>
</div>
<div class="container">
<ul class="list-group">
<li class="list-group-item">Name</li>
<li class="list-group-item">Class</li>
<li class="list-group-item">Description</li>
<li class="list-group-item">Open until</li>
<li class="list-group-item"> **BUTTON**</li>
</ul>
</div>
<div class="container">
<ul class="list-group">
<li class="list-group-item">Name</li>
<li class="list-group-item">Class</li>
<li class="list-group-item">Description</li>
<li class="list-group-item">Open until</li>
<li class="list-group-item"> **BUTTON**</li>
</ul>
</div>
<div class="container">
<ul class="list-group">
<li class="list-group-item">Name</li>
<li class="list-group-item">Class</li>
<li class="list-group-item">Description</li>
<li class="list-group-item">Open until</li>
<li class="list-group-item"> **BUTTON**</li>
</ul>
<div class="container"> <!-- TODO: add styling -->
<span class="row">Class Name: ABCD</span>
<span class="row">Minute-paper: OMP</span>
<span class="row">Open until: 00/00/0000</span>
<span class="row"><button>Respond</button></span>
</div>
</div>
</div>
import {Component} from '@angular/core';
import {Component, OnDestroy, OnInit} from '@angular/core';
import {Observable} from 'rxjs';
import {OmpClass} from 'src/app/dao/omp-class';
import {StudentInfoService} from 'src/app/StudentComponents/student-info.service';
@Component({
selector: 'app-student-dashboard',
templateUrl: './student-dashboard.component.html',
styleUrls: ['./student-dashboard.component.css']
})
export class StudentDashboardComponent {
export class StudentDashboardComponent implements OnInit, OnDestroy {
public studentId: String;
private isAlive = true;
private classes$: Observable<OmpClass[]>;
constructor(private studentInfoService: StudentInfoService) {}
ngOnInit(): void {
// this.classes$ = this.route.paramMap.pipe(
// switchMap(params => {
// this.studentId = params.get('id');
// return this.studentInfoService.getClasses(this.studentId);
// })
// );
}
ngOnDestroy(): void {
}
public getClassList() {
this.studentInfoService.getUserClasses('student2');
}
}
import {Injectable} from '@angular/core';
import {OmpClass} from 'src/app/dao/omp-class';
import {HttpClient, HttpHeaders} from '@angular/common/http';
import {HttpErrorService} from 'src/app/ErrorComponents/http-error.service';
const httpOptions = {
headers: new HttpHeaders({
'Content-Type': 'application/json'
})
};
@Injectable()
export class StudentInfoService {
constructor(private http: HttpClient, private errorService: HttpErrorService) {
}
public getUserClasses(id: String): OmpClass[] {
this.http.post('http://localhost:8080/getClassList', {id: id}, httpOptions).subscribe(res => {
});
return null;
}
}
......@@ -6,6 +6,7 @@ import {StudentRoutesModule} from './student-routes.module';
import {StudentDashboardComponent} from 'src/app/StudentComponents/StudentDashboardComponents/student-dashboard.component';
import {NavbarComponent} from 'src/app/NavBarComponents/navbar.component';
import {NgbAccordionModule} from '@ng-bootstrap/ng-bootstrap';
import {StudentInfoService} from './student-info.service';
@NgModule({
declarations: [
......@@ -19,6 +20,9 @@ import {NgbAccordionModule} from '@ng-bootstrap/ng-bootstrap';
NgbAccordionModule,
ReactiveFormsModule,
StudentRoutesModule
],
providers: [
StudentInfoService
]
})
export class StudentRootModule { }
<!--<div class="container-fluid">-->
<router-outlet></router-outlet>
<!--</div>-->
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