diff --git a/javawebpoc-web/src/main/java/br/com/viktor/javawebpoc/controller/GradeController.java b/javawebpoc-web/src/main/java/br/com/viktor/javawebpoc/controller/GradeController.java new file mode 100644 index 0000000..dcfa6e0 --- /dev/null +++ b/javawebpoc-web/src/main/java/br/com/viktor/javawebpoc/controller/GradeController.java @@ -0,0 +1,21 @@ +package br.com.viktor.javawebpoc.controller; + +import javax.inject.Inject; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; + +import br.com.viktor.javawebpoc.controller.base.AbstractCrudController; +import br.com.viktor.javawebpoc.entity.Grade; +import br.com.viktor.javawebpoc.facade.GradeFacade; + +@Controller +@RequestMapping("/grade") +public class GradeController extends AbstractCrudController { + + @Inject + public GradeController(GradeFacade gradeFacade) { + super(gradeFacade); + } + +} diff --git a/javawebpoc-web/src/main/java/br/com/viktor/javawebpoc/controller/StudentController.java b/javawebpoc-web/src/main/java/br/com/viktor/javawebpoc/controller/StudentController.java index 97d078b..06fd1f6 100644 --- a/javawebpoc-web/src/main/java/br/com/viktor/javawebpoc/controller/StudentController.java +++ b/javawebpoc-web/src/main/java/br/com/viktor/javawebpoc/controller/StudentController.java @@ -1,21 +1,37 @@ package br.com.viktor.javawebpoc.controller; +import java.util.List; + import javax.inject.Inject; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; import br.com.viktor.javawebpoc.controller.base.AbstractCrudController; +import br.com.viktor.javawebpoc.entity.Grade; import br.com.viktor.javawebpoc.entity.Student; +import br.com.viktor.javawebpoc.exception.invalidArgument.NullArgumentException; +import br.com.viktor.javawebpoc.exception.notFound.NotFoundException; import br.com.viktor.javawebpoc.facade.StudentFacade; @Controller @RequestMapping("/student") public class StudentController extends AbstractCrudController { + private StudentFacade studentFacade; + @Inject - public StudentController(StudentFacade facade) { - super(facade); + public StudentController(StudentFacade studentFacade) { + super(studentFacade); + this.studentFacade = studentFacade; } + @RequestMapping(value = "/{studentId}/grade", method = RequestMethod.GET) + @ResponseBody + public List findAllGradeByStudentId(@PathVariable Long studentId) throws NotFoundException, NullArgumentException{ + return studentFacade.findAllByStudentId(studentId); + } } diff --git a/javawebpoc-web/src/main/java/br/com/viktor/javawebpoc/entity/Grade.java b/javawebpoc-web/src/main/java/br/com/viktor/javawebpoc/entity/Grade.java new file mode 100644 index 0000000..a046672 --- /dev/null +++ b/javawebpoc-web/src/main/java/br/com/viktor/javawebpoc/entity/Grade.java @@ -0,0 +1,35 @@ +package br.com.viktor.javawebpoc.entity; + +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.ManyToOne; +import javax.persistence.Table; + +import br.com.viktor.javawebpoc.entity.base.AbstractEntity; + +@Entity +@Table(name = "TB_GRADE") +public class Grade extends AbstractEntity { + + @ManyToOne(fetch = FetchType.EAGER) + private Student student; + + private Float score; + + public Float getScore() { + return score; + } + + public void setScore(Float score) { + this.score = score; + } + + public Student getStudent() { + return student; + } + + public void setStudent(Student student) { + this.student = student; + } + +} \ No newline at end of file diff --git a/javawebpoc-web/src/main/java/br/com/viktor/javawebpoc/facade/GradeFacade.java b/javawebpoc-web/src/main/java/br/com/viktor/javawebpoc/facade/GradeFacade.java new file mode 100644 index 0000000..840faa0 --- /dev/null +++ b/javawebpoc-web/src/main/java/br/com/viktor/javawebpoc/facade/GradeFacade.java @@ -0,0 +1,26 @@ +package br.com.viktor.javawebpoc.facade; + +import javax.inject.Inject; + +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import br.com.viktor.javawebpoc.entity.Grade; +import br.com.viktor.javawebpoc.facade.base.AbstractCrudFacade; +import br.com.viktor.javawebpoc.service.contract.GradeServiceContract; + +@Component +@Transactional +public class GradeFacade extends AbstractCrudFacade{ + + public GradeFacade(){ + super(null); + } + + @Inject + public GradeFacade(GradeServiceContract gradeService) { + super(gradeService); + + } + +} diff --git a/javawebpoc-web/src/main/java/br/com/viktor/javawebpoc/facade/StudentFacade.java b/javawebpoc-web/src/main/java/br/com/viktor/javawebpoc/facade/StudentFacade.java index 4a3bf37..890426c 100644 --- a/javawebpoc-web/src/main/java/br/com/viktor/javawebpoc/facade/StudentFacade.java +++ b/javawebpoc-web/src/main/java/br/com/viktor/javawebpoc/facade/StudentFacade.java @@ -1,20 +1,40 @@ package br.com.viktor.javawebpoc.facade; -import org.springframework.beans.factory.annotation.Autowired; +import java.util.List; + +import javax.inject.Inject; + import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; +import br.com.viktor.javawebpoc.entity.Grade; import br.com.viktor.javawebpoc.entity.Student; +import br.com.viktor.javawebpoc.exception.invalidArgument.NullArgumentException; +import br.com.viktor.javawebpoc.exception.notFound.NotFoundException; import br.com.viktor.javawebpoc.facade.base.AbstractCrudFacade; -import br.com.viktor.javawebpoc.service.contract.base.AbstractCrudContract; +import br.com.viktor.javawebpoc.service.contract.GradeServiceContract; +import br.com.viktor.javawebpoc.service.contract.StudentServiceContract; @Component @Transactional public class StudentFacade extends AbstractCrudFacade { - @Autowired - public StudentFacade(AbstractCrudContract abstractCrud) { - super(abstractCrud); + private StudentServiceContract studentService; + private GradeServiceContract gradeService; + + public StudentFacade(){ + super(null); + } + + @Inject + public StudentFacade(StudentServiceContract studentService, GradeServiceContract gradeService) { + super(studentService); + this.studentService = studentService; + this.gradeService = gradeService; + } + + public List findAllByStudentId(Long studentId) throws NotFoundException, NullArgumentException{ + return this.gradeService.findAllByStudent(this.studentService.find(studentId)); } } \ No newline at end of file diff --git a/javawebpoc-web/src/main/java/br/com/viktor/javawebpoc/repository/GradeRepositoryContract.java b/javawebpoc-web/src/main/java/br/com/viktor/javawebpoc/repository/GradeRepositoryContract.java new file mode 100644 index 0000000..2cbbd63 --- /dev/null +++ b/javawebpoc-web/src/main/java/br/com/viktor/javawebpoc/repository/GradeRepositoryContract.java @@ -0,0 +1,14 @@ +package br.com.viktor.javawebpoc.repository; + +import java.util.List; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import br.com.viktor.javawebpoc.entity.Grade; +import br.com.viktor.javawebpoc.entity.Student; + +@Repository +public interface GradeRepositoryContract extends JpaRepository { + public List findAllByStudent(Student student); +} diff --git a/javawebpoc-web/src/main/java/br/com/viktor/javawebpoc/service/contract/GradeServiceContract.java b/javawebpoc-web/src/main/java/br/com/viktor/javawebpoc/service/contract/GradeServiceContract.java new file mode 100644 index 0000000..e3e332e --- /dev/null +++ b/javawebpoc-web/src/main/java/br/com/viktor/javawebpoc/service/contract/GradeServiceContract.java @@ -0,0 +1,11 @@ +package br.com.viktor.javawebpoc.service.contract; + +import java.util.List; + +import br.com.viktor.javawebpoc.entity.Grade; +import br.com.viktor.javawebpoc.entity.Student; +import br.com.viktor.javawebpoc.service.contract.base.AbstractCrudContract; + +public interface GradeServiceContract extends AbstractCrudContract { + public List findAllByStudent(Student student); +} diff --git a/javawebpoc-web/src/main/java/br/com/viktor/javawebpoc/service/impl/GradeService.java b/javawebpoc-web/src/main/java/br/com/viktor/javawebpoc/service/impl/GradeService.java new file mode 100644 index 0000000..b473a0d --- /dev/null +++ b/javawebpoc-web/src/main/java/br/com/viktor/javawebpoc/service/impl/GradeService.java @@ -0,0 +1,53 @@ +package br.com.viktor.javawebpoc.service.impl; + +import java.util.List; + +import javax.inject.Inject; +import javax.persistence.EntityExistsException; + +import org.springframework.stereotype.Service; + +import br.com.viktor.javawebpoc.entity.Grade; +import br.com.viktor.javawebpoc.entity.Student; +import br.com.viktor.javawebpoc.exception.alreadyExists.AlreadyExistsException; +import br.com.viktor.javawebpoc.exception.invalidArgument.InvalidArgumentException; +import br.com.viktor.javawebpoc.exception.notFound.NotFoundException; +import br.com.viktor.javawebpoc.repository.GradeRepositoryContract; +import br.com.viktor.javawebpoc.service.contract.GradeServiceContract; +import br.com.viktor.javawebpoc.service.impl.base.AbstractCrudService; + +@Service +public class GradeService extends AbstractCrudService implements GradeServiceContract { + + private GradeRepositoryContract gradeRepository; + + @Inject + public GradeService(GradeRepositoryContract gradeRepository) { + super(gradeRepository); + this.gradeRepository = gradeRepository; + } + + @Override + protected void checkIfValid(Grade entity) throws InvalidArgumentException { + if(entity.getScore() > 10 || entity.getScore() < 0){ + throw new InvalidArgumentException(); + } + + } + + @Override + protected void checkBussinessKey(Grade entity) + throws AlreadyExistsException { + try { + if(this.find(entity.getId()) != null) + throw new EntityExistsException(); + } catch (NotFoundException e) {} + + } + + @Override + public List findAllByStudent(Student student) { + return gradeRepository.findAllByStudent(student); + } + +}