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..1ecbb0c --- /dev/null +++ b/src/main/java/com/piseth/java/school/schoolManagement/controller/SubjectController.java @@ -0,0 +1,66 @@ +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; +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.RequestParam; +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; + +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)); + } + @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(); + } + @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/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/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/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/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); + } 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..d6a1795 --- /dev/null +++ b/src/main/java/com/piseth/java/school/schoolManagement/service/SubjectService.java @@ -0,0 +1,15 @@ +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 { + Subject addSub(Subject subject); + 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 new file mode 100644 index 0000000..7e6fe24 --- /dev/null +++ b/src/main/java/com/piseth/java/school/schoolManagement/service/impl/SubjectServiceImpl.java @@ -0,0 +1,64 @@ +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 +@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) ; + } + @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); + + } + @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(); + } + + +} 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