diff --git a/src/main/java/com/backend/elearning/domain/course/CourseListGetVM.java b/src/main/java/com/backend/elearning/domain/course/CourseListGetVM.java index 282ff71..7e26ecb 100644 --- a/src/main/java/com/backend/elearning/domain/course/CourseListGetVM.java +++ b/src/main/java/com/backend/elearning/domain/course/CourseListGetVM.java @@ -30,7 +30,7 @@ public static CourseListGetVM fromModel( User user = course.getUser(); String fullName = user.getFirstName() + " " + user.getLastName(); Long price = course.getPrice() != null ? course.getPrice() : 0L; - + Long checkedDiscountedPrice = discountedPrice != null ? discountedPrice : 0L; return new CourseListGetVM(course.getId(), course.getTitle(), course.getHeadline() , @@ -41,7 +41,7 @@ public static CourseListGetVM fromModel( ratingCount, course.getImageId(), price, - discountedPrice, + checkedDiscountedPrice, course.isFree(), fullName); } diff --git a/src/main/java/com/backend/elearning/domain/course/CourseServiceImpl.java b/src/main/java/com/backend/elearning/domain/course/CourseServiceImpl.java index 8354577..98c1c7f 100644 --- a/src/main/java/com/backend/elearning/domain/course/CourseServiceImpl.java +++ b/src/main/java/com/backend/elearning/domain/course/CourseServiceImpl.java @@ -235,6 +235,9 @@ private Long getDiscountedPriceByCourse(Set promotions, Course course Optional currentPromotion = promotions.stream() .filter(promotion -> promotion.getStartTime().isBefore(now) && promotion.getEndTime().isAfter(now)) .findFirst(); + if (course.isFree()) { + return null; + } Long discountedPrice = currentPromotion.isPresent() ? course.getPrice() - (currentPromotion.get().getDiscountPercent()*course.getPrice()/100) : course.getPrice(); return discountedPrice; } diff --git a/src/main/java/com/backend/elearning/domain/course/CourseVM.java b/src/main/java/com/backend/elearning/domain/course/CourseVM.java index f76bde2..6807f53 100644 --- a/src/main/java/com/backend/elearning/domain/course/CourseVM.java +++ b/src/main/java/com/backend/elearning/domain/course/CourseVM.java @@ -54,6 +54,8 @@ public static CourseVM fromModel (Course course, List sections, int r User user = course.getUser(); String createdBy = user.getFirstName() + " " + user.getLastName(); Long price = course.getPrice() != null ? course.getPrice() : 0L; + Long checkedDiscountedPrice = discountedPrice != null ? discountedPrice : 0L; + String createdAt = course.getCreatedAt() != null ? DateTimeUtils.convertLocalDateTimeToString(course.getCreatedAt()) : ""; String updatedAt = course.getUpdatedAt() != null ? @@ -66,7 +68,7 @@ public static CourseVM fromModel (Course course, List sections, int r updatedAt, course.isFree(), price, - discountedPrice, + checkedDiscountedPrice, course.getStatus().name(), course.getCategory().getId(), course.getTopic().getId(), diff --git a/src/main/java/com/backend/elearning/domain/question/Question.java b/src/main/java/com/backend/elearning/domain/question/Question.java index 09c8bba..de59d66 100644 --- a/src/main/java/com/backend/elearning/domain/question/Question.java +++ b/src/main/java/com/backend/elearning/domain/question/Question.java @@ -17,7 +17,6 @@ @Getter @Setter @Builder -@EntityListeners(value = CustomAuditingEntityListener.class) public class Question extends AbstractAuditEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) diff --git a/src/main/java/com/backend/elearning/domain/questionLecture/QuestionLecture.java b/src/main/java/com/backend/elearning/domain/questionLecture/QuestionLecture.java new file mode 100644 index 0000000..67f82f9 --- /dev/null +++ b/src/main/java/com/backend/elearning/domain/questionLecture/QuestionLecture.java @@ -0,0 +1,39 @@ +package com.backend.elearning.domain.questionLecture; + + +import com.backend.elearning.domain.common.AbstractAuditEntity; +import com.backend.elearning.domain.lecture.Lecture; +import com.backend.elearning.domain.quiz.Quiz; +import com.backend.elearning.domain.student.Student; +import jakarta.persistence.*; +import lombok.*; + + +@Entity +@Table(name = "question_lecture") +@AllArgsConstructor +@NoArgsConstructor +@Getter +@Setter +@Builder +public class QuestionLecture extends AbstractAuditEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + private String title; + + + private String description; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "lecture_id") + private Lecture lecture; + + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "student_id") + private Student student; + +} diff --git a/src/main/java/com/backend/elearning/domain/questionLecture/QuestionLectureController.java b/src/main/java/com/backend/elearning/domain/questionLecture/QuestionLectureController.java new file mode 100644 index 0000000..3dc9861 --- /dev/null +++ b/src/main/java/com/backend/elearning/domain/questionLecture/QuestionLectureController.java @@ -0,0 +1,40 @@ +package com.backend.elearning.domain.questionLecture; + +import com.backend.elearning.domain.lecture.LectureVm; +import com.backend.elearning.domain.note.NotePostVM; +import com.backend.elearning.domain.note.NoteVM; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; +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; + +@RestController +@RequestMapping("/api/v1") +public class QuestionLectureController { + + private final QuestionLectureService questionLectureService; + + + public QuestionLectureController(QuestionLectureService questionLectureService) { + this.questionLectureService = questionLectureService; + } + @PostMapping("/question-lecture") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "Created", content = + @Content(schema = @Schema(implementation = LectureVm.class))) + }) + public ResponseEntity create ( + @RequestBody QuestionLecturePostVM questionLecturePostVM + ) { + QuestionLectureVM questionLectureVM = questionLectureService.create(questionLecturePostVM); + return ResponseEntity.status(HttpStatus.OK).body(questionLectureVM); + } + + +} diff --git a/src/main/java/com/backend/elearning/domain/questionLecture/QuestionLecturePostVM.java b/src/main/java/com/backend/elearning/domain/questionLecture/QuestionLecturePostVM.java new file mode 100644 index 0000000..0728f3f --- /dev/null +++ b/src/main/java/com/backend/elearning/domain/questionLecture/QuestionLecturePostVM.java @@ -0,0 +1,8 @@ +package com.backend.elearning.domain.questionLecture; + +public record QuestionLecturePostVM ( + String title, + String description, + Long lectureId +) { +} diff --git a/src/main/java/com/backend/elearning/domain/questionLecture/QuestionLectureRepo.java b/src/main/java/com/backend/elearning/domain/questionLecture/QuestionLectureRepo.java new file mode 100644 index 0000000..a513d19 --- /dev/null +++ b/src/main/java/com/backend/elearning/domain/questionLecture/QuestionLectureRepo.java @@ -0,0 +1,8 @@ +package com.backend.elearning.domain.questionLecture; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface QuestionLectureRepo extends JpaRepository { +} diff --git a/src/main/java/com/backend/elearning/domain/questionLecture/QuestionLectureService.java b/src/main/java/com/backend/elearning/domain/questionLecture/QuestionLectureService.java new file mode 100644 index 0000000..1585c07 --- /dev/null +++ b/src/main/java/com/backend/elearning/domain/questionLecture/QuestionLectureService.java @@ -0,0 +1,7 @@ +package com.backend.elearning.domain.questionLecture; + +public interface QuestionLectureService { + + QuestionLectureVM create(QuestionLecturePostVM questionLecturePostVM); + +} diff --git a/src/main/java/com/backend/elearning/domain/questionLecture/QuestionLectureServiceImpl.java b/src/main/java/com/backend/elearning/domain/questionLecture/QuestionLectureServiceImpl.java new file mode 100644 index 0000000..589ede7 --- /dev/null +++ b/src/main/java/com/backend/elearning/domain/questionLecture/QuestionLectureServiceImpl.java @@ -0,0 +1,43 @@ +package com.backend.elearning.domain.questionLecture; + +import com.backend.elearning.domain.lecture.Lecture; +import com.backend.elearning.domain.lecture.LectureRepository; +import com.backend.elearning.domain.student.Student; +import com.backend.elearning.domain.student.StudentRepository; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.stereotype.Service; + +import java.time.LocalDateTime; + +@Service +public class QuestionLectureServiceImpl implements QuestionLectureService { + + private final QuestionLectureRepo questionLectureRepo; + private final StudentRepository studentRepository; + private final LectureRepository lectureRepository; + + public QuestionLectureServiceImpl(QuestionLectureRepo questionLectureRepo, StudentRepository studentRepository, LectureRepository lectureRepository) { + this.questionLectureRepo = questionLectureRepo; + this.studentRepository = studentRepository; + this.lectureRepository = lectureRepository; + } + + @Override + public QuestionLectureVM create(QuestionLecturePostVM questionLecturePostVM) { + String email = SecurityContextHolder.getContext().getAuthentication().getName(); + Lecture lecture = lectureRepository.findById(questionLecturePostVM.lectureId()).orElseThrow(); + Student student = studentRepository.findByEmail(email).orElseThrow(); + QuestionLecture questionLecture = QuestionLecture + .builder() + .title(questionLecturePostVM.title()) + .description(questionLecturePostVM.description()) + .lecture(lecture) + .student(student) + .build(); + questionLecture.setCreatedAt(LocalDateTime.now()); + questionLecture.setUpdatedAt(LocalDateTime.now()); + + QuestionLecture savedQuestionLecture = questionLectureRepo.saveAndFlush(questionLecture); + return QuestionLectureVM.fromModel(savedQuestionLecture); + } +} diff --git a/src/main/java/com/backend/elearning/domain/questionLecture/QuestionLectureVM.java b/src/main/java/com/backend/elearning/domain/questionLecture/QuestionLectureVM.java new file mode 100644 index 0000000..333164e --- /dev/null +++ b/src/main/java/com/backend/elearning/domain/questionLecture/QuestionLectureVM.java @@ -0,0 +1,26 @@ +package com.backend.elearning.domain.questionLecture; + +import com.backend.elearning.domain.student.Student; +import com.backend.elearning.domain.user.UserGetVM; + +public record QuestionLectureVM ( + Long id, + String title, + String description, + + UserGetVM student, + String createdAt, + String updatedAt +) { + + public static final QuestionLectureVM fromModel (QuestionLecture questionLecture) { + Student student = questionLecture.getStudent(); + UserGetVM userGetVM = UserGetVM.fromModelStudent(student); + return new QuestionLectureVM(questionLecture.getId(), + questionLecture.getTitle(), + questionLecture.getDescription(), + userGetVM, + questionLecture.getCreatedAt().toString(), + questionLecture.getUpdatedAt().toString()); + } +} diff --git a/src/main/java/com/backend/elearning/domain/questionLecture/studentAnswer/StudentAnswer.java b/src/main/java/com/backend/elearning/domain/questionLecture/studentAnswer/StudentAnswer.java new file mode 100644 index 0000000..3fbc185 --- /dev/null +++ b/src/main/java/com/backend/elearning/domain/questionLecture/studentAnswer/StudentAnswer.java @@ -0,0 +1,33 @@ +package com.backend.elearning.domain.questionLecture.studentAnswer; + +import com.backend.elearning.domain.common.AbstractAuditEntity; +import com.backend.elearning.domain.lecture.Lecture; +import com.backend.elearning.domain.questionLecture.QuestionLecture; +import com.backend.elearning.domain.student.Student; +import jakarta.persistence.*; +import lombok.*; + +@Entity +@Table(name = "student_answer") +@AllArgsConstructor +@NoArgsConstructor +@Getter +@Setter +@Builder +public class StudentAnswer extends AbstractAuditEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + private String content; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "question_lecture_id") + private QuestionLecture questionLecture; + + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "student_id") + private Student student; +} diff --git a/src/main/java/com/backend/elearning/domain/questionLecture/studentAnswer/StudentAnswerController.java b/src/main/java/com/backend/elearning/domain/questionLecture/studentAnswer/StudentAnswerController.java new file mode 100644 index 0000000..c07bb8a --- /dev/null +++ b/src/main/java/com/backend/elearning/domain/questionLecture/studentAnswer/StudentAnswerController.java @@ -0,0 +1,39 @@ +package com.backend.elearning.domain.questionLecture.studentAnswer; + +import com.backend.elearning.domain.lecture.LectureVm; +import com.backend.elearning.domain.questionLecture.QuestionLecturePostVM; +import com.backend.elearning.domain.questionLecture.QuestionLectureVM; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; +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; + +@RestController +@RequestMapping("/api/v1") +public class StudentAnswerController { + + private final StudentAnswerService studentAnswerService; + + public StudentAnswerController(StudentAnswerService studentAnswerService) { + this.studentAnswerService = studentAnswerService; + } + + + @PostMapping("/student-answer") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "Created", content = + @Content(schema = @Schema(implementation = StudentAnswerVM.class))) + }) + public ResponseEntity create ( + @RequestBody StudentAnswerPostVM studentAnswerPostVM + ) { + StudentAnswerVM studentAnswerVM = studentAnswerService.create(studentAnswerPostVM); + return ResponseEntity.status(HttpStatus.OK).body(studentAnswerVM); + } +} diff --git a/src/main/java/com/backend/elearning/domain/questionLecture/studentAnswer/StudentAnswerPostVM.java b/src/main/java/com/backend/elearning/domain/questionLecture/studentAnswer/StudentAnswerPostVM.java new file mode 100644 index 0000000..18e3305 --- /dev/null +++ b/src/main/java/com/backend/elearning/domain/questionLecture/studentAnswer/StudentAnswerPostVM.java @@ -0,0 +1,7 @@ +package com.backend.elearning.domain.questionLecture.studentAnswer; + +public record StudentAnswerPostVM( + String content, + Long questionLectureId +) { +} diff --git a/src/main/java/com/backend/elearning/domain/questionLecture/studentAnswer/StudentAnswerRepo.java b/src/main/java/com/backend/elearning/domain/questionLecture/studentAnswer/StudentAnswerRepo.java new file mode 100644 index 0000000..d2a346c --- /dev/null +++ b/src/main/java/com/backend/elearning/domain/questionLecture/studentAnswer/StudentAnswerRepo.java @@ -0,0 +1,8 @@ +package com.backend.elearning.domain.questionLecture.studentAnswer; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface StudentAnswerRepo extends JpaRepository { +} diff --git a/src/main/java/com/backend/elearning/domain/questionLecture/studentAnswer/StudentAnswerService.java b/src/main/java/com/backend/elearning/domain/questionLecture/studentAnswer/StudentAnswerService.java new file mode 100644 index 0000000..7bb2f18 --- /dev/null +++ b/src/main/java/com/backend/elearning/domain/questionLecture/studentAnswer/StudentAnswerService.java @@ -0,0 +1,5 @@ +package com.backend.elearning.domain.questionLecture.studentAnswer; + +public interface StudentAnswerService { + StudentAnswerVM create(StudentAnswerPostVM studentAnswerPostVM); +} diff --git a/src/main/java/com/backend/elearning/domain/questionLecture/studentAnswer/StudentAnswerServiceImpl.java b/src/main/java/com/backend/elearning/domain/questionLecture/studentAnswer/StudentAnswerServiceImpl.java new file mode 100644 index 0000000..0de7a76 --- /dev/null +++ b/src/main/java/com/backend/elearning/domain/questionLecture/studentAnswer/StudentAnswerServiceImpl.java @@ -0,0 +1,45 @@ +package com.backend.elearning.domain.questionLecture.studentAnswer; + + +import com.backend.elearning.domain.questionLecture.QuestionLecture; +import com.backend.elearning.domain.questionLecture.QuestionLectureRepo; +import com.backend.elearning.domain.questionLecture.QuestionLectureVM; +import com.backend.elearning.domain.student.Student; +import com.backend.elearning.domain.student.StudentRepository; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.stereotype.Service; + +import java.time.LocalDateTime; + +@Service +public class StudentAnswerServiceImpl implements StudentAnswerService { + + private final StudentAnswerRepo studentAnswerRepo; + + private final StudentRepository studentRepository; + private final QuestionLectureRepo questionLectureRepo; + + public StudentAnswerServiceImpl(StudentAnswerRepo studentAnswerRepo, StudentRepository studentRepository, QuestionLectureRepo questionLectureRepo) { + this.studentAnswerRepo = studentAnswerRepo; + this.studentRepository = studentRepository; + this.questionLectureRepo = questionLectureRepo; + } + + @Override + public StudentAnswerVM create(StudentAnswerPostVM studentAnswerPostVM) { + String email = SecurityContextHolder.getContext().getAuthentication().getName(); + QuestionLecture questionLecture = questionLectureRepo.findById(studentAnswerPostVM.questionLectureId()).orElseThrow(); + Student student = studentRepository.findByEmail(email).orElseThrow(); + StudentAnswer studentAnswer = StudentAnswer + .builder() + .content(studentAnswerPostVM.content()) + .student(student) + .questionLecture(questionLecture) + .build(); + studentAnswer.setCreatedAt(LocalDateTime.now()); + studentAnswer.setUpdatedAt(LocalDateTime.now()); + + StudentAnswer savedStudentAnswer = studentAnswerRepo.saveAndFlush(studentAnswer); + return StudentAnswerVM.fromModel(savedStudentAnswer); + } +} diff --git a/src/main/java/com/backend/elearning/domain/questionLecture/studentAnswer/StudentAnswerVM.java b/src/main/java/com/backend/elearning/domain/questionLecture/studentAnswer/StudentAnswerVM.java new file mode 100644 index 0000000..3898f79 --- /dev/null +++ b/src/main/java/com/backend/elearning/domain/questionLecture/studentAnswer/StudentAnswerVM.java @@ -0,0 +1,19 @@ +package com.backend.elearning.domain.questionLecture.studentAnswer; + +import com.backend.elearning.domain.student.Student; +import com.backend.elearning.domain.user.UserGetVM; + +public record StudentAnswerVM( + Long id, + String content, + String createdAt, + String updatedAt, + UserGetVM student +) { + public static final StudentAnswerVM fromModel(StudentAnswer studentAnswer) { + Student student = studentAnswer.getStudent(); + UserGetVM userGetVM = UserGetVM.fromModelStudent(student); + return new StudentAnswerVM(studentAnswer.getId(), studentAnswer.getContent(), studentAnswer.getCreatedAt().toString(), + studentAnswer.getUpdatedAt().toString(), userGetVM); + } +} diff --git a/src/main/java/com/backend/elearning/domain/questionLecture/userAnswer/UserAnswer.java b/src/main/java/com/backend/elearning/domain/questionLecture/userAnswer/UserAnswer.java new file mode 100644 index 0000000..9a2f9f1 --- /dev/null +++ b/src/main/java/com/backend/elearning/domain/questionLecture/userAnswer/UserAnswer.java @@ -0,0 +1,32 @@ +package com.backend.elearning.domain.questionLecture.userAnswer; + +import com.backend.elearning.domain.common.AbstractAuditEntity; +import com.backend.elearning.domain.questionLecture.QuestionLecture; +import com.backend.elearning.domain.student.Student; +import com.backend.elearning.domain.user.User; +import jakarta.persistence.*; +import lombok.*; + +@Entity +@Table(name = "user_answer") +@AllArgsConstructor +@NoArgsConstructor +@Getter +@Setter +@Builder +public class UserAnswer extends AbstractAuditEntity { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + private String content; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "question_lecture_id") + private QuestionLecture questionLecture; + + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_id") + private User user; +} diff --git a/src/main/java/com/backend/elearning/domain/questionLecture/userAnswer/UserAnswerController.java b/src/main/java/com/backend/elearning/domain/questionLecture/userAnswer/UserAnswerController.java new file mode 100644 index 0000000..926cc46 --- /dev/null +++ b/src/main/java/com/backend/elearning/domain/questionLecture/userAnswer/UserAnswerController.java @@ -0,0 +1,39 @@ +package com.backend.elearning.domain.questionLecture.userAnswer; + +import com.backend.elearning.domain.lecture.LectureVm; +import com.backend.elearning.domain.questionLecture.studentAnswer.StudentAnswerPostVM; +import com.backend.elearning.domain.questionLecture.studentAnswer.StudentAnswerVM; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; +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; + +@RestController +@RequestMapping("/api/v1") +public class UserAnswerController { + + private final UserAnswerService userAnswerService; + + + public UserAnswerController(UserAnswerService userAnswerService) { + this.userAnswerService = userAnswerService; + } + + @PostMapping("/user-answer") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "Created", content = + @Content(schema = @Schema(implementation = UserAnswerVM.class))) + }) + public ResponseEntity create ( + @RequestBody UserAnswerPostVM userAnswerPostVM + ) { + UserAnswerVM userAnswerVM = userAnswerService.create(userAnswerPostVM); + return ResponseEntity.status(HttpStatus.OK).body(userAnswerVM); + } +} diff --git a/src/main/java/com/backend/elearning/domain/questionLecture/userAnswer/UserAnswerPostVM.java b/src/main/java/com/backend/elearning/domain/questionLecture/userAnswer/UserAnswerPostVM.java new file mode 100644 index 0000000..68272a7 --- /dev/null +++ b/src/main/java/com/backend/elearning/domain/questionLecture/userAnswer/UserAnswerPostVM.java @@ -0,0 +1,7 @@ +package com.backend.elearning.domain.questionLecture.userAnswer; + +public record UserAnswerPostVM( + String content, + Long questionLectureId +) { +} diff --git a/src/main/java/com/backend/elearning/domain/questionLecture/userAnswer/UserAnswerRepo.java b/src/main/java/com/backend/elearning/domain/questionLecture/userAnswer/UserAnswerRepo.java new file mode 100644 index 0000000..f0e09be --- /dev/null +++ b/src/main/java/com/backend/elearning/domain/questionLecture/userAnswer/UserAnswerRepo.java @@ -0,0 +1,8 @@ +package com.backend.elearning.domain.questionLecture.userAnswer; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface UserAnswerRepo extends JpaRepository { +} diff --git a/src/main/java/com/backend/elearning/domain/questionLecture/userAnswer/UserAnswerService.java b/src/main/java/com/backend/elearning/domain/questionLecture/userAnswer/UserAnswerService.java new file mode 100644 index 0000000..05e7c93 --- /dev/null +++ b/src/main/java/com/backend/elearning/domain/questionLecture/userAnswer/UserAnswerService.java @@ -0,0 +1,6 @@ +package com.backend.elearning.domain.questionLecture.userAnswer; + +public interface UserAnswerService { + + UserAnswerVM create(UserAnswerPostVM userAnswerPostVM); +} diff --git a/src/main/java/com/backend/elearning/domain/questionLecture/userAnswer/UserAnswerServiceImpl.java b/src/main/java/com/backend/elearning/domain/questionLecture/userAnswer/UserAnswerServiceImpl.java new file mode 100644 index 0000000..7410e63 --- /dev/null +++ b/src/main/java/com/backend/elearning/domain/questionLecture/userAnswer/UserAnswerServiceImpl.java @@ -0,0 +1,46 @@ +package com.backend.elearning.domain.questionLecture.userAnswer; + + +import com.backend.elearning.domain.questionLecture.QuestionLecture; +import com.backend.elearning.domain.questionLecture.QuestionLectureRepo; +import com.backend.elearning.domain.questionLecture.studentAnswer.StudentAnswer; +import com.backend.elearning.domain.questionLecture.studentAnswer.StudentAnswerVM; +import com.backend.elearning.domain.student.Student; +import com.backend.elearning.domain.user.User; +import com.backend.elearning.domain.user.UserRepository; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.stereotype.Service; + +import java.time.LocalDateTime; + +@Service +public class UserAnswerServiceImpl implements UserAnswerService { + + private final UserAnswerRepo userAnswerRepo; + private final QuestionLectureRepo questionLectureRepo; + private final UserRepository userRepository; + + public UserAnswerServiceImpl(UserAnswerRepo userAnswerRepo, QuestionLectureRepo questionLectureRepo, UserRepository userRepository) { + this.userAnswerRepo = userAnswerRepo; + this.questionLectureRepo = questionLectureRepo; + this.userRepository = userRepository; + } + + @Override + public UserAnswerVM create(UserAnswerPostVM userAnswerPostVM) { + String email = SecurityContextHolder.getContext().getAuthentication().getName(); + QuestionLecture questionLecture = questionLectureRepo.findById(userAnswerPostVM.questionLectureId()).orElseThrow(); + User user = userRepository.findByEmail(email).orElseThrow(); + UserAnswer userAnswer = UserAnswer + .builder() + .content(userAnswerPostVM.content()) + .user(user) + .questionLecture(questionLecture) + .build(); + userAnswer.setCreatedAt(LocalDateTime.now()); + userAnswer.setUpdatedAt(LocalDateTime.now()); + + UserAnswer savedUserAnswer = userAnswerRepo.saveAndFlush(userAnswer); + return UserAnswerVM.fromModel(savedUserAnswer); + } +} diff --git a/src/main/java/com/backend/elearning/domain/questionLecture/userAnswer/UserAnswerVM.java b/src/main/java/com/backend/elearning/domain/questionLecture/userAnswer/UserAnswerVM.java new file mode 100644 index 0000000..3d3c260 --- /dev/null +++ b/src/main/java/com/backend/elearning/domain/questionLecture/userAnswer/UserAnswerVM.java @@ -0,0 +1,22 @@ +package com.backend.elearning.domain.questionLecture.userAnswer; + +import com.backend.elearning.domain.questionLecture.studentAnswer.StudentAnswerVM; +import com.backend.elearning.domain.student.Student; +import com.backend.elearning.domain.user.User; +import com.backend.elearning.domain.user.UserGetVM; + +public record UserAnswerVM( + Long id, + String content, + String createdAt, + String updatedAt, + UserGetVM user +) { + + public static final UserAnswerVM fromModel(UserAnswer userAnswer) { + User user = userAnswer.getUser(); + UserGetVM userGetVM = UserGetVM.fromModel(user); + return new UserAnswerVM(userAnswer.getId(), userAnswer.getContent(), userAnswer.getCreatedAt().toString(), + userAnswer.getUpdatedAt().toString(), userGetVM); + } +}