Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -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 ResponseEntity<?>createSubject(@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 ResponseEntity<?>update(@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 ResponseEntity<?>deleteByid(@PathVariable("id") Long id){
subjectService.deleteById(id);
return ResponseEntity.noContent().build();
}
@GetMapping("/all")
public ResponseEntity<?>getAllSubject(@RequestParam Map<String,String> params){
List<SubjectDTO> list=subjectService.getAllSubject(params)
.stream().map(sb->SubjectMapper.INSTANCE.toDTO(sb))
.toList();

return ResponseEntity.ok(list);
}


}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.piseth.java.school.schoolManagement.dto;

import lombok.Data;

@Data
public class SubjectDTO {
private Long id;
private String name;
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,14 @@

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 {
StudentMapper INSTANCE = Mappers.getMapper(StudentMapper.class);

Student toEntity(StudentDTO dto);

StudentDTO toDTO(Student entity);
StudentDTO toDTO(Student student);

}
Original file line number Diff line number Diff line change
@@ -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);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.piseth.java.school.schoolManagement.property;

public interface SubjectPropertyFilter {
String ID="id";
String NAME="name";
}
Original file line number Diff line number Diff line change
@@ -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<Subject, Long>,JpaSpecificationExecutor<Subject>{

}
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,5 @@ public interface StudentService {
void delete(Long id);

List<Student> getStudents(Map<String, String> params);

}
Original file line number Diff line number Diff line change
@@ -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<Subject> getAllSubject(Map<String,String> param);
}
Original file line number Diff line number Diff line change
@@ -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<Subject> getAllSubject(Map<String, String> 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();
}


}
Original file line number Diff line number Diff line change
@@ -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;
}
Original file line number Diff line number Diff line change
@@ -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<Subject>{
private SubjectFilter subjectFilter;
@Override
public Predicate toPredicate(Root<Subject> subject, CriteriaQuery<?> query, CriteriaBuilder cr) {
// TODO Auto-generated method stub
List<Predicate> 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));
}

}
9 changes: 9 additions & 0 deletions src/main/resources/application.properties
Original file line number Diff line number Diff line change
@@ -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
11 changes: 0 additions & 11 deletions src/main/resources/application.yml

This file was deleted.