-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #87 from guma2k2/cart-feature
write CourseController.java
- Loading branch information
Showing
10 changed files
with
267 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
45 changes: 45 additions & 0 deletions
45
src/main/java/com/backend/elearning/domain/review_classroom/ReviewClassroom.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | ||
} |
42 changes: 42 additions & 0 deletions
42
src/main/java/com/backend/elearning/domain/review_classroom/ReviewClassroomController.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | ||
} | ||
} |
18 changes: 18 additions & 0 deletions
18
src/main/java/com/backend/elearning/domain/review_classroom/ReviewClassroomGetVM.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | ||
} | ||
} |
10 changes: 10 additions & 0 deletions
10
src/main/java/com/backend/elearning/domain/review_classroom/ReviewClassroomPostVM.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | ||
) { | ||
} |
34 changes: 34 additions & 0 deletions
34
src/main/java/com/backend/elearning/domain/review_classroom/ReviewClassroomRepo.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | ||
} |
14 changes: 14 additions & 0 deletions
14
src/main/java/com/backend/elearning/domain/review_classroom/ReviewClassroomService.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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(); | ||
} |
74 changes: 74 additions & 0 deletions
74
src/main/java/com/backend/elearning/domain/review_classroom/ReviewClassroomServiceImpl.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | ||
} | ||
} |
27 changes: 27 additions & 0 deletions
27
src/main/java/com/backend/elearning/domain/review_classroom/ReviewClassroomVM.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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()); | ||
} | ||
} |