Skip to content

Commit

Permalink
Merge branch 'feature/JSW/TBH-211--DISABLED-' into develop
Browse files Browse the repository at this point in the history
  • Loading branch information
seonwoo-jung committed May 29, 2024
2 parents edfb881 + 9e3c99e commit d71f96b
Show file tree
Hide file tree
Showing 18 changed files with 261 additions and 380 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.tobe.healthy.member.repository;

import com.querydsl.core.Tuple;
import com.querydsl.core.types.OrderSpecifier;
import com.querydsl.core.types.Predicate;
import com.querydsl.core.types.dsl.BooleanExpression;
Expand All @@ -26,7 +25,6 @@
import java.util.Optional;

import static com.tobe.healthy.course.domain.entity.QCourse.course;
import static com.tobe.healthy.gym.domain.entity.QGym.gym;
import static com.tobe.healthy.member.domain.entity.MemberType.STUDENT;
import static com.tobe.healthy.member.domain.entity.MemberType.TRAINER;
import static com.tobe.healthy.member.domain.entity.QMember.member;
Expand Down Expand Up @@ -143,7 +141,6 @@ public MemberDetailResult getMemberOfTrainer(Long memberId) {
.on(member.id.eq(trainerMemberMapping.member.id))
.leftJoin(schedule)
.on(member.id.eq(schedule.applicant.id)
, scheduleDelYnEq(false)
, scheduleReservationStatusEq(COMPLETED)
, lessonDateTimeAfterNow())
.where(memberIdEq(memberId), memberDelYnEq(false))
Expand All @@ -156,10 +153,6 @@ private BooleanExpression scheduleReservationStatusEq(ReservationStatus status)
return schedule.reservationStatus.eq(status);
}

private BooleanExpression scheduleDelYnEq(boolean bool) {
return schedule.delYn.eq(bool);
}

@Override
public List<Member> findAllTrainerByGym(Long gymId) {
return queryFactory.select(member)
Expand Down
34 changes: 10 additions & 24 deletions src/main/java/com/tobe/healthy/schedule/domain/entity/Schedule.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@
import com.tobe.healthy.lessonhistory.domain.entity.LessonHistory;
import com.tobe.healthy.member.domain.entity.Member;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.ColumnDefault;
import org.hibernate.annotations.DynamicUpdate;
import org.jetbrains.annotations.Nullable;

Expand All @@ -28,17 +28,23 @@
@NoArgsConstructor(access = PROTECTED)
@Getter
@DynamicUpdate
@AllArgsConstructor
@Builder
public class Schedule extends BaseTimeEntity<Schedule, Long> {

@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "schedule_id")
private Long id;

private LocalDate lessonDt;

private LocalTime lessonStartTime;

private LocalTime lessonEndTime;

@Enumerated(STRING)
@Builder.Default
private ReservationStatus reservationStatus = AVAILABLE;

@ManyToOne(fetch = LAZY, cascade = PERSIST)
Expand All @@ -52,16 +58,15 @@ public class Schedule extends BaseTimeEntity<Schedule, Long> {

@OneToMany(fetch = LAZY, mappedBy = "schedule", orphanRemoval = true)
@Nullable
@Builder.Default
private List<ScheduleWaiting> scheduleWaiting = new ArrayList<>();

@ColumnDefault("false")
private boolean delYn = false;

@ManyToOne(fetch = LAZY)
@JoinColumn(name = "course_id")
private Course course;

@OneToMany(fetch = LAZY, mappedBy = "schedule")
@Builder.Default
private List<LessonHistory> lessonHistories = new ArrayList<>();

public static Schedule registerSchedule(LocalDate date, Member trainer, LocalTime startTime, LocalTime endTime, ReservationStatus reservationStatus) {
Expand All @@ -79,10 +84,6 @@ public void updateReservationStatusToNoShow(ReservationStatus reservationStatus)
this.reservationStatus = reservationStatus;
}

public void revertReservationStatusToNoShow() {
this.reservationStatus = COMPLETED;
}

public void registerSchedule(Member member) {
this.applicant = member;
this.reservationStatus = COMPLETED;
Expand All @@ -102,22 +103,7 @@ public void changeApplicantInSchedule(Member applicant) {
this.applicant = applicant;
}

@Builder
public Schedule(Long id, LocalDate lessonDt, LocalTime lessonStartTime, LocalTime lessonEndTime,
ReservationStatus reservationStatus, Member trainer, @Nullable Member applicant,
@Nullable List<ScheduleWaiting> scheduleWaiting, boolean delYn) {
this.id = id;
this.lessonDt = lessonDt;
this.lessonStartTime = lessonStartTime;
this.lessonEndTime = lessonEndTime;
this.reservationStatus = reservationStatus;
this.trainer = trainer;
this.applicant = applicant;
this.scheduleWaiting = scheduleWaiting;
this.delYn = delYn;
}

public void updateLessonDtToClosedDay() {
public void updateScheduleToDisabled() {
this.reservationStatus = DISABLED;
this.applicant = null;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@
import com.tobe.healthy.common.BaseTimeEntity;
import com.tobe.healthy.member.domain.entity.Member;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.ColumnDefault;
import org.hibernate.annotations.DynamicUpdate;

import static jakarta.persistence.FetchType.LAZY;
Expand All @@ -17,6 +17,8 @@
@NoArgsConstructor(access = PROTECTED)
@Getter
@DynamicUpdate
@AllArgsConstructor
@Builder
public class ScheduleWaiting extends BaseTimeEntity<ScheduleWaiting, Long> {
@Id
@GeneratedValue(strategy = IDENTITY)
Expand All @@ -31,20 +33,10 @@ public class ScheduleWaiting extends BaseTimeEntity<ScheduleWaiting, Long> {
@JoinColumn(name = "member_id")
private Member member;

@ColumnDefault("false")
private final boolean delYn = false;

public static ScheduleWaiting register(Member member, Schedule schedule) {
return ScheduleWaiting.builder()
.schedule(schedule)
.member(member)
.build();
}

@Builder
public ScheduleWaiting(Long id, Schedule schedule, Member member) {
this.id = id;
this.schedule = schedule;
this.member = member;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,11 @@
public interface CommonScheduleRepository extends JpaRepository<Schedule, Long>, CommonScheduleRepositoryCustom {

@EntityGraph(attributePaths = {"applicant"})
@Query("select s from Schedule s where s.applicant.id = :userId and s.id = :scheduleId and s.delYn = false")
@Query("select s from Schedule s where s.applicant.id = :userId and s.id = :scheduleId")
Optional<Schedule> findScheduleByApplicantId(Long userId, Long scheduleId);

@Lock(value = LockModeType.PESSIMISTIC_WRITE)
@EntityGraph(attributePaths = {"trainer"})
@Query("select s from Schedule s where s.id = :scheduleId and s.reservationStatus = 'AVAILABLE' and s.applicant is null and s.delYn = false")
@Query("select s from Schedule s where s.id = :scheduleId and s.reservationStatus = 'AVAILABLE' and s.applicant is null")
Optional<Schedule> findAvailableScheduleById(Long scheduleId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -32,17 +32,13 @@ public List<MyScheduleWaiting> findAllMyScheduleWaiting(Long memberId) {
.innerJoin(scheduleWaiting.schedule, schedule).fetchJoin()
.innerJoin(scheduleWaiting.member, new QMember("member")).fetchJoin()
.innerJoin(schedule.trainer, new QMember("trainer")).fetchJoin()
.where(scheduleWaitingMemberIdEq(memberId), delYnFalse(),
.where(scheduleWaitingMemberIdEq(memberId),
lessonDateTimeAfterYesterday())
.orderBy(scheduleWaiting.schedule.lessonDt.asc(), scheduleWaiting.schedule.lessonStartTime.asc())
.fetch();
return results.stream().map(MyScheduleWaiting::from).collect(toList());
}

private BooleanExpression delYnFalse() {
return scheduleWaiting.delYn.isFalse();
}

private BooleanExpression scheduleWaitingMemberIdEq(Long memberId) {
return scheduleWaiting.member.id.eq(memberId);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
import com.querydsl.jpa.impl.JPAQueryFactory;
import com.tobe.healthy.member.domain.entity.Member;
import com.tobe.healthy.member.domain.entity.QMember;
import com.tobe.healthy.schedule.domain.dto.in.RetrieveTrainerScheduleByLessonInfo;
import com.tobe.healthy.schedule.domain.dto.in.StudentScheduleCond;
import com.tobe.healthy.schedule.domain.dto.out.MyReservation;
import com.tobe.healthy.schedule.domain.dto.out.ScheduleCommandResult;
Expand Down Expand Up @@ -40,8 +39,8 @@ public List<ScheduleCommandResult> findAllSchedule(StudentScheduleCond searchCon
.from(schedule)
.leftJoin(schedule.trainer, new QMember("trainer")).fetchJoin()
.leftJoin(schedule.applicant, new QMember("applicant")).fetchJoin()
.leftJoin(schedule.scheduleWaiting, scheduleWaiting).on(scheduleWaiting.delYn.isFalse())
.where(lessonDtEq(searchCond), lessonDtBetween(searchCond), delYnFalse(), scheduleTrainerIdEq(trainerId)
.leftJoin(schedule.scheduleWaiting, scheduleWaiting)
.where(lessonDtEq(searchCond), lessonDtBetween(searchCond), scheduleTrainerIdEq(trainerId)
, scheduleReservationStatusForStudent())
.orderBy(schedule.lessonDt.asc(), schedule.lessonStartTime.asc())
.fetch();
Expand All @@ -59,7 +58,7 @@ public List<ScheduleCommandResult> findAllByApplicantId(Long memberId) {
.from(schedule)
.leftJoin(schedule.trainer, trainer).fetchJoin()
.leftJoin(schedule.scheduleWaiting, scheduleWaiting).fetchJoin()
.where(scheduleApplicantIdEq(memberId), scheduleDelYnFalse(), scheduleWaitingDelYnFalse())
.where(scheduleApplicantIdEq(memberId))
.orderBy(schedule.lessonDt.desc(), schedule.lessonStartTime.asc())
.fetch();
return fetch.stream()
Expand Down Expand Up @@ -101,10 +100,6 @@ private Predicate lessonDateTimeAfterNow() {
.or(schedule.lessonDt.goe(LocalDate.now()).and(schedule.lessonStartTime.after(LocalTime.now())));
}

private BooleanExpression scheduleDelYnFalse() {
return schedule.delYn.isFalse();
}

private BooleanExpression lessonDtBetween(StudentScheduleCond searchCond) {
if (!ObjectUtils.isEmpty(searchCond.getLessonStartDt()) && !ObjectUtils.isEmpty(searchCond.getLessonEndDt())) {
return schedule.lessonDt.between(searchCond.getLessonStartDt(), searchCond.getLessonEndDt());
Expand All @@ -124,14 +119,6 @@ private BooleanExpression scheduleTrainerIdEq(Long trainerId) {
return schedule.trainer.id.eq(trainerId);
}

private BooleanExpression scheduleWaitingDelYnFalse() {
return scheduleWaiting.delYn.isFalse();
}

private BooleanExpression delYnFalse() {
return schedule.delYn.eq(false);
}

private BooleanExpression scheduleApplicantIdEq(Long memberId) {
return schedule.applicant.id.eq(memberId);
}
Expand Down
Loading

0 comments on commit d71f96b

Please sign in to comment.