From 7aa8ee015465710c8c135b83b98979f9099c777e Mon Sep 17 00:00:00 2001 From: "ponleunhoem@gmail.com" Date: Wed, 26 Oct 2022 12:12:55 +0700 Subject: [PATCH 1/4] create_subject --- .../controller/SubjectController.java | 29 +++++++++++++++ .../schoolManagement/dto/SubjectDTO.java | 9 +++++ .../mapper/SubjectMapper.java | 13 +++++++ .../property/SubjectPropertyFilter.java | 6 ++++ .../repository/SubjectRepository.java | 10 ++++++ .../service/SubjectService.java | 7 ++++ .../service/impl/SubjectServiceImpl.java | 22 ++++++++++++ .../subject/spac/SubjectFilter.java | 9 +++++ .../subject/spac/SubjectSpec.java | 36 +++++++++++++++++++ src/main/resources/application.properties | 9 +++++ src/main/resources/application.yml | 11 ------ 11 files changed, 150 insertions(+), 11 deletions(-) create mode 100644 src/main/java/com/piseth/java/school/schoolManagement/controller/SubjectController.java create mode 100644 src/main/java/com/piseth/java/school/schoolManagement/dto/SubjectDTO.java create mode 100644 src/main/java/com/piseth/java/school/schoolManagement/mapper/SubjectMapper.java create mode 100644 src/main/java/com/piseth/java/school/schoolManagement/property/SubjectPropertyFilter.java create mode 100644 src/main/java/com/piseth/java/school/schoolManagement/repository/SubjectRepository.java create mode 100644 src/main/java/com/piseth/java/school/schoolManagement/service/SubjectService.java create mode 100644 src/main/java/com/piseth/java/school/schoolManagement/service/impl/SubjectServiceImpl.java create mode 100644 src/main/java/com/piseth/java/school/schoolManagement/subject/spac/SubjectFilter.java create mode 100644 src/main/java/com/piseth/java/school/schoolManagement/subject/spac/SubjectSpec.java create mode 100644 src/main/resources/application.properties delete mode 100644 src/main/resources/application.yml diff --git a/src/main/java/com/piseth/java/school/schoolManagement/controller/SubjectController.java b/src/main/java/com/piseth/java/school/schoolManagement/controller/SubjectController.java new file mode 100644 index 0000000..a1ff979 --- /dev/null +++ b/src/main/java/com/piseth/java/school/schoolManagement/controller/SubjectController.java @@ -0,0 +1,29 @@ +package com.piseth.java.school.schoolManagement.controller; + +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import com.piseth.java.school.schoolManagement.dto.SubjectDTO; +import com.piseth.java.school.schoolManagement.mapper.SubjectMapper; +import com.piseth.java.school.schoolManagement.model.Subject; +import com.piseth.java.school.schoolManagement.service.SubjectService; + +import lombok.RequiredArgsConstructor; + +@RestController +@RequestMapping("/subject") +@RequiredArgsConstructor +public class SubjectController { + private final SubjectService subjectService; + @PostMapping + public ResponseEntitycreateSubject(@RequestBody SubjectDTO subjectdto){ + Subject subject=SubjectMapper.INSTANCE.toEntity(subjectdto); + subject=subjectService.addSub(subject); + return ResponseEntity.status(HttpStatus.CREATED).body(SubjectMapper.INSTANCE.toDTO(subject)); + + } +} diff --git a/src/main/java/com/piseth/java/school/schoolManagement/dto/SubjectDTO.java b/src/main/java/com/piseth/java/school/schoolManagement/dto/SubjectDTO.java new file mode 100644 index 0000000..fa9539e --- /dev/null +++ b/src/main/java/com/piseth/java/school/schoolManagement/dto/SubjectDTO.java @@ -0,0 +1,9 @@ +package com.piseth.java.school.schoolManagement.dto; + +import lombok.Data; + +@Data +public class SubjectDTO { + private Long id; + private String name; +} diff --git a/src/main/java/com/piseth/java/school/schoolManagement/mapper/SubjectMapper.java b/src/main/java/com/piseth/java/school/schoolManagement/mapper/SubjectMapper.java new file mode 100644 index 0000000..d36c3c9 --- /dev/null +++ b/src/main/java/com/piseth/java/school/schoolManagement/mapper/SubjectMapper.java @@ -0,0 +1,13 @@ +package com.piseth.java.school.schoolManagement.mapper; + +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import com.piseth.java.school.schoolManagement.dto.SubjectDTO; +import com.piseth.java.school.schoolManagement.model.Subject; +@Mapper +public interface SubjectMapper { + SubjectMapper INSTANCE=Mappers.getMapper(SubjectMapper.class); + Subject toEntity(SubjectDTO dto); + SubjectDTO toDTO(Subject entity); +} diff --git a/src/main/java/com/piseth/java/school/schoolManagement/property/SubjectPropertyFilter.java b/src/main/java/com/piseth/java/school/schoolManagement/property/SubjectPropertyFilter.java new file mode 100644 index 0000000..e2e76a7 --- /dev/null +++ b/src/main/java/com/piseth/java/school/schoolManagement/property/SubjectPropertyFilter.java @@ -0,0 +1,6 @@ +package com.piseth.java.school.schoolManagement.property; + +public interface SubjectPropertyFilter { + String ID="id"; + String NAME="name"; +} diff --git a/src/main/java/com/piseth/java/school/schoolManagement/repository/SubjectRepository.java b/src/main/java/com/piseth/java/school/schoolManagement/repository/SubjectRepository.java new file mode 100644 index 0000000..72e5f6c --- /dev/null +++ b/src/main/java/com/piseth/java/school/schoolManagement/repository/SubjectRepository.java @@ -0,0 +1,10 @@ +package com.piseth.java.school.schoolManagement.repository; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; + +import com.piseth.java.school.schoolManagement.model.Subject; + +public interface SubjectRepository extends JpaRepository,JpaSpecificationExecutor{ + +} diff --git a/src/main/java/com/piseth/java/school/schoolManagement/service/SubjectService.java b/src/main/java/com/piseth/java/school/schoolManagement/service/SubjectService.java new file mode 100644 index 0000000..bd585d9 --- /dev/null +++ b/src/main/java/com/piseth/java/school/schoolManagement/service/SubjectService.java @@ -0,0 +1,7 @@ +package com.piseth.java.school.schoolManagement.service; + +import com.piseth.java.school.schoolManagement.model.Subject; + +public interface SubjectService { + Subject addSub(Subject subject); +} diff --git a/src/main/java/com/piseth/java/school/schoolManagement/service/impl/SubjectServiceImpl.java b/src/main/java/com/piseth/java/school/schoolManagement/service/impl/SubjectServiceImpl.java new file mode 100644 index 0000000..6bed2aa --- /dev/null +++ b/src/main/java/com/piseth/java/school/schoolManagement/service/impl/SubjectServiceImpl.java @@ -0,0 +1,22 @@ +package com.piseth.java.school.schoolManagement.service.impl; + +import org.springframework.stereotype.Service; + +import com.piseth.java.school.schoolManagement.model.Subject; +import com.piseth.java.school.schoolManagement.repository.SubjectRepository; +import com.piseth.java.school.schoolManagement.service.SubjectService; + +import lombok.RequiredArgsConstructor; +@Service +@RequiredArgsConstructor +public class SubjectServiceImpl implements SubjectService{ + + private final SubjectRepository subjectrepository; + @Override + public Subject addSub(Subject subject) { + // TODO Auto-generated method stub + return subjectrepository.save(subject) ; + } + + +} diff --git a/src/main/java/com/piseth/java/school/schoolManagement/subject/spac/SubjectFilter.java b/src/main/java/com/piseth/java/school/schoolManagement/subject/spac/SubjectFilter.java new file mode 100644 index 0000000..f56790c --- /dev/null +++ b/src/main/java/com/piseth/java/school/schoolManagement/subject/spac/SubjectFilter.java @@ -0,0 +1,9 @@ +package com.piseth.java.school.schoolManagement.subject.spac; + +import lombok.Data; + +@Data +public class SubjectFilter { + private String id; + private String name; +} diff --git a/src/main/java/com/piseth/java/school/schoolManagement/subject/spac/SubjectSpec.java b/src/main/java/com/piseth/java/school/schoolManagement/subject/spac/SubjectSpec.java new file mode 100644 index 0000000..ee40efa --- /dev/null +++ b/src/main/java/com/piseth/java/school/schoolManagement/subject/spac/SubjectSpec.java @@ -0,0 +1,36 @@ +package com.piseth.java.school.schoolManagement.subject.spac; + +import java.util.ArrayList; +import java.util.List; + +import javax.persistence.criteria.CriteriaBuilder; +import javax.persistence.criteria.CriteriaQuery; +import javax.persistence.criteria.Predicate; +import javax.persistence.criteria.Root; + +import org.springframework.data.jpa.domain.Specification; + +import com.piseth.java.school.schoolManagement.model.Subject; + +import lombok.AllArgsConstructor; +@SuppressWarnings("serial") +@AllArgsConstructor +public class SubjectSpec implements Specification{ + private SubjectFilter subjectFilter; + @Override + public Predicate toPredicate(Root subject, CriteriaQuery query, CriteriaBuilder cr) { + // TODO Auto-generated method stub + List predicates = new ArrayList<>(); + if(subjectFilter.getId()!=null) { + Predicate id=subject.get("id").in(subjectFilter.getId()); + predicates.add(id); + } + if (subjectFilter.getName() != null) { + Predicate name = cr.like(subject.get("name"), "%"+subjectFilter.getName() + "%"); + predicates.add(name); + } + + return cr.and(predicates.toArray(Predicate[]::new)); + } + +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties new file mode 100644 index 0000000..a41b046 --- /dev/null +++ b/src/main/resources/application.properties @@ -0,0 +1,9 @@ + +spring.datasource.url=jdbc:mysql://localhost:3306/student11?useSSL=false +spring.datasource.username=root +spring.datasource.password=ponleu + +# Hibernate properties +spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect +# create, create-drop +spring.jpa.hibernate.ddl-auto=update diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml deleted file mode 100644 index 857533c..0000000 --- a/src/main/resources/application.yml +++ /dev/null @@ -1,11 +0,0 @@ -spring: - datasource: - url: jdbc:postgresql://localhost:5433/school_mgt - username: piseth - password: piseth123 - jpa: - hibernate: - ddl-auto: update - properties: - hibernate: - dialect: org.hibernate.dialect.PostgreSQLDialect \ No newline at end of file From 41c4dc1914f8411e52530fce6ee46901458a038e Mon Sep 17 00:00:00 2001 From: "ponleunhoem@gmail.com" Date: Thu, 27 Oct 2022 13:17:13 +0700 Subject: [PATCH 2/4] subject --- .../controller/SubjectController.java | 27 ++++++++++++++++++- .../mapper/StudentMapper.java | 3 ++- .../service/SubjectService.java | 3 +++ .../service/impl/SubjectServiceImpl.java | 22 +++++++++++++++ 4 files changed, 53 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/piseth/java/school/schoolManagement/controller/SubjectController.java b/src/main/java/com/piseth/java/school/schoolManagement/controller/SubjectController.java index a1ff979..1e71821 100644 --- a/src/main/java/com/piseth/java/school/schoolManagement/controller/SubjectController.java +++ b/src/main/java/com/piseth/java/school/schoolManagement/controller/SubjectController.java @@ -2,12 +2,17 @@ import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.piseth.java.school.schoolManagement.dto.SubjectDTO; +import com.piseth.java.school.schoolManagement.mapper.StudentMapper; import com.piseth.java.school.schoolManagement.mapper.SubjectMapper; import com.piseth.java.school.schoolManagement.model.Subject; import com.piseth.java.school.schoolManagement.service.SubjectService; @@ -18,12 +23,32 @@ @RequestMapping("/subject") @RequiredArgsConstructor public class SubjectController { + private final SubjectService subjectService; @PostMapping public ResponseEntitycreateSubject(@RequestBody SubjectDTO subjectdto){ Subject subject=SubjectMapper.INSTANCE.toEntity(subjectdto); subject=subjectService.addSub(subject); - return ResponseEntity.status(HttpStatus.CREATED).body(SubjectMapper.INSTANCE.toDTO(subject)); + return ResponseEntity.status(HttpStatus.CREATED).body(SubjectMapper.INSTANCE.toDTO(subject)); + } + @GetMapping("{id}") + public ResponseEntity getById(@PathVariable("id") Long id){ + Subject subject=subjectService.getById(id); + return ResponseEntity.ok(SubjectMapper.INSTANCE.toDTO(subject)); + } + @PutMapping("{id}") + public ResponseEntityupdate(@PathVariable("id") Long id,@RequestBody SubjectDTO subjectDTO ){ + Subject subject=SubjectMapper.INSTANCE.toEntity(subjectDTO); + subject=subjectService.update(id, subject); + return ResponseEntity.ok(SubjectMapper.INSTANCE.toDTO(subject)); } + @DeleteMapping("{id}") + public ResponseEntitydeleteByid(@PathVariable("id") Long id){ + subjectService.deleteById(id); + return ResponseEntity.noContent().build(); + } + + + } diff --git a/src/main/java/com/piseth/java/school/schoolManagement/mapper/StudentMapper.java b/src/main/java/com/piseth/java/school/schoolManagement/mapper/StudentMapper.java index 908b451..80801d4 100644 --- a/src/main/java/com/piseth/java/school/schoolManagement/mapper/StudentMapper.java +++ b/src/main/java/com/piseth/java/school/schoolManagement/mapper/StudentMapper.java @@ -5,6 +5,7 @@ import com.piseth.java.school.schoolManagement.dto.StudentDTO; import com.piseth.java.school.schoolManagement.model.Student; +import com.piseth.java.school.schoolManagement.model.Subject; @Mapper public interface StudentMapper { @@ -12,6 +13,6 @@ public interface StudentMapper { Student toEntity(StudentDTO dto); - StudentDTO toDTO(Student entity); + StudentDTO toDTO(Student student); } diff --git a/src/main/java/com/piseth/java/school/schoolManagement/service/SubjectService.java b/src/main/java/com/piseth/java/school/schoolManagement/service/SubjectService.java index bd585d9..01e0769 100644 --- a/src/main/java/com/piseth/java/school/schoolManagement/service/SubjectService.java +++ b/src/main/java/com/piseth/java/school/schoolManagement/service/SubjectService.java @@ -4,4 +4,7 @@ public interface SubjectService { Subject addSub(Subject subject); + Subject getById(Long id); + Subject update(Long id,Subject subject); + void deleteById(Long id); } diff --git a/src/main/java/com/piseth/java/school/schoolManagement/service/impl/SubjectServiceImpl.java b/src/main/java/com/piseth/java/school/schoolManagement/service/impl/SubjectServiceImpl.java index 6bed2aa..938ce57 100644 --- a/src/main/java/com/piseth/java/school/schoolManagement/service/impl/SubjectServiceImpl.java +++ b/src/main/java/com/piseth/java/school/schoolManagement/service/impl/SubjectServiceImpl.java @@ -1,7 +1,9 @@ package com.piseth.java.school.schoolManagement.service.impl; +import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; +import com.piseth.java.school.schoolManagement.exception.ResourceNotFoundException; import com.piseth.java.school.schoolManagement.model.Subject; import com.piseth.java.school.schoolManagement.repository.SubjectRepository; import com.piseth.java.school.schoolManagement.service.SubjectService; @@ -17,6 +19,26 @@ public Subject addSub(Subject subject) { // TODO Auto-generated method stub return subjectrepository.save(subject) ; } + @Override + public Subject getById(Long id) { + // TODO Auto-generated method stub + return subjectrepository.findById(id) + .orElseThrow(()->new ResourceNotFoundException("subject", id)); + } + @Override + public Subject update(Long id, Subject subject) { + // TODO Auto-generated method stub + Subject subjectTarget=getById(id); + BeanUtils.copyProperties(subject, subjectTarget,"id"); + return subjectrepository.save(subjectTarget); + } + @Override + public void deleteById(Long id) { + // TODO Auto-generated method stub + Subject subjectTarget=getById(id); + subjectrepository.delete(subjectTarget); + + } } From 9008e7fe74a96afdc4fe5d62a79926457e833c3e Mon Sep 17 00:00:00 2001 From: "ponleunhoem@gmail.com" Date: Fri, 28 Oct 2022 17:58:08 +0700 Subject: [PATCH 3/4] finissubject --- .../controller/SubjectController.java | 15 +++++++++++++- .../service/SubjectService.java | 5 +++++ .../service/impl/SubjectServiceImpl.java | 20 +++++++++++++++++++ 3 files changed, 39 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/piseth/java/school/schoolManagement/controller/SubjectController.java b/src/main/java/com/piseth/java/school/schoolManagement/controller/SubjectController.java index 1e71821..040ae66 100644 --- a/src/main/java/com/piseth/java/school/schoolManagement/controller/SubjectController.java +++ b/src/main/java/com/piseth/java/school/schoolManagement/controller/SubjectController.java @@ -1,5 +1,9 @@ package com.piseth.java.school.schoolManagement.controller; +import java.util.List; +import java.util.Map; + +import org.mapstruct.ReportingPolicy; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.DeleteMapping; @@ -9,6 +13,7 @@ import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import com.piseth.java.school.schoolManagement.dto.SubjectDTO; @@ -48,7 +53,15 @@ public ResponseEntity getById(@PathVariable("id") Long id){ subjectService.deleteById(id); return ResponseEntity.noContent().build(); } - + @GetMapping("/all/subject") + public ResponseEntitygetAllSubject(@RequestParam Map params){ + List list=subjectService.getAllSubject(params) + .stream().map(sb->SubjectMapper.INSTANCE.toDTO(sb)) + .toList(); + + + return ResponseEntity.ok(list); + } } diff --git a/src/main/java/com/piseth/java/school/schoolManagement/service/SubjectService.java b/src/main/java/com/piseth/java/school/schoolManagement/service/SubjectService.java index 01e0769..d6a1795 100644 --- a/src/main/java/com/piseth/java/school/schoolManagement/service/SubjectService.java +++ b/src/main/java/com/piseth/java/school/schoolManagement/service/SubjectService.java @@ -1,5 +1,9 @@ package com.piseth.java.school.schoolManagement.service; +import java.util.List; +import java.util.Map; + +import com.piseth.java.school.schoolManagement.dto.SubjectDTO; import com.piseth.java.school.schoolManagement.model.Subject; public interface SubjectService { @@ -7,4 +11,5 @@ public interface SubjectService { Subject getById(Long id); Subject update(Long id,Subject subject); void deleteById(Long id); + List getAllSubject(Map param); } diff --git a/src/main/java/com/piseth/java/school/schoolManagement/service/impl/SubjectServiceImpl.java b/src/main/java/com/piseth/java/school/schoolManagement/service/impl/SubjectServiceImpl.java index 938ce57..7e6fe24 100644 --- a/src/main/java/com/piseth/java/school/schoolManagement/service/impl/SubjectServiceImpl.java +++ b/src/main/java/com/piseth/java/school/schoolManagement/service/impl/SubjectServiceImpl.java @@ -1,12 +1,19 @@ package com.piseth.java.school.schoolManagement.service.impl; +import java.util.List; +import java.util.Map; + import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; +import com.piseth.java.school.schoolManagement.dto.SubjectDTO; import com.piseth.java.school.schoolManagement.exception.ResourceNotFoundException; import com.piseth.java.school.schoolManagement.model.Subject; +import com.piseth.java.school.schoolManagement.property.SubjectPropertyFilter; import com.piseth.java.school.schoolManagement.repository.SubjectRepository; import com.piseth.java.school.schoolManagement.service.SubjectService; +import com.piseth.java.school.schoolManagement.subject.spac.SubjectFilter; +import com.piseth.java.school.schoolManagement.subject.spac.SubjectSpec; import lombok.RequiredArgsConstructor; @Service @@ -39,6 +46,19 @@ public void deleteById(Long id) { subjectrepository.delete(subjectTarget); } + @Override + public List getAllSubject(Map param) { + SubjectFilter file=new SubjectFilter(); + if(param.containsKey(SubjectPropertyFilter.ID)) { + file.setId(param.get(SubjectPropertyFilter.ID)); + } + if(param.containsKey(SubjectPropertyFilter.NAME)) { + file.setName(param.get(SubjectPropertyFilter.NAME)); + } + SubjectSpec subjectSpec=new SubjectSpec(file); + // TODO Auto-generated method stub + return subjectrepository.findAll(); + } } From bebe4c165148612f7bcf336ee96e77dbdde07837 Mon Sep 17 00:00:00 2001 From: "ponleunhoem@gmail.com" Date: Mon, 31 Oct 2022 16:08:46 +0700 Subject: [PATCH 4/4] sub --- .../school/schoolManagement/controller/SubjectController.java | 3 +-- .../java/school/schoolManagement/service/StudentService.java | 1 + 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/piseth/java/school/schoolManagement/controller/SubjectController.java b/src/main/java/com/piseth/java/school/schoolManagement/controller/SubjectController.java index 040ae66..1ecbb0c 100644 --- a/src/main/java/com/piseth/java/school/schoolManagement/controller/SubjectController.java +++ b/src/main/java/com/piseth/java/school/schoolManagement/controller/SubjectController.java @@ -53,13 +53,12 @@ public ResponseEntity getById(@PathVariable("id") Long id){ subjectService.deleteById(id); return ResponseEntity.noContent().build(); } - @GetMapping("/all/subject") + @GetMapping("/all") public ResponseEntitygetAllSubject(@RequestParam Map params){ List list=subjectService.getAllSubject(params) .stream().map(sb->SubjectMapper.INSTANCE.toDTO(sb)) .toList(); - return ResponseEntity.ok(list); } diff --git a/src/main/java/com/piseth/java/school/schoolManagement/service/StudentService.java b/src/main/java/com/piseth/java/school/schoolManagement/service/StudentService.java index 56803a0..d8730cd 100644 --- a/src/main/java/com/piseth/java/school/schoolManagement/service/StudentService.java +++ b/src/main/java/com/piseth/java/school/schoolManagement/service/StudentService.java @@ -15,4 +15,5 @@ public interface StudentService { void delete(Long id); List getStudents(Map params); + }