added errorDto

parent 5f530df1
......@@ -5,17 +5,27 @@
</component>
<component name="ChangeListManager">
<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/dto/ErrorDto.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/com/example/student/dto/StudentDto.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/com/example/student/mapper/StudentMapper.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$/../../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$/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/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/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/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/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>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
......@@ -26,6 +36,7 @@
<option name="RECENT_TEMPLATES">
<list>
<option value="Class" />
<option value="Interface" />
</list>
</option>
</component>
......@@ -55,7 +66,7 @@
&quot;keyToString&quot;: {
&quot;RunOnceActivity.OpenProjectViewOnStart&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.proportion&quot;: &quot;0.0&quot;,
&quot;project.structure.side.proportion&quot;: &quot;0.0&quot;
......
......@@ -57,9 +57,18 @@
<artifactId>spring-cloud-starter-circuitbreaker-resilience4j</artifactId>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
<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>
<dependencyManagement>
......
package com.example.student.controller;
import com.example.student.dto.StudentDto;
import com.example.student.dto.TeacherDto;
import com.example.student.feign.FeignService;
import com.example.student.model.Student;
import com.example.student.responseobject.StudentTeacherResponseVO;
import com.example.student.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -16,6 +15,8 @@ import java.util.Date;
import java.util.List;
import java.util.Optional;
import static org.springframework.http.ResponseEntity.status;
@RestController
@RequestMapping("/students")
public class StudentController {
......@@ -28,55 +29,55 @@ public class StudentController {
// POST methods
@PostMapping
public ResponseEntity<Student> createStudent(@RequestBody Student student) {
Student myStudent = studentService.createAndUpdateStudent(student);
return new ResponseEntity<Student>(myStudent, HttpStatus.CREATED);
public ResponseEntity<String> createStudent(@RequestBody StudentDto studentDto) {
boolean isComplete = studentService.createAndUpdateStudent(0, studentDto);
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
@GetMapping("/{id}")
public ResponseEntity<Optional<Student>> findStudentById(@PathVariable int id) {
Optional<Student> myStudent = studentService.findStudentById(id);
public ResponseEntity<Optional<StudentDto>> findStudentById(@PathVariable int id) {
Optional<StudentDto> myStudent = studentService.findStudentById(id);
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);
}
@GetMapping("/all")
public ResponseEntity<List<Student>> findAllStudents() {
List<Student> studentList = studentService.findAllStudents();
return new ResponseEntity<List<Student>>(studentList, HttpStatus.OK);
public ResponseEntity<List<StudentDto>> findAllStudents() {
List<StudentDto> studentList = studentService.findAllStudents();
return new ResponseEntity<List<StudentDto>>(studentList, HttpStatus.OK);
}
@GetMapping("/age/{age}")
public ResponseEntity<List<Student>> findStudentByAge(@PathVariable int age) {
List<Student> studentList = studentService.findStudentByAge(age);
return new ResponseEntity<List<Student>>(studentList, HttpStatus.FOUND);
public ResponseEntity<List<StudentDto>> findStudentByAge(@PathVariable int age) {
List<StudentDto> studentList = studentService.findStudentByAge(age);
return new ResponseEntity<List<StudentDto>>(studentList, HttpStatus.FOUND);
}
@GetMapping("/hobby/{hobby}")
public ResponseEntity<List<Student>> findStudentByHobby(@PathVariable String hobby) {
List<Student> studentList = studentService.findStudentByHobby(hobby);
return new ResponseEntity<List<Student>>(studentList, HttpStatus.FOUND);
public ResponseEntity<List<StudentDto>> findStudentByHobby(@PathVariable String hobby) {
List<StudentDto> studentList = studentService.findStudentByHobby(hobby);
return new ResponseEntity<List<StudentDto>>(studentList, HttpStatus.FOUND);
}
@GetMapping("/teacher/name/{teacherName}")
public ResponseEntity findStudentByTeacherName(@PathVariable String teacherName) {
ResponseEntity<TeacherDto> myTeacher = feignService.findTeacherByName(teacherName);
int teacherId = myTeacher.getBody().getId();
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);
List<StudentDto> studentList = studentService.findTeacherByName(teacherName);
return new ResponseEntity<List<StudentDto>>(studentList, HttpStatus.FOUND);
}
@GetMapping("/teacher/age/{age}")
public ResponseEntity<StudentTeacherResponseVO> findStudentTeacherByAge(@PathVariable int age) {
List<TeacherDto> teacherList = feignService.findTeacherByAge(age).getBody();
List<Student> studentList = studentService.findStudentByAge(age);
List<TeacherDto> teacherList = studentService.findTeacherByAge(age);
List<StudentDto> studentList = studentService.findStudentByAge(age);
StudentTeacherResponseVO studentTeacherResponseVO = new StudentTeacherResponseVO();
studentTeacherResponseVO.studentList = studentList;
studentTeacherResponseVO.teacherList = teacherList;
......@@ -84,23 +85,28 @@ public class StudentController {
}
@GetMapping(value = "/date/before")
public ResponseEntity<List<Student>> findStudentBeforeADateOfBirth(@DateTimeFormat(pattern = "dd:MM:yyyy") @RequestParam(value = "date") Date dateOfBirth) {
List<Student> studentList = studentService.findStudentBeforeADateOfBirth(dateOfBirth);
return new ResponseEntity<List<Student>>(studentList, HttpStatus.FOUND);
public ResponseEntity<List<StudentDto>> findStudentBeforeADateOfBirth(@DateTimeFormat(pattern = "dd:MM:yyyy") @RequestParam(value = "date") Date dateOfBirth) {
List<StudentDto> studentList = studentService.findStudentBeforeADateOfBirth(dateOfBirth);
return new ResponseEntity<List<StudentDto>>(studentList, HttpStatus.FOUND);
}
@GetMapping(value = "/date/after")
public ResponseEntity<List<Student>> findStudentAfterADateOfBirth(@DateTimeFormat(pattern = "dd:MM:yyyy") @RequestParam(value = "date") Date dateOfBirth) {
List<Student> studentList = studentService.findStudentAfterADateOfBirth(dateOfBirth);
return new ResponseEntity<List<Student>>(studentList, HttpStatus.FOUND);
public ResponseEntity<List<StudentDto>> findStudentAfterADateOfBirth(@DateTimeFormat(pattern = "dd:MM:yyyy") @RequestParam(value = "date") Date dateOfBirth) {
List<StudentDto> studentList = studentService.findStudentAfterADateOfBirth(dateOfBirth);
return new ResponseEntity<List<StudentDto>>(studentList, HttpStatus.FOUND);
}
// PUT methods
@PutMapping("/{id}")
public ResponseEntity<Student> updateStudent(@PathVariable int id, @RequestBody Student student) {
student.setId(id);
Student myStudent = studentService.createAndUpdateStudent(student);
return new ResponseEntity<Student>(myStudent, HttpStatus.ACCEPTED);
public ResponseEntity<String> updateStudent(@PathVariable int id, @RequestBody StudentDto studentDto) {
boolean isComplete = studentService.createAndUpdateStudent(id, studentDto);
ResponseEntity<String> responseEntity;
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
......
......@@ -4,12 +4,12 @@ import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.*;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.ArrayList;
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.NAME_NOT_EMPTY_ERROR_MESSAGE;
......@@ -32,5 +32,5 @@ public class StudentDto {
@Temporal(TemporalType.DATE)
private Date dateOfBirth;
private int teacherId;
private ErrorDto errorDto;
private List<ErrorDto> errors = new ArrayList<>();
}
......@@ -7,7 +7,9 @@ import lombok.NoArgsConstructor;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@Data
......@@ -21,5 +23,5 @@ public class TeacherDto {
@JsonFormat(shape=JsonFormat.Shape.STRING, pattern="dd:MM:yyyy")
@Temporal(TemporalType.DATE)
private Date dateOfJoining;
private ErrorDto errorDto;
private List<ErrorDto> errors = new ArrayList<>();
}
\ No newline at end of file
package com.example.student.feign;
import com.example.student.dto.ErrorDto;
import com.example.student.dto.TeacherDto;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
@Component
public class FeignFallBack implements FeignService{
@Override
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);
}
......
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;
import com.example.student.dto.StudentDto;
import com.example.student.dto.TeacherDto;
import com.example.student.model.Student;
import java.util.List;
public class StudentTeacherResponseVO {
public List<Student> studentList;
public List<StudentDto> studentList;
public List<TeacherDto> teacherList;
}
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.repository.StudentRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
......@@ -15,60 +22,113 @@ import java.util.stream.Collectors;
public class StudentService {
@Autowired
private StudentRepository studentRepository;
private StudentRepository repository;
public Student createAndUpdateStudent(Student student) {
return studentRepository.save(student);
@Autowired
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() {
return studentRepository.findAll();
public List<StudentDto> findAllStudents() {
return repository.findAll()
.stream()
.filter(Student::isActive)
.map(x -> mapper.entityToDto(x))
.collect(Collectors.toList());
}
public Optional<Student> findStudentById(int id) {
return studentRepository.findById(id);
public Optional<StudentDto> findStudentById(int id) {
Student student = repository.findById(id).filter(Student::isActive).get();
StudentDto studentDto = mapper.entityToDto(student);
return Optional.of(studentDto);
}
public void deleteStudent(int id) {
studentRepository.deleteById(id);
repository.deleteById(id);
}
public List<Student> findStudentByAge(int age) {
return studentRepository.findStudentByAge(age)
public List<StudentDto> findStudentByAge(int age) {
return repository.findStudentByAge(age)
.stream()
.filter(Student::isActive)
.map(x -> mapper.entityToDto(x))
.collect(Collectors.toList());
}
public List<Student> findStudentByHobby(String hobby) {
return studentRepository.findStudentByHobby(hobby);
public List<StudentDto> findStudentByHobby(String hobby) {
return repository.findStudentByHobby(hobby)
.stream()
.filter(Student::isActive)
.map(x -> mapper.entityToDto(x))
.collect(Collectors.toList());
}
public List<Student> findStudentByTeacherId(int teacherId) {
return studentRepository.findByTeacherId(teacherId);
public List<StudentDto> findStudentByTeacherId(int teacherId) {
return repository.findByTeacherId(teacherId)
.stream()
.filter(Student::isActive)
.map(x -> mapper.entityToDto(x))
.collect(Collectors.toList());
}
public List<Student> findStudentAfterADateOfBirth(Date dateOfBirth) {
List<Student> studentList = studentRepository.findAll();
List<Student> newStudentList = new ArrayList<>();
for (Student s: studentList) {
if (dateOfBirth.before(s.getDateOfBirth())) {
newStudentList.add(s);
}
}
System.out.println(newStudentList);
return newStudentList;
public List<StudentDto> findStudentAfterADateOfBirth(Date dateOfBirth) {
return repository.findAll()
.stream()
.filter(Student::isActive)
.filter(x -> x.getDateOfBirth().after(dateOfBirth))
.map(x -> mapper.entityToDto(x))
.collect(Collectors.toList());
}
public List<Student> findStudentBeforeADateOfBirth(Date dateOfBirth) {
List<Student> studentList = studentRepository.findAll();
List<Student> newStudentList = new ArrayList<>();
for (Student s: studentList) {
if (dateOfBirth.after(s.getDateOfBirth())) {
newStudentList.add(s);
}
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<StudentDto> findTeacherByName(String name) {
TeacherDto teacherDto = feignService.findTeacherByName(name).getBody();
Integer teacherId = teacherDto.getId();
if (teacherId == 404) {
// return new ResponseEntity<>("Teacher service is not available", HttpStatus.OK);
StudentDto student = new StudentDto(0, null, 0, 0, null,null,0,teacherDto.getErrors());
List<StudentDto> studentDtoList = new ArrayList<>();
studentDtoList.add(student);
return studentDtoList;
}
System.out.println(newStudentList);
return newStudentList;
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;
}
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 @@
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</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>
<build>
......
package com.example.teacher.controller;
import com.example.teacher.dto.TeacherDto;
import com.example.teacher.model.Teacher;
import com.example.teacher.service.TeacherService;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -42,9 +43,9 @@ public class TeacherController {
}
@GetMapping("/name/{name}")
public ResponseEntity<Teacher> findTeacherByName(@PathVariable String name) {
Teacher myTeacher = teacherService.findTeacherByName(name);
return new ResponseEntity<Teacher>(myTeacher, HttpStatus.OK);
public ResponseEntity<TeacherDto> findTeacherByName(@PathVariable String name) {
TeacherDto myTeacher = teacherService.findTeacherByName(name);
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;
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.repository.TeacherRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
......@@ -15,6 +19,9 @@ public class TeacherService {
@Autowired
private TeacherRepository teacherRepository;
@Autowired
private TeacherMapper mapper;
public Teacher createAndUpdateTeacher(Teacher teacher) {
teacher.setActive(true);
return teacherRepository.save(teacher);
......@@ -35,8 +42,19 @@ public class TeacherService {
return Optional.empty();
}
public Teacher findTeacherByName(String name) {
return teacherRepository.findTeacherByName(name);
public TeacherDto findTeacherByName(String 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) {
......
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