-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
implement Question Domain #23
Conversation
@Column(name = "element_type", nullable = false, length = 30) | ||
@Enumerated(EnumType.STRING) | ||
var elementType: ElementType, | ||
var elementType: ElementType = elementType | ||
private set | ||
|
||
|
||
@Column(name = "question_title", nullable = false, length = 100) | ||
var title: String, | ||
var title: String = title | ||
private set | ||
|
||
@Column(name = "question_content", nullable = false, length = 300) | ||
var content: String, | ||
|
||
@OneToMany(mappedBy = "question", fetch = FetchType.LAZY, cascade = [CascadeType.ALL], orphanRemoval = true) | ||
var answers: List<Answer> | ||
var content: String = content | ||
private set | ||
|
||
) : BaseEntity() { | ||
@Column(name = "exposed_at", nullable = false, unique = true) | ||
var exposedAt: LocalDateTime = exposedAt | ||
private set |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
저 이런식으로 선언하는건 처음보는데, 기존 방식이랑 어떤게 다른건가용?! 궁금합니당 ㅋㅋ
그리고 _id 이렇게 사용하는 부분은 다른 엔티티들에도 한번에 적용해놔도 좋을 것 같아요!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
생성자에 var 을 두면 setter 가 열려서 private 해지게하져고 필드에서 선언해주었어요~
data class QuestionResult( | ||
val questionId: Long, | ||
val title: String, | ||
val content: String, | ||
val elementType: ElementType, | ||
val exposedAt: LocalDateTime, | ||
) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
저희 dto 들 네이밍 컨벤션도 맞추면 좋을 것 같아요!
저는 ~RequestDto, ~ResponseDto, ~Dto 이렇게 사용했는데
한번 통일하면 좋을 것 같습니당.
@Component | ||
class QuestionRetriever( | ||
private val questionRepository: QuestionRepository, | ||
) { | ||
fun findQuestion(date: LocalDateTime): Question = | ||
questionRepository.findByExposedAtOrNull(date) ?: throw InternalServerException( | ||
ErrorCode.DATA_NOT_READY_EXCEPTION, | ||
"($date) 날짜의 질문데이터가 준비되지 않았습니다. " | ||
) | ||
|
||
fun findMyQuestionsMonthly(memberId: Long, yearMonth: YearMonth): List<Question> = | ||
questionRepository.findAllByExposedMonthIn(memberId, yearMonth) | ||
|
||
fun findAnsweredYearMonth(memberId: Long): Set<YearMonth> = | ||
questionRepository.findAllExposedAtIAnsweredMonth(memberId) | ||
.map { YearMonth.of(it.year, it.monthValue) } | ||
.toSet() // application 에서 중복 처리중, 500 넘는 warn log 발생시 월별 1건 조회하도록 쿼리 개선 필요! | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
여기도 컨벤션 맞추면 좋을 것 같아요! Member 쪽에는 MemberExplorer 라고 올려둬서..
LocalDateTime.of(yearMonth.year, yearMonth.monthValue, 1, 0, 0), | ||
// end (end day of month, 윤년 포함) | ||
LocalDateTime.of(yearMonth.year, yearMonth.monthValue, yearMonth.month.maxLength(), 0, 0), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
달의 마지막 날의 경우 yyyyMMddHHmmss 를 20240301000000 일 경우에,
between 에 포함될까요? 안전하게 23시 59분 59초 정도로 세팅해줘도 좋을 것 같아요!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
더 안전하게 하기위해
gte(before), lt(later) 로 정의해둘게요
override fun findAllExposedAtIAnsweredMonth(memberId: Long): List<LocalDateTime> { | ||
return queryFactory |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
typo 한번 확인 부탁드립니다!
@Auth | ||
@Operation(summary = "오늘의 질문") | ||
@GetMapping("/api/v1/questions/today") | ||
fun getQuestionToday(): ApiResponse<QuestionTodayResponse> = questionService.getQuestionToday().let { | ||
ApiResponse.success(toQuestionTodayResponse(it)) | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
오늘의 질문을 답변했을 때, 모두의 답변 보기가 활성화되어야 해서,
오늘의 질문 답변 여부 조회 api 도 필요할 것 같아요!
465b507
to
a76f8ed
Compare
private val questionService: QuestionService, | ||
) { | ||
@Auth | ||
@Operation(summary = "오늘의 질문") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이 파일의 Operation 부분 명세서와 동일하게 기재해주면 좋을 것 같아요
예를 들면, [인증] 오늘의 질문 조회 로요!
add exposed_at column as unique get today question api get question i answered api get yearMonth i answered api
✒️ 관련 이슈번호
🔑 Key Changes
📸 Screenshot
📢 To Reviewers