Skip to content

Commit

Permalink
Merge pull request #87 from guma2k2/cart-feature
Browse files Browse the repository at this point in the history
write CourseController.java
  • Loading branch information
guma2k2 authored Nov 18, 2024
2 parents 621938f + 7e9ef95 commit d80b5d6
Show file tree
Hide file tree
Showing 10 changed files with 267 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ public record ReviewGetVM(
Long id,
String content,
int ratingStar,
String updated_at
String updatedAt
) {
public static ReviewGetVM fromModel(Review review) {
String updatedAt = review.getUpdatedAt() != null ?
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,11 @@
public interface ReviewService {

ReviewVM createReviewForProduct(ReviewPostVM reviewPost);
ReviewVM updateReview(ReviewPostVM reviewPostVM, Long reviewId);


PageableDataReview<ReviewVM> getByMultiQuery(Long courseId, Integer pageNum, int pageSize, Integer ratingStar, String sortDir);

ReviewVM updateReview(ReviewPostVM reviewPostVM, Long reviewId);

List<Review> findByCourseId(Long courseId);

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package com.backend.elearning.domain.review_classroom;

import com.backend.elearning.domain.classroom.Classroom;
import com.backend.elearning.domain.course.Course;
import com.backend.elearning.domain.student.Student;
import jakarta.persistence.*;
import lombok.*;

import java.time.LocalDateTime;

@Entity
@Table(name = "review_classroom")
@Setter
@Getter
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class ReviewClassroom {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

private String content;

private int ratingStar;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "classroom_id")
private Classroom classroom;

@Builder.Default
private boolean status = false;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "student_id")
private Student student;

@Column(name = "created_at")
protected LocalDateTime createdAt;


@Column(name = "updated_at")
protected LocalDateTime updatedAt;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package com.backend.elearning.domain.review_classroom;

import jakarta.validation.Valid;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/api/v1")
public class ReviewClassroomController {

private final ReviewClassroomService reviewClassroomService ;

public ReviewClassroomController(ReviewClassroomService reviewClassroomService) {
this.reviewClassroomService = reviewClassroomService;
}

@PostMapping("/review-classrooms")
public ResponseEntity<ReviewClassroomVM> createReview(@Valid @RequestBody ReviewClassroomPostVM reviewPostVM){
ReviewClassroomVM review = reviewClassroomService.create(reviewPostVM);
return ResponseEntity.ok().body(review);
}


@PutMapping("/review-classrooms/{id}")
public ResponseEntity<ReviewClassroomVM> updateReview(@Valid @RequestBody ReviewClassroomPostVM reviewPostVM, @PathVariable("id") Long reviewId){
ReviewClassroomVM updatedReview = reviewClassroomService.updateReview(reviewPostVM, reviewId);
return ResponseEntity.ok().body(updatedReview);
}

@GetMapping("/review-classrooms/classroom/{classroomId}")
public ResponseEntity<List<ReviewClassroomVM>> getByClassroomId(@PathVariable("classroomId") Long classroomId){
List<ReviewClassroomVM> reviewClassroomVMS = reviewClassroomService.findByClassroomId(classroomId);
return ResponseEntity.ok().body(reviewClassroomVMS);
}
@GetMapping("/review-classrooms/student")
public ResponseEntity<ReviewClassroomVM> getByStudent(){
ReviewClassroomVM review = reviewClassroomService.getByStudent();
return ResponseEntity.ok().body(review);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.backend.elearning.domain.review_classroom;

import com.backend.elearning.domain.review.Review;
import com.backend.elearning.utils.DateTimeUtils;

public record ReviewClassroomGetVM (
Long id,
String content,
int ratingStar,
String updatedAt
) {

public static ReviewClassroomGetVM fromModel(ReviewClassroom review) {
String updatedAt = review.getUpdatedAt() != null ?
DateTimeUtils.convertLocalDateTimeToString(review.getUpdatedAt()) : "";
return new ReviewClassroomGetVM(review.getId(), review.getContent(), review.getRatingStar(), updatedAt);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.backend.elearning.domain.review_classroom;

import jakarta.validation.constraints.NotNull;

public record ReviewClassroomPostVM(Long classroomId,
String content,
@NotNull(message = "rating star must not be null")
Integer ratingStar
) {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package com.backend.elearning.domain.review_classroom;

import com.backend.elearning.domain.review.Review;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Optional;

@Repository
public interface ReviewClassroomRepo extends JpaRepository<ReviewClassroom, Long> {

@Query("""
select r
from ReviewClassroom r
left join fetch r.classroom c
left join fetch r.student u
where c.id = :classroomId
""")
List<ReviewClassroom> findByClassroom(@Param("classroomId") Long classroomId);


@Query("""
select r
from ReviewClassroom r
left join fetch r.student u
where u.email = :email
""")
Optional<ReviewClassroom> findByStudent(@Param("email") String email);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.backend.elearning.domain.review_classroom;



import java.util.List;

public interface ReviewClassroomService {

ReviewClassroomVM create(ReviewClassroomPostVM reviewPost);
ReviewClassroomVM updateReview(ReviewClassroomPostVM reviewPost, Long reviewId);
List<ReviewClassroomVM> findByClassroomId(Long classroomId);

ReviewClassroomVM getByStudent();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
package com.backend.elearning.domain.review_classroom;

import com.backend.elearning.domain.classroom.Classroom;
import com.backend.elearning.domain.classroom.ClassroomRepository;
import com.backend.elearning.domain.review.Review;
import com.backend.elearning.domain.review.ReviewVM;
import com.backend.elearning.domain.student.Student;
import com.backend.elearning.domain.student.StudentRepository;
import com.backend.elearning.exception.NotFoundException;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.util.List;


@Service
public class ReviewClassroomServiceImpl implements ReviewClassroomService{

private final ReviewClassroomRepo reviewClassroomRepo;

private final StudentRepository studentRepository;

private final ClassroomRepository classroomRepository;

public ReviewClassroomServiceImpl(ReviewClassroomRepo reviewClassroomRepo, StudentRepository studentRepository, ClassroomRepository classroomRepository) {
this.reviewClassroomRepo = reviewClassroomRepo;
this.studentRepository = studentRepository;
this.classroomRepository = classroomRepository;
}

@Override
public ReviewClassroomVM create(ReviewClassroomPostVM reviewPost) {
String email = SecurityContextHolder.getContext().getAuthentication().getName();
Student student = studentRepository.findByEmail(email).orElseThrow();
Classroom classroom = classroomRepository.findById(reviewPost.classroomId()).orElseThrow();
ReviewClassroom review = ReviewClassroom
.builder()
.student(student)
.classroom(classroom)
.content(reviewPost.content())
.ratingStar(reviewPost.ratingStar())
.createdAt(LocalDateTime.now())
.updatedAt(LocalDateTime.now())
.build();
ReviewClassroom savedReview = reviewClassroomRepo.save(review);
return ReviewClassroomVM.fromModel(savedReview);
}

@Override
public ReviewClassroomVM updateReview(ReviewClassroomPostVM reviewPost, Long reviewId) {
ReviewClassroom review = reviewClassroomRepo.findById(reviewId).orElseThrow();
review.setRatingStar(reviewPost.ratingStar());
review.setContent(reviewPost.content());
review.setUpdatedAt(LocalDateTime.now());
ReviewClassroom updatedReview = reviewClassroomRepo.save(review);
return ReviewClassroomVM.fromModel(updatedReview);
}

@Override
public List<ReviewClassroomVM> findByClassroomId(Long classroomId) {

List<ReviewClassroom> reviewClassrooms = reviewClassroomRepo.findByClassroom(classroomId);

return reviewClassrooms.stream().map(reviewClassroom -> ReviewClassroomVM.fromModel(reviewClassroom)).toList();
}

@Override
public ReviewClassroomVM getByStudent() {
String email = SecurityContextHolder.getContext().getAuthentication().getName();
ReviewClassroom review = reviewClassroomRepo.findByStudent(email).orElseThrow(() -> new NotFoundException(""));
return ReviewClassroomVM.fromModel(review);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.backend.elearning.domain.review_classroom;

import com.backend.elearning.domain.review.Review;
import com.backend.elearning.domain.review.ReviewVM;
import com.backend.elearning.domain.student.Student;
import com.backend.elearning.domain.user.UserGetVM;
import com.backend.elearning.utils.DateTimeUtils;

public record ReviewClassroomVM (Long id,
String content,
int ratingStar,
UserGetVM student,
String createdAt,
String updatedAt,
boolean status
){

public static ReviewClassroomVM fromModel(ReviewClassroom review) {
Student student = review.getStudent();
String createdAt = review.getCreatedAt() != null ?
DateTimeUtils.convertLocalDateTimeToString(review.getCreatedAt()) : "";
String updatedAt = review.getUpdatedAt() != null ?
DateTimeUtils.convertLocalDateTimeToString(review.getUpdatedAt()) : "";
return new ReviewClassroomVM(review.getId(), review.getContent(), review.getRatingStar(),
UserGetVM.fromModelStudent(student), createdAt, updatedAt, review.isStatus());
}
}

0 comments on commit d80b5d6

Please sign in to comment.