added errorDto

parent 5f530df1
...@@ -5,17 +5,27 @@ ...@@ -5,17 +5,27 @@
</component> </component>
<component name="ChangeListManager"> <component name="ChangeListManager">
<list default="true" id="bd185af2-024c-4245-af2c-5893b8b011d9" name="Changes" comment=""> <list default="true" id="bd185af2-024c-4245-af2c-5893b8b011d9" name="Changes" comment="">
<change afterPath="$PROJECT_DIR$/src/main/java/com/example/student/constant/Constant.java" afterDir="false" /> <change afterPath="$PROJECT_DIR$/src/main/java/com/example/student/mapper/StudentMapper.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/com/example/student/dto/ErrorDto.java" afterDir="false" /> <change afterPath="$PROJECT_DIR$/../../teacher-service/teacher-service/src/main/java/com/example/teacher/dto/ErrorDto.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/com/example/student/dto/StudentDto.java" afterDir="false" /> <change afterPath="$PROJECT_DIR$/../../teacher-service/teacher-service/src/main/java/com/example/teacher/dto/TeacherDto.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/../../teacher-service/teacher-service/src/main/java/com/example/teacher/mapper/TeacherMapper.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/pom.xml" afterDir="false" /> <change beforePath="$PROJECT_DIR$/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/pom.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/com/example/student/controller/StudentController.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/example/student/controller/StudentController.java" afterDir="false" /> <change beforePath="$PROJECT_DIR$/src/main/java/com/example/student/controller/StudentController.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/example/student/controller/StudentController.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/com/example/student/controller/StudentTeacherResponseVO.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/example/student/responseobject/StudentTeacherResponseVO.java" afterDir="false" /> <change beforePath="$PROJECT_DIR$/src/main/java/com/example/student/dto/StudentDto.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/example/student/dto/StudentDto.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/com/example/student/dto/TeacherDto.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/example/student/dto/TeacherDto.java" afterDir="false" /> <change beforePath="$PROJECT_DIR$/src/main/java/com/example/student/dto/TeacherDto.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/example/student/dto/TeacherDto.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/com/example/student/feign/FeignFallBack.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/example/student/feign/FeignFallBack.java" afterDir="false" /> <change beforePath="$PROJECT_DIR$/src/main/java/com/example/student/feign/FeignFallBack.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/example/student/feign/FeignFallBack.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/com/example/student/feign/FeignService.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/example/student/feign/FeignService.java" afterDir="false" /> <change beforePath="$PROJECT_DIR$/src/main/java/com/example/student/responseobject/StudentTeacherResponseVO.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/example/student/responseobject/StudentTeacherResponseVO.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/com/example/student/model/Student.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/example/student/model/Student.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/com/example/student/service/StudentService.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/example/student/service/StudentService.java" afterDir="false" /> <change beforePath="$PROJECT_DIR$/src/main/java/com/example/student/service/StudentService.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/example/student/service/StudentService.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/target/classes/com/example/student/controller/StudentController.class" beforeDir="false" afterPath="$PROJECT_DIR$/target/classes/com/example/student/controller/StudentController.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/target/classes/com/example/student/dto/StudentDto.class" beforeDir="false" afterPath="$PROJECT_DIR$/target/classes/com/example/student/dto/StudentDto.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/target/classes/com/example/student/dto/TeacherDto.class" beforeDir="false" afterPath="$PROJECT_DIR$/target/classes/com/example/student/dto/TeacherDto.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/target/classes/com/example/student/feign/FeignFallBack.class" beforeDir="false" afterPath="$PROJECT_DIR$/target/classes/com/example/student/feign/FeignFallBack.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/target/classes/com/example/student/responseobject/StudentTeacherResponseVO.class" beforeDir="false" afterPath="$PROJECT_DIR$/target/classes/com/example/student/responseobject/StudentTeacherResponseVO.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/target/classes/com/example/student/service/StudentService.class" beforeDir="false" afterPath="$PROJECT_DIR$/target/classes/com/example/student/service/StudentService.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/../../teacher-service/teacher-service/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/../../teacher-service/teacher-service/pom.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/../../teacher-service/teacher-service/src/main/java/com/example/teacher/controller/TeacherController.java" beforeDir="false" afterPath="$PROJECT_DIR$/../../teacher-service/teacher-service/src/main/java/com/example/teacher/controller/TeacherController.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/../../teacher-service/teacher-service/src/main/java/com/example/teacher/service/TeacherService.java" beforeDir="false" afterPath="$PROJECT_DIR$/../../teacher-service/teacher-service/src/main/java/com/example/teacher/service/TeacherService.java" afterDir="false" />
</list> </list>
<option name="SHOW_DIALOG" value="false" /> <option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" /> <option name="HIGHLIGHT_CONFLICTS" value="true" />
...@@ -26,6 +36,7 @@ ...@@ -26,6 +36,7 @@
<option name="RECENT_TEMPLATES"> <option name="RECENT_TEMPLATES">
<list> <list>
<option value="Class" /> <option value="Class" />
<option value="Interface" />
</list> </list>
</option> </option>
</component> </component>
...@@ -55,7 +66,7 @@ ...@@ -55,7 +66,7 @@
&quot;keyToString&quot;: { &quot;keyToString&quot;: {
&quot;RunOnceActivity.OpenProjectViewOnStart&quot;: &quot;true&quot;, &quot;RunOnceActivity.OpenProjectViewOnStart&quot;: &quot;true&quot;,
&quot;RunOnceActivity.ShowReadmeOnStart&quot;: &quot;true&quot;, &quot;RunOnceActivity.ShowReadmeOnStart&quot;: &quot;true&quot;,
&quot;last_opened_file_path&quot;: &quot;/Users/aqadeer/Desktop/java-training-project-1-master/student-service/student-service&quot;, &quot;last_opened_file_path&quot;: &quot;/Users/aqadeer/Desktop/java-training-project-complete/student-service/student-service&quot;,
&quot;project.structure.last.edited&quot;: &quot;Modules&quot;, &quot;project.structure.last.edited&quot;: &quot;Modules&quot;,
&quot;project.structure.proportion&quot;: &quot;0.0&quot;, &quot;project.structure.proportion&quot;: &quot;0.0&quot;,
&quot;project.structure.side.proportion&quot;: &quot;0.0&quot; &quot;project.structure.side.proportion&quot;: &quot;0.0&quot;
......
...@@ -57,9 +57,18 @@ ...@@ -57,9 +57,18 @@
<artifactId>spring-cloud-starter-circuitbreaker-resilience4j</artifactId> <artifactId>spring-cloud-starter-circuitbreaker-resilience4j</artifactId>
</dependency> </dependency>
<dependency> <dependency>
<groupId>javax.validation</groupId> <groupId>org.mapstruct</groupId>
<artifactId>validation-api</artifactId> <artifactId>mapstruct</artifactId>
<version>2.0.1.Final</version> <version>1.4.2.Final</version>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>1.4.2.Final</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency> </dependency>
</dependencies> </dependencies>
<dependencyManagement> <dependencyManagement>
......
package com.example.student.controller; package com.example.student.controller;
import com.example.student.dto.StudentDto;
import com.example.student.dto.TeacherDto; import com.example.student.dto.TeacherDto;
import com.example.student.feign.FeignService; import com.example.student.feign.FeignService;
import com.example.student.model.Student;
import com.example.student.responseobject.StudentTeacherResponseVO; import com.example.student.responseobject.StudentTeacherResponseVO;
import com.example.student.service.StudentService; import com.example.student.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -16,6 +15,8 @@ import java.util.Date; ...@@ -16,6 +15,8 @@ import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
import static org.springframework.http.ResponseEntity.status;
@RestController @RestController
@RequestMapping("/students") @RequestMapping("/students")
public class StudentController { public class StudentController {
...@@ -28,55 +29,55 @@ public class StudentController { ...@@ -28,55 +29,55 @@ public class StudentController {
// POST methods // POST methods
@PostMapping @PostMapping
public ResponseEntity<Student> createStudent(@RequestBody Student student) { public ResponseEntity<String> createStudent(@RequestBody StudentDto studentDto) {
Student myStudent = studentService.createAndUpdateStudent(student); boolean isComplete = studentService.createAndUpdateStudent(0, studentDto);
return new ResponseEntity<Student>(myStudent, HttpStatus.CREATED); ResponseEntity<String> responseEntity;
if (isComplete) {
responseEntity = status(HttpStatus.OK).body("Student created successfully.");
return responseEntity;
}
responseEntity = status(HttpStatus.BAD_REQUEST).body("Failed to create Student.");
return responseEntity;
} }
// GET methods // GET methods
@GetMapping("/{id}") @GetMapping("/{id}")
public ResponseEntity<Optional<Student>> findStudentById(@PathVariable int id) { public ResponseEntity<Optional<StudentDto>> findStudentById(@PathVariable int id) {
Optional<Student> myStudent = studentService.findStudentById(id); Optional<StudentDto> myStudent = studentService.findStudentById(id);
if (myStudent.isPresent()) { if (myStudent.isPresent()) {
return new ResponseEntity<Optional<Student>>(myStudent, HttpStatus.FOUND); return new ResponseEntity<Optional<StudentDto>>(myStudent, HttpStatus.FOUND);
} }
return new ResponseEntity<>(HttpStatus.NOT_FOUND); return new ResponseEntity<>(HttpStatus.NOT_FOUND);
} }
@GetMapping("/all") @GetMapping("/all")
public ResponseEntity<List<Student>> findAllStudents() { public ResponseEntity<List<StudentDto>> findAllStudents() {
List<Student> studentList = studentService.findAllStudents(); List<StudentDto> studentList = studentService.findAllStudents();
return new ResponseEntity<List<Student>>(studentList, HttpStatus.OK); return new ResponseEntity<List<StudentDto>>(studentList, HttpStatus.OK);
} }
@GetMapping("/age/{age}") @GetMapping("/age/{age}")
public ResponseEntity<List<Student>> findStudentByAge(@PathVariable int age) { public ResponseEntity<List<StudentDto>> findStudentByAge(@PathVariable int age) {
List<Student> studentList = studentService.findStudentByAge(age); List<StudentDto> studentList = studentService.findStudentByAge(age);
return new ResponseEntity<List<Student>>(studentList, HttpStatus.FOUND); return new ResponseEntity<List<StudentDto>>(studentList, HttpStatus.FOUND);
} }
@GetMapping("/hobby/{hobby}") @GetMapping("/hobby/{hobby}")
public ResponseEntity<List<Student>> findStudentByHobby(@PathVariable String hobby) { public ResponseEntity<List<StudentDto>> findStudentByHobby(@PathVariable String hobby) {
List<Student> studentList = studentService.findStudentByHobby(hobby); List<StudentDto> studentList = studentService.findStudentByHobby(hobby);
return new ResponseEntity<List<Student>>(studentList, HttpStatus.FOUND); return new ResponseEntity<List<StudentDto>>(studentList, HttpStatus.FOUND);
} }
@GetMapping("/teacher/name/{teacherName}") @GetMapping("/teacher/name/{teacherName}")
public ResponseEntity findStudentByTeacherName(@PathVariable String teacherName) { public ResponseEntity findStudentByTeacherName(@PathVariable String teacherName) {
ResponseEntity<TeacherDto> myTeacher = feignService.findTeacherByName(teacherName); List<StudentDto> studentList = studentService.findTeacherByName(teacherName);
int teacherId = myTeacher.getBody().getId(); return new ResponseEntity<List<StudentDto>>(studentList, HttpStatus.FOUND);
if (teacherId == 404) {
return new ResponseEntity<>("Teacher service is not available", HttpStatus.OK);
}
System.out.println(teacherId);
List<Student> studentList = studentService.findStudentByTeacherId(teacherId);
return new ResponseEntity<List<Student>>(studentList, HttpStatus.FOUND);
} }
@GetMapping("/teacher/age/{age}") @GetMapping("/teacher/age/{age}")
public ResponseEntity<StudentTeacherResponseVO> findStudentTeacherByAge(@PathVariable int age) { public ResponseEntity<StudentTeacherResponseVO> findStudentTeacherByAge(@PathVariable int age) {
List<TeacherDto> teacherList = feignService.findTeacherByAge(age).getBody(); List<TeacherDto> teacherList = studentService.findTeacherByAge(age);
List<Student> studentList = studentService.findStudentByAge(age); List<StudentDto> studentList = studentService.findStudentByAge(age);
StudentTeacherResponseVO studentTeacherResponseVO = new StudentTeacherResponseVO(); StudentTeacherResponseVO studentTeacherResponseVO = new StudentTeacherResponseVO();
studentTeacherResponseVO.studentList = studentList; studentTeacherResponseVO.studentList = studentList;
studentTeacherResponseVO.teacherList = teacherList; studentTeacherResponseVO.teacherList = teacherList;
...@@ -84,23 +85,28 @@ public class StudentController { ...@@ -84,23 +85,28 @@ public class StudentController {
} }
@GetMapping(value = "/date/before") @GetMapping(value = "/date/before")
public ResponseEntity<List<Student>> findStudentBeforeADateOfBirth(@DateTimeFormat(pattern = "dd:MM:yyyy") @RequestParam(value = "date") Date dateOfBirth) { public ResponseEntity<List<StudentDto>> findStudentBeforeADateOfBirth(@DateTimeFormat(pattern = "dd:MM:yyyy") @RequestParam(value = "date") Date dateOfBirth) {
List<Student> studentList = studentService.findStudentBeforeADateOfBirth(dateOfBirth); List<StudentDto> studentList = studentService.findStudentBeforeADateOfBirth(dateOfBirth);
return new ResponseEntity<List<Student>>(studentList, HttpStatus.FOUND); return new ResponseEntity<List<StudentDto>>(studentList, HttpStatus.FOUND);
} }
@GetMapping(value = "/date/after") @GetMapping(value = "/date/after")
public ResponseEntity<List<Student>> findStudentAfterADateOfBirth(@DateTimeFormat(pattern = "dd:MM:yyyy") @RequestParam(value = "date") Date dateOfBirth) { public ResponseEntity<List<StudentDto>> findStudentAfterADateOfBirth(@DateTimeFormat(pattern = "dd:MM:yyyy") @RequestParam(value = "date") Date dateOfBirth) {
List<Student> studentList = studentService.findStudentAfterADateOfBirth(dateOfBirth); List<StudentDto> studentList = studentService.findStudentAfterADateOfBirth(dateOfBirth);
return new ResponseEntity<List<Student>>(studentList, HttpStatus.FOUND); return new ResponseEntity<List<StudentDto>>(studentList, HttpStatus.FOUND);
} }
// PUT methods // PUT methods
@PutMapping("/{id}") @PutMapping("/{id}")
public ResponseEntity<Student> updateStudent(@PathVariable int id, @RequestBody Student student) { public ResponseEntity<String> updateStudent(@PathVariable int id, @RequestBody StudentDto studentDto) {
student.setId(id); boolean isComplete = studentService.createAndUpdateStudent(id, studentDto);
Student myStudent = studentService.createAndUpdateStudent(student); ResponseEntity<String> responseEntity;
return new ResponseEntity<Student>(myStudent, HttpStatus.ACCEPTED); if (isComplete) {
responseEntity = status(HttpStatus.OK).body("Student updated successfully.");
return responseEntity;
}
responseEntity = status(HttpStatus.BAD_REQUEST).body("Failed to update Student.");
return responseEntity;
} }
// DELETE methods // DELETE methods
......
...@@ -4,12 +4,12 @@ import com.fasterxml.jackson.annotation.JsonFormat; ...@@ -4,12 +4,12 @@ import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import javax.persistence.*; import javax.persistence.*;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List;
import static com.example.student.constant.Constant.ID_NOT_NULL_ERROR_MESSAGE; import static com.example.student.constant.Constant.ID_NOT_NULL_ERROR_MESSAGE;
import static com.example.student.constant.Constant.NAME_NOT_EMPTY_ERROR_MESSAGE; import static com.example.student.constant.Constant.NAME_NOT_EMPTY_ERROR_MESSAGE;
...@@ -32,5 +32,5 @@ public class StudentDto { ...@@ -32,5 +32,5 @@ public class StudentDto {
@Temporal(TemporalType.DATE) @Temporal(TemporalType.DATE)
private Date dateOfBirth; private Date dateOfBirth;
private int teacherId; private int teacherId;
private ErrorDto errorDto; private List<ErrorDto> errors = new ArrayList<>();
} }
...@@ -7,7 +7,9 @@ import lombok.NoArgsConstructor; ...@@ -7,7 +7,9 @@ import lombok.NoArgsConstructor;
import javax.persistence.Temporal; import javax.persistence.Temporal;
import javax.persistence.TemporalType; import javax.persistence.TemporalType;
import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List;
@Data @Data
...@@ -21,5 +23,5 @@ public class TeacherDto { ...@@ -21,5 +23,5 @@ public class TeacherDto {
@JsonFormat(shape=JsonFormat.Shape.STRING, pattern="dd:MM:yyyy") @JsonFormat(shape=JsonFormat.Shape.STRING, pattern="dd:MM:yyyy")
@Temporal(TemporalType.DATE) @Temporal(TemporalType.DATE)
private Date dateOfJoining; private Date dateOfJoining;
private ErrorDto errorDto; private List<ErrorDto> errors = new ArrayList<>();
} }
\ No newline at end of file
package com.example.student.feign; package com.example.student.feign;
import com.example.student.dto.ErrorDto;
import com.example.student.dto.TeacherDto; import com.example.student.dto.TeacherDto;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List; import java.util.List;
@Component @Component
public class FeignFallBack implements FeignService{ public class FeignFallBack implements FeignService{
@Override @Override
public ResponseEntity<TeacherDto> findTeacherByName(String teacherName) { public ResponseEntity<TeacherDto> findTeacherByName(String teacherName) {
TeacherDto teacherDto = new TeacherDto(404, null, 0, null, null, null); ErrorDto error = new ErrorDto("custom error", "message for error");
List<ErrorDto> errorDtoList = new ArrayList<>();
errorDtoList.add(error);
TeacherDto teacherDto = new TeacherDto(404, null, 0, null, null, errorDtoList);
return new ResponseEntity<TeacherDto>(teacherDto, HttpStatus.OK); return new ResponseEntity<TeacherDto>(teacherDto, HttpStatus.OK);
} }
......
package com.example.student.mapper;
import com.example.student.dto.StudentDto;
import com.example.student.model.Student;
import org.mapstruct.Mapper;
import java.util.List;
import java.util.Optional;
@Mapper(componentModel = "spring")
public interface StudentMapper {
StudentDto entityToDto(Student student);
Student DtoToEntity(StudentDto studentDto);
List<StudentDto> entityToDto(List<Student> studentList);
}
package com.example.student.responseobject; package com.example.student.responseobject;
import com.example.student.dto.StudentDto;
import com.example.student.dto.TeacherDto; import com.example.student.dto.TeacherDto;
import com.example.student.model.Student; import com.example.student.model.Student;
import java.util.List; import java.util.List;
public class StudentTeacherResponseVO { public class StudentTeacherResponseVO {
public List<Student> studentList; public List<StudentDto> studentList;
public List<TeacherDto> teacherList; public List<TeacherDto> teacherList;
} }
package com.example.student.service; package com.example.student.service;
import com.example.student.dto.ErrorDto;
import com.example.student.dto.StudentDto;
import com.example.student.dto.TeacherDto;
import com.example.student.feign.FeignService;
import com.example.student.mapper.StudentMapper;
import com.example.student.model.Student; import com.example.student.model.Student;
import com.example.student.repository.StudentRepository; import com.example.student.repository.StudentRepository;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.ArrayList; import java.util.ArrayList;
...@@ -15,60 +22,113 @@ import java.util.stream.Collectors; ...@@ -15,60 +22,113 @@ import java.util.stream.Collectors;
public class StudentService { public class StudentService {
@Autowired @Autowired
private StudentRepository studentRepository; private StudentRepository repository;
public Student createAndUpdateStudent(Student student) { @Autowired
return studentRepository.save(student); private StudentMapper mapper;
@Autowired
private FeignService feignService;
public boolean createAndUpdateStudent(int id, StudentDto studentDto) {
Optional<Student> student = repository.findById(id).filter(Student::isActive);
if (student.isPresent() && studentDto != null) {
Student updatedStudent = mapper.DtoToEntity(studentDto);
updatedStudent.setId(id);
updatedStudent.setActive(true);
repository.save(updatedStudent);
return true;
}
else if (!student.isPresent() && studentDto != null) {
Student updatedStudent = mapper.DtoToEntity(studentDto);
updatedStudent.setActive(true);
repository.save(updatedStudent);
return true;
}
return false;
} }
public List<Student> findAllStudents() { public List<StudentDto> findAllStudents() {
return studentRepository.findAll(); return repository.findAll()
.stream()
.filter(Student::isActive)
.map(x -> mapper.entityToDto(x))
.collect(Collectors.toList());
} }
public Optional<Student> findStudentById(int id) { public Optional<StudentDto> findStudentById(int id) {
return studentRepository.findById(id); Student student = repository.findById(id).filter(Student::isActive).get();
StudentDto studentDto = mapper.entityToDto(student);
return Optional.of(studentDto);
} }
public void deleteStudent(int id) { public void deleteStudent(int id) {
studentRepository.deleteById(id); repository.deleteById(id);
} }
public List<Student> findStudentByAge(int age) { public List<StudentDto> findStudentByAge(int age) {
return studentRepository.findStudentByAge(age) return repository.findStudentByAge(age)
.stream() .stream()
.filter(Student::isActive) .filter(Student::isActive)
.map(x -> mapper.entityToDto(x))
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
public List<Student> findStudentByHobby(String hobby) { public List<StudentDto> findStudentByHobby(String hobby) {
return studentRepository.findStudentByHobby(hobby); return repository.findStudentByHobby(hobby)
.stream()
.filter(Student::isActive)
.map(x -> mapper.entityToDto(x))
.collect(Collectors.toList());
} }
public List<Student> findStudentByTeacherId(int teacherId) { public List<StudentDto> findStudentByTeacherId(int teacherId) {
return studentRepository.findByTeacherId(teacherId); return repository.findByTeacherId(teacherId)
.stream()
.filter(Student::isActive)
.map(x -> mapper.entityToDto(x))
.collect(Collectors.toList());
} }
public List<Student> findStudentAfterADateOfBirth(Date dateOfBirth) { public List<StudentDto> findStudentAfterADateOfBirth(Date dateOfBirth) {
List<Student> studentList = studentRepository.findAll(); return repository.findAll()
List<Student> newStudentList = new ArrayList<>(); .stream()
for (Student s: studentList) { .filter(Student::isActive)
if (dateOfBirth.before(s.getDateOfBirth())) { .filter(x -> x.getDateOfBirth().after(dateOfBirth))
newStudentList.add(s); .map(x -> mapper.entityToDto(x))
} .collect(Collectors.toList());
} }
System.out.println(newStudentList);
return newStudentList; public List<StudentDto> findStudentBeforeADateOfBirth(Date dateOfBirth) {
return repository.findAll()
.stream()
.filter(Student::isActive)
.filter(x -> x.getDateOfBirth().before(dateOfBirth))
.map(x -> mapper.entityToDto(x))
.collect(Collectors.toList());
} }
public List<Student> findStudentBeforeADateOfBirth(Date dateOfBirth) { public List<StudentDto> findTeacherByName(String name) {
List<Student> studentList = studentRepository.findAll(); TeacherDto teacherDto = feignService.findTeacherByName(name).getBody();
List<Student> newStudentList = new ArrayList<>(); Integer teacherId = teacherDto.getId();
for (Student s: studentList) { if (teacherId == 404) {
if (dateOfBirth.after(s.getDateOfBirth())) { // return new ResponseEntity<>("Teacher service is not available", HttpStatus.OK);
newStudentList.add(s); StudentDto student = new StudentDto(0, null, 0, 0, null,null,0,teacherDto.getErrors());
List<StudentDto> studentDtoList = new ArrayList<>();
studentDtoList.add(student);
return studentDtoList;
}
else if (teacherDto.getErrors().size() != 0) {
StudentDto student = new StudentDto(0, null, 0, 0, null,null,0,teacherDto.getErrors());
List<StudentDto> studentDtoList = new ArrayList<>();
studentDtoList.add(student);
return studentDtoList;
} }
List<StudentDto> studentList = this.findStudentByTeacherId(teacherId);
return studentList;
} }
System.out.println(newStudentList);
return newStudentList; public List<TeacherDto> findTeacherByAge(int age) {
return feignService.findTeacherByAge(age).getBody();
} }
} }
package com.example.student.mapper;
import com.example.student.dto.StudentDto;
import com.example.student.model.Student;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Generated;
import org.springframework.stereotype.Component;
@Generated(
value = "org.mapstruct.ap.MappingProcessor",
date = "2022-07-14T13:49:24+0500",
comments = "version: 1.4.2.Final, compiler: javac, environment: Java 18.0.1.1 (Oracle Corporation)"
)
@Component
public class StudentMapperImpl implements StudentMapper {
@Override
public StudentDto entityToDto(Student student) {
if ( student == null ) {
return null;
}
StudentDto studentDto = new StudentDto();
studentDto.setId( student.getId() );
studentDto.setName( student.getName() );
studentDto.setAge( student.getAge() );
studentDto.setRollNo( student.getRollNo() );
studentDto.setHobby( student.getHobby() );
studentDto.setDateOfBirth( student.getDateOfBirth() );
studentDto.setTeacherId( student.getTeacherId() );
return studentDto;
}
@Override
public Student DtoToEntity(StudentDto studentDto) {
if ( studentDto == null ) {
return null;
}
Student student = new Student();
student.setId( studentDto.getId() );
student.setName( studentDto.getName() );
student.setAge( studentDto.getAge() );
student.setRollNo( studentDto.getRollNo() );
student.setHobby( studentDto.getHobby() );
student.setDateOfBirth( studentDto.getDateOfBirth() );
student.setTeacherId( studentDto.getTeacherId() );
return student;
}
@Override
public List<StudentDto> entityToDto(List<Student> studentList) {
if ( studentList == null ) {
return null;
}
List<StudentDto> list = new ArrayList<StudentDto>( studentList.size() );
for ( Student student : studentList ) {
list.add( entityToDto( student ) );
}
return list;
}
}
...@@ -41,6 +41,20 @@ ...@@ -41,6 +41,20 @@
<artifactId>spring-boot-starter-test</artifactId> <artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>1.4.2.Final</version>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>1.4.2.Final</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
</dependencies> </dependencies>
<build> <build>
......
package com.example.teacher.controller; package com.example.teacher.controller;
import com.example.teacher.dto.TeacherDto;
import com.example.teacher.model.Teacher; import com.example.teacher.model.Teacher;
import com.example.teacher.service.TeacherService; import com.example.teacher.service.TeacherService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -42,9 +43,9 @@ public class TeacherController { ...@@ -42,9 +43,9 @@ public class TeacherController {
} }
@GetMapping("/name/{name}") @GetMapping("/name/{name}")
public ResponseEntity<Teacher> findTeacherByName(@PathVariable String name) { public ResponseEntity<TeacherDto> findTeacherByName(@PathVariable String name) {
Teacher myTeacher = teacherService.findTeacherByName(name); TeacherDto myTeacher = teacherService.findTeacherByName(name);
return new ResponseEntity<Teacher>(myTeacher, HttpStatus.OK); return new ResponseEntity<TeacherDto>(myTeacher, HttpStatus.OK);
} }
......
package com.example.teacher.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ErrorDto {
private String name;
private String message;
}
package com.example.teacher.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class TeacherDto {
private int id;
private String name;
private int age;
private String subject;
@JsonFormat(shape=JsonFormat.Shape.STRING, pattern="dd:MM:yyyy")
@Temporal(TemporalType.DATE)
private Date dateOfJoining;
private List<ErrorDto> errors = new ArrayList<>();
}
package com.example.teacher.mapper;
import com.example.teacher.dto.TeacherDto;
import com.example.teacher.model.Teacher;
import org.mapstruct.Mapper;
@Mapper(componentModel = "spring")
public interface TeacherMapper {
TeacherDto entityToDto(Teacher teacher);
}
package com.example.teacher.service; package com.example.teacher.service;
import com.example.teacher.dto.ErrorDto;
import com.example.teacher.dto.TeacherDto;
import com.example.teacher.mapper.TeacherMapper;
import com.example.teacher.model.Teacher; import com.example.teacher.model.Teacher;
import com.example.teacher.repository.TeacherRepository; import com.example.teacher.repository.TeacherRepository;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -15,6 +19,9 @@ public class TeacherService { ...@@ -15,6 +19,9 @@ public class TeacherService {
@Autowired @Autowired
private TeacherRepository teacherRepository; private TeacherRepository teacherRepository;
@Autowired
private TeacherMapper mapper;
public Teacher createAndUpdateTeacher(Teacher teacher) { public Teacher createAndUpdateTeacher(Teacher teacher) {
teacher.setActive(true); teacher.setActive(true);
return teacherRepository.save(teacher); return teacherRepository.save(teacher);
...@@ -35,8 +42,19 @@ public class TeacherService { ...@@ -35,8 +42,19 @@ public class TeacherService {
return Optional.empty(); return Optional.empty();
} }
public Teacher findTeacherByName(String name) { public TeacherDto findTeacherByName(String name) {
return teacherRepository.findTeacherByName(name); Teacher teacher = teacherRepository.findTeacherByName(name);
if (teacher == null) {
ErrorDto errorDto = new ErrorDto("custom error from teacher service", "message from teacher service");
List<ErrorDto> errorDtoList = new ArrayList<>();
errorDtoList.add(errorDto);
TeacherDto teacherDto = new TeacherDto(0, null, 0, null, null, errorDtoList);
return teacherDto;
}
else {
TeacherDto teacherDto = mapper.entityToDto(teacher);
return teacherDto;
}
} }
public boolean deleteTeacherById(int id) { public boolean deleteTeacherById(int id) {
......
package com.example.teacher.mapper;
import com.example.teacher.dto.TeacherDto;
import com.example.teacher.model.Teacher;
import javax.annotation.Generated;
import org.springframework.stereotype.Component;
@Generated(
value = "org.mapstruct.ap.MappingProcessor",
date = "2022-07-14T16:43:13+0500",
comments = "version: 1.4.2.Final, compiler: javac, environment: Java 18.0.1.1 (Oracle Corporation)"
)
@Component
public class TeacherMapperImpl implements TeacherMapper {
@Override
public TeacherDto entityToDto(Teacher teacher) {
if ( teacher == null ) {
return null;
}
TeacherDto teacherDto = new TeacherDto();
teacherDto.setId( teacher.getId() );
teacherDto.setName( teacher.getName() );
teacherDto.setAge( teacher.getAge() );
teacherDto.setSubject( teacher.getSubject() );
teacherDto.setDateOfJoining( teacher.getDateOfJoining() );
return teacherDto;
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment