Skip to content

Commit 91e0770

Browse files
author
Hattinger04
committed
rest services now better deserializable
1 parent 883e2e3 commit 91e0770

File tree

9 files changed

+152
-66
lines changed

9 files changed

+152
-66
lines changed
Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
11
package io.github.Hattinger04;
22

3+
import java.util.ConcurrentModificationException;
4+
import java.util.Iterator;
5+
36
import org.springframework.stereotype.Service;
47

58
import com.fasterxml.jackson.core.JsonProcessingException;
9+
import com.fasterxml.jackson.databind.JsonNode;
610
import com.fasterxml.jackson.databind.ObjectMapper;
711

8-
import io.github.Hattinger04.user.model.User;
9-
1012
@Service
1113
public class RestServices {
12-
// TODO: asking how to write better!
1314
private ObjectMapper objectMapper = new ObjectMapper();
1415

1516
/**
@@ -20,11 +21,29 @@ public class RestServices {
2021
*/
2122
public Object deserialize(Class<?> c, String json) {
2223
try {
23-
System.out.println(c == User.class);
2424
return objectMapper.readValue(json, c);
2525
} catch (JsonProcessingException e) {
2626
return null;
2727
}
2828
}
29-
29+
30+
public <T> Object[] deserializeMany(Class<?> c[], String json) {
31+
try {
32+
JsonNode rootNode = objectMapper.readTree(json);
33+
Object[] objects = new Object[c.length];
34+
int arr = 0;
35+
Iterator<String> iterate = rootNode.fieldNames();
36+
for(JsonNode node : rootNode) {
37+
objects[arr] = objectMapper.readValue(String.format("{\"%s\":%s}" , iterate.next().toString(), node.toString()) , c[arr]);
38+
arr++;
39+
}
40+
return objects;
41+
} catch(ConcurrentModificationException e) {
42+
System.out.println(e.getLocalizedMessage());
43+
return null;
44+
} catch (JsonProcessingException e) {
45+
System.out.println("error: " + e.getLocalizedMessage());
46+
return null;
47+
}
48+
}
3049
}

src/main/java/io/github/Hattinger04/course/CourseController.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
import io.github.Hattinger04.course.model.student.Student;
2020

2121
@RestController
22-
@RequestMapping("/TEACHER")
22+
@RequestMapping("/course")
2323
public class CourseController {
2424

2525
@Autowired
@@ -39,10 +39,12 @@ public class CourseController {
3939
@PostMapping("/getStudentByID")
4040
@ResponseBody
4141
public ResponseEntity<?> getStudentByID(@RequestBody String json) {
42-
// TODO: not sure if that will work - probably not
43-
Course course = (Course) restServices.deserialize(Course.class, json);
44-
Student student = (Student) restServices.deserialize(Student.class, json);
45-
return new ResponseEntity<>(courseService.getStudent(course, student), HttpStatus.OK);
42+
Object[] objects = restServices.deserializeMany(new Class[] {Course.class, Student.class}, json);
43+
Student student;
44+
if((student = courseService.getStudent((Course)objects[0], (Student)objects[1])) == null) {
45+
return new ResponseEntity<>("Student not exisiting", HttpStatus.NOT_FOUND);
46+
}
47+
return new ResponseEntity<>(student, HttpStatus.OK);
4648
}
4749

4850
/**
@@ -68,7 +70,7 @@ public ResponseEntity<?> getAllStudents(@RequestBody String json) {
6870
* @return
6971
*/
7072
@PreAuthorize("hasAuthority('TEACHER')")
71-
@PostMapping("/getAllStudents")
73+
@PostMapping("/getCourseTeacher")
7274
@ResponseBody
7375
public ResponseEntity<?> getCourseTeacher(@RequestBody String json) {
7476
Course course = (Course) restServices.deserialize(Course.class, json);

src/main/java/io/github/Hattinger04/course/model/CourseService.java

Lines changed: 63 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -22,137 +22,145 @@
2222
public class CourseService {
2323

2424
// TODO: Nothing(!) tested yet
25-
26-
private CourseRepository courseRepository;
27-
private ExerciseRepository exerciseRepository;
28-
private SolutionRepository solutionRepository;
29-
private TeacherRepository teacherRepository;
30-
private StudentRepository studentRepository;
31-
25+
26+
private CourseRepository courseRepository;
27+
private ExerciseRepository exerciseRepository;
28+
private SolutionRepository solutionRepository;
29+
private TeacherRepository teacherRepository;
30+
private StudentRepository studentRepository;
31+
3232
@Autowired
33-
public CourseService(CourseRepository courseRepository, ExerciseRepository exerciseRepository, SolutionRepository solutionRepository,
34-
TeacherRepository teacherRepository, StudentRepository studentRepository) {
33+
public CourseService(CourseRepository courseRepository, ExerciseRepository exerciseRepository,
34+
SolutionRepository solutionRepository, TeacherRepository teacherRepository,
35+
StudentRepository studentRepository) {
3536
this.courseRepository = courseRepository;
3637
this.exerciseRepository = exerciseRepository;
3738
this.solutionRepository = solutionRepository;
38-
this.teacherRepository = teacherRepository;
39-
this.studentRepository = studentRepository;
39+
this.teacherRepository = teacherRepository;
40+
this.studentRepository = studentRepository;
4041
}
4142

4243
public Course createCourse(Course course) {
43-
return courseRepository.save(course);
44+
return courseRepository.save(course);
4445
}
46+
4547
public void deleteCourse(Course course) {
4648
courseRepository.delete(course);
4749
}
48-
50+
4951
public Course getCourseByID(int id) {
50-
return courseRepository.findById(id);
52+
return courseRepository.findById(id);
5153
}
52-
54+
5355
public Course getCourseByName(String name) {
54-
return courseRepository.findByName(name);
56+
return courseRepository.findByName(name);
5557
}
56-
58+
5759
public Student getStudent(Course course, Student student) {
58-
Student s;
59-
if((s = studentRepository.findById(student.getId())) == null) { // TODO: if not tested!
60-
s = studentRepository.findByName(student.getUser().getUsername());
60+
Student s = null;
61+
try {
62+
if ((s = studentRepository.findById(student.getId())) == null) { // TODO: if not tested!
63+
s = studentRepository.findByName(student.getUser().getUsername());
64+
}
65+
} catch (NullPointerException e) {
66+
return s;
6167
}
6268
return s;
6369
}
64-
70+
6571
public List<Student> getAllStudents(Course course) {
6672
return courseRepository.getAllStudents(course.getId());
6773
}
68-
74+
6975
public Teacher getCourseTeacher(Course course) {
70-
return courseRepository.getCourseTeacher(course.getId());
76+
return courseRepository.getCourseTeacher(course.getId());
7177
}
72-
78+
7379
public void setCourseTeacher(Course course, Teacher teacher) {
7480
teacherRepository.save(teacher);
7581
courseRepository.addUserToCourse(teacher.getId(), course.getId());
7682
}
77-
83+
7884
public void deleteCourseTeacher(Course course, Teacher teacher) {
7985
teacherRepository.delete(teacher);
8086
courseRepository.removeUserFromCourse(teacher.getId(), course.getId());
8187
}
82-
83-
// TODO: working with student / teacher table
88+
89+
// TODO: working with student / teacher table
8490
public void addStudentToCourse(Course course, Student student) {
85-
studentRepository.save(student);
91+
studentRepository.save(student);
8692
courseRepository.addUserToCourse(student.getId(), course.getId());
8793
}
88-
94+
8995
public void addStudentsToCourse(Course course, Set<Student> students) {
90-
for(Student student : students) {
91-
studentRepository.save(student);
96+
for (Student student : students) {
97+
studentRepository.save(student);
9298
courseRepository.addUserToCourse(student.getId(), course.getId());
9399
}
94100
}
95-
101+
96102
public void removeStudentFromCourse(Course course, Student student) {
97103
studentRepository.delete(student);
98104
courseRepository.removeUserFromCourse(student.getId(), student.getId());
99105
}
100-
106+
101107
public void removeStudentsFromCourse(Course course, Set<Student> students) {
102-
for(Student student : students) {
108+
for (Student student : students) {
103109
studentRepository.delete(student);
104110
courseRepository.removeUserFromCourse(student.getId(), student.getId());
105111
}
106112
}
107-
113+
108114
public boolean isUserTeacher(Course course, User user) {
109-
return courseRepository.isUserTeacher(user.getId(), course.getId()) != 0;
115+
return courseRepository.isUserTeacher(user.getId(), course.getId()) != 0;
110116
}
111-
117+
112118
public boolean isUserStudent(Course course, User user) {
113-
return courseRepository.isUserStudent(user.getId(), course.getId()) != 0;
119+
return courseRepository.isUserStudent(user.getId(), course.getId()) != 0;
114120
}
115-
121+
116122
public boolean isUserInCourse(Course course, User user) {
117-
return courseRepository.isUserStudent(user.getId(), course.getId()) != 0 || courseRepository.isUserTeacher(user.getId(), course.getId()) != 0;
123+
return courseRepository.isUserStudent(user.getId(), course.getId()) != 0
124+
|| courseRepository.isUserTeacher(user.getId(), course.getId()) != 0;
118125
}
119-
126+
120127
public Exercise createExercise(Exercise exercise) {
121-
return exerciseRepository.save(exercise);
128+
return exerciseRepository.save(exercise);
122129
}
130+
123131
public void deleteExercise(Exercise exercise) {
124132
exerciseRepository.delete(exercise);
125133
}
126-
134+
127135
public Exercise getExerciseByID(int id) {
128-
return exerciseRepository.findById(id);
136+
return exerciseRepository.findById(id);
129137
}
138+
130139
/**
131-
* Get exercise by course_id and course name
140+
* Get exercise by course_id and course name
132141
*
133142
* @param course_id
134143
* @param name
135144
* @return
136145
*/
137146
public Exercise getExerciseByCourse(int course_id, String name) {
138-
return exerciseRepository.findByCourse(course_id, name);
147+
return exerciseRepository.findByCourse(course_id, name);
139148
}
140-
141149

142-
143-
144-
public Solution createSolution(Solution solution) {
145-
return solutionRepository.save(solution);
150+
public Solution createSolution(Solution solution) {
151+
return solutionRepository.save(solution);
146152
}
153+
147154
public void deleteSolution(Solution solution) {
148155
solutionRepository.delete(solution);
149156
}
150157

151158
public Solution getSolutionByID(int id) {
152-
return solutionRepository.findById(id);
159+
return solutionRepository.findById(id);
153160
}
161+
154162
/**
155-
* Get solution by exercise_id and exercise name
163+
* Get solution by exercise_id and exercise name
156164
*
157165
* @param exercise_id
158166
* @param name
@@ -161,6 +169,6 @@ public Solution getSolutionByID(int id) {
161169
public Solution getSolutionByExercise(int exercise_id, String name) {
162170
return solutionRepository.findByExercise(exercise_id, name);
163171
}
164-
165-
// TODO: teacher correcting students work
172+
173+
// TODO: teacher correcting students work
166174
}

src/main/java/io/github/Hattinger04/course/model/course/Course.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,25 @@
1313
import javax.persistence.ManyToMany;
1414
import javax.persistence.Table;
1515

16+
import com.fasterxml.jackson.annotation.JsonTypeInfo;
17+
import com.fasterxml.jackson.annotation.JsonTypeInfo.As;
18+
import com.fasterxml.jackson.annotation.JsonTypeName;
19+
1620
import lombok.AllArgsConstructor;
21+
import lombok.Builder;
1722
import lombok.Data;
23+
import lombok.NoArgsConstructor;
1824
import lombok.ToString;
1925

2026
@Entity
2127
@Table(name = "course")
2228
@Data
29+
@Builder
30+
@NoArgsConstructor
2331
@AllArgsConstructor
2432
@ToString
33+
@JsonTypeInfo(include=As.WRAPPER_OBJECT, use=com.fasterxml.jackson.annotation.JsonTypeInfo.Id.NAME, property="type")
34+
@JsonTypeName("course")
2535
public class Course {
2636

2737
public Course(String name) {

src/main/java/io/github/Hattinger04/course/model/exercise/Exercise.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,27 @@
99
import javax.persistence.ManyToOne;
1010
import javax.persistence.Table;
1111

12+
import com.fasterxml.jackson.annotation.JsonTypeInfo;
13+
import com.fasterxml.jackson.annotation.JsonTypeName;
14+
import com.fasterxml.jackson.annotation.JsonTypeInfo.As;
15+
1216
import io.github.Hattinger04.course.model.course.Course;
1317
import lombok.AllArgsConstructor;
18+
import lombok.Builder;
1419
import lombok.Data;
20+
import lombok.NoArgsConstructor;
1521
import lombok.ToString;
1622

1723
@Entity
1824
@Table(name = "exercise")
1925
@Data
26+
@Builder
27+
@NoArgsConstructor
2028
@AllArgsConstructor
2129
@ToString
30+
@JsonTypeInfo(include=As.WRAPPER_OBJECT, use=com.fasterxml.jackson.annotation.JsonTypeInfo.Id.NAME, property="type")
31+
@JsonTypeName("course")
32+
2233
public class Exercise {
2334

2435
public Exercise(Course course, String name) {

src/main/java/io/github/Hattinger04/course/model/solution/Solution.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package io.github.Hattinger04.course.model.solution;
22

3+
34
import javax.persistence.Column;
45
import javax.persistence.Entity;
56
import javax.persistence.GeneratedValue;
@@ -9,16 +10,27 @@
910
import javax.persistence.ManyToOne;
1011
import javax.persistence.Table;
1112

13+
import com.fasterxml.jackson.annotation.JsonTypeInfo;
14+
import com.fasterxml.jackson.annotation.JsonTypeName;
15+
import com.fasterxml.jackson.annotation.JsonTypeInfo.As;
16+
1217
import io.github.Hattinger04.course.model.exercise.Exercise;
1318
import lombok.AllArgsConstructor;
19+
import lombok.Builder;
1420
import lombok.Data;
21+
import lombok.NoArgsConstructor;
1522
import lombok.ToString;
1623

1724
@Entity
1825
@Table(name = "solution")
1926
@Data
27+
@Builder
28+
@NoArgsConstructor
2029
@AllArgsConstructor
2130
@ToString
31+
@JsonTypeInfo(include=As.WRAPPER_OBJECT, use=com.fasterxml.jackson.annotation.JsonTypeInfo.Id.NAME, property="type")
32+
@JsonTypeName("course")
33+
2234
public class Solution {
2335

2436
public Solution(Exercise exercise, String text) {

0 commit comments

Comments
 (0)