Skip to content

Commit

Permalink
Merge pull request #171 from 4bujak-4bujak/develop
Browse files Browse the repository at this point in the history
develop -> main
  • Loading branch information
zoomin3022 authored Jun 11, 2024
2 parents 0f478f3 + 5c0f296 commit 88c26e1
Show file tree
Hide file tree
Showing 8 changed files with 99 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

import com.example.sabujak.common.response.Response;
import com.example.sabujak.member.dto.request.MemberRequestDto;
import com.example.sabujak.member.dto.response.MemberModalIgnoredResponseDto;
import com.example.sabujak.member.dto.response.MemberResponseDto;
import com.example.sabujak.member.service.MemberService;
import com.example.sabujak.security.dto.request.AuthRequestDto;
Expand All @@ -21,6 +22,8 @@
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.time.LocalDateTime;

@Tag(name = "members", description = "회원 API")
//swagger
@RestController
Expand Down Expand Up @@ -98,4 +101,32 @@ public ResponseEntity<Response<Void>> changeMemberImage(@AuthenticationPrincipal
return ResponseEntity.ok(Response.success(null));
}

@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "조회 성공", content = @Content(schema = @Schema(implementation = Response.class))),
@ApiResponse(responseCode = "404", description = "조회 실패", content = @Content(schema = @Schema(implementation = Response.class)))})
@Operation(summary = "회원 모달 다시보지 않기 체크 여부 조회", description = "회원이 24시간 내에 다시보지않기를 체크했는지 여부를 조회한다.")
@Parameters({
@Parameter(name = "access", hidden = true)
})
@GetMapping("/members/modal")
public ResponseEntity<Response<MemberModalIgnoredResponseDto>> checkMemberModalIgnored( @AuthenticationPrincipal AuthRequestDto.Access access
)
{
return ResponseEntity.ok(Response.success(memberService.checkModalIgnored(access.getEmail())));
}


@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "업데이트 성공", content = @Content(schema = @Schema(implementation = Response.class))),
@ApiResponse(responseCode = "404", description = "업데이트 실패", content = @Content(schema = @Schema(implementation = Response.class)))})
@Operation(summary = "회원 모달 다시보지 않기 체크 여부 업데이트", description = "회원이 24시간 내에 다시보지않기를 체크했는지 여부를 업데이트. ignored = false -> 다시보지않기 누른 적 없거나 24시간이 지남 따라서 모달 띄워야함")
@Parameters({
@Parameter(name = "access", hidden = true)
})
@PatchMapping("/members/modal")
public ResponseEntity<Response<Void>> changeMemberModalIgnored( @AuthenticationPrincipal AuthRequestDto.Access access){
memberService.changeModalIgnored(access.getEmail());
return ResponseEntity.ok(Response.success(null));
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.example.sabujak.member.dto.response;

public record MemberModalIgnoredResponseDto(Long memberId, boolean ignored) {
public static MemberModalIgnoredResponseDto of(Long memberId, boolean ignored) {
return new MemberModalIgnoredResponseDto(memberId, ignored);
}
}
16 changes: 16 additions & 0 deletions src/main/java/com/example/sabujak/member/entity/Member.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
import lombok.*;

import java.security.SecureRandom;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;

Expand Down Expand Up @@ -54,6 +56,12 @@ public class Member extends BaseEntity {
@Column(name = "member_deleteCheck", nullable = false)
private Boolean memberDeleteCheck = false;

@Column(name = "member_modal_ignored", nullable = false)
private boolean memberModalIgnored = false;

@Column(name = "member_modal_ignored_time")
private LocalDateTime memberModalIgnoredTime;

@Column(name = "member_role")
@Enumerated(EnumType.STRING)
private Role memberRole = Role.ROLE_USER;
Expand Down Expand Up @@ -83,6 +91,9 @@ private Member(String memberEmail, String memberPassword, String memberName, Str
this.memberJob = memberJob;
this.memberSmsAgree = memberSmsAgree;
this.memberNickname = generateRandomNickname();
this.memberModalIgnoredTime = LocalDateTime.parse(
"2024-06-09 11:11:11.111",
DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"));
}

public void signOut() {
Expand All @@ -93,6 +104,11 @@ public void changeMemberPassword(String encryptedPassword) {
this.memberPassword = encryptedPassword;
}

public void changeModalIgnoredAndTime(LocalDateTime now){
this.memberModalIgnored = true;
this.memberModalIgnoredTime = now;
}

private String generateRandomNickname() {
String characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
StringBuilder result = new StringBuilder();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ private BooleanExpression searchKeyword(String searchTerm) {
@Override
public List<Member> searchMembersCanInviteInMembers(List<Member> members, LocalDateTime startAt, LocalDateTime endAt) {
return queryFactory.selectFrom(member)
.join(member.memberReservations, memberReservation)
.leftJoin(member.memberReservations, memberReservation)
.where(member.in(members),
reservationCondition(startAt, endAt))
.fetch();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,21 +1,22 @@
package com.example.sabujak.member.service;

import com.example.sabujak.image.service.ImageService;
import com.example.sabujak.member.dto.response.MemberModalIgnoredResponseDto;
import com.example.sabujak.member.dto.response.MemberResponseDto;
import com.example.sabujak.member.entity.Member;
import com.example.sabujak.member.entity.MemberImage;
import com.example.sabujak.member.repository.MemberImageRepository;
import com.example.sabujak.member.repository.MemberRepository;
import com.example.sabujak.security.exception.AuthException;
import io.jsonwebtoken.lang.Objects;
import lombok.RequiredArgsConstructor;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartFile;

import java.time.Duration;
import java.time.LocalDateTime;

import static com.example.sabujak.security.exception.AuthErrorCode.ACCOUNT_NOT_EXISTS;
import static com.example.sabujak.security.exception.AuthErrorCode.INVALID_CURRENT_PASSWORD;

Expand Down Expand Up @@ -88,4 +89,30 @@ public void changeMemberImage(String email, MultipartFile image) {
imageService.deleteImage(exImage.getImageUrl());

}

@Transactional
public void changeModalIgnored(String email){
final Member member = memberRepository.findByMemberEmail(email)
.orElseThrow(() -> new AuthException(ACCOUNT_NOT_EXISTS));
LocalDateTime now = LocalDateTime.now();
member.changeModalIgnoredAndTime(now);
}

public MemberModalIgnoredResponseDto checkModalIgnored(String email){
final Member member = memberRepository.findByMemberEmail(email)
.orElseThrow(() -> new AuthException(ACCOUNT_NOT_EXISTS));
LocalDateTime now = LocalDateTime.now();

if (member.getMemberModalIgnoredTime() == null)
return MemberModalIgnoredResponseDto.of(member.getMemberId(), false);

if (member.isMemberModalIgnored()){
long betweenHours = Duration.between(now, member.getMemberModalIgnoredTime()).toHours();
if (betweenHours < 24L)
return MemberModalIgnoredResponseDto.of(member.getMemberId(), true);
}
return MemberModalIgnoredResponseDto.of(member.getMemberId(), false);
}


}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import com.example.sabujak.member.entity.Member;
import com.example.sabujak.reservation.entity.MemberReservationType;
import com.example.sabujak.reservation.entity.Reservation;
import com.example.sabujak.reservation.entity.ReservationStatus;
import com.example.sabujak.space.dto.SpaceType;
import com.example.sabujak.space.entity.FocusDesk;
import com.example.sabujak.space.entity.Space;
Expand Down Expand Up @@ -72,8 +73,10 @@ public static class ReservationDetails {
private List<MemberResponseDto.MemberListForReservation> participants;
private MemberReservationType myMemberType;
private ReservationProgress reservationProgress;
private ReservationStatus reservationStatus;

public static ReservationDetails of(Reservation reservation, Space space, Member representative, List<Member> participants, MemberReservationType myMemberType, ReservationProgress reservationProgress) {
public static ReservationDetails of(Reservation reservation, Space space, Member representative, List<Member> participants,
MemberReservationType myMemberType, ReservationProgress reservationProgress, ReservationStatus reservationStatus) {
ReservationDetails reservationDetails = new ReservationDetails();
reservationDetails.reservationId = reservation.getReservationId();
reservationDetails.reservationName = reservation.getReservationName();
Expand All @@ -99,6 +102,7 @@ public static ReservationDetails of(Reservation reservation, Space space, Member
.collect(Collectors.toList());
reservationDetails.myMemberType = myMemberType;
reservationDetails.reservationProgress = reservationProgress;
reservationDetails.reservationStatus = reservationStatus;

return reservationDetails;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,6 @@ public interface MemberReservationRepository extends JpaRepository<MemberReserva
@Query("select mr from MemberReservation mr join fetch mr.member m join fetch m.image where mr.reservation in :reservations and mr.memberReservationStatus = 'ACCEPTED'")
List<MemberReservation> findMemberReservationsByReservations(List<Reservation> reservations);

@Query("select mr from MemberReservation mr join fetch mr.member m join fetch m.image where mr.reservation = :reservation and mr.memberReservationStatus = 'ACCEPTED'")
@Query("select mr from MemberReservation mr join fetch mr.member m join fetch m.image where mr.reservation = :reservation")
List<MemberReservation> findByReservation(Reservation reservation);
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,15 @@
import com.example.sabujak.common.dto.ToastType;
import com.example.sabujak.member.entity.Member;
import com.example.sabujak.member.repository.MemberRepository;
import com.example.sabujak.reservation.dto.event.CancelRechargingRoomNotification;
import com.example.sabujak.reservation.dto.event.FindMeetingRoomEntryNotificationMembersEvent;
import com.example.sabujak.reservation.dto.event.FindRechargingRoomEntryNotificationMemberEvent;
import com.example.sabujak.reservation.dto.event.ReserveMeetingRoomEvent;
import com.example.sabujak.reservation.dto.event.ReserveRechargingRoomEvent;
import com.example.sabujak.reservation.dto.event.*;
import com.example.sabujak.reservation.dto.request.ReservationRequestDto;
import com.example.sabujak.reservation.dto.response.ReservationHistoryResponse;
import com.example.sabujak.reservation.dto.response.ReservationProgress;
import com.example.sabujak.reservation.dto.response.ReservationResponseDto;
import com.example.sabujak.reservation.entity.MemberReservation;
import com.example.sabujak.reservation.entity.MemberReservationType;
import com.example.sabujak.reservation.entity.Reservation;
import com.example.sabujak.reservation.entity.ReservationStatus;
import com.example.sabujak.reservation.exception.ReservationException;
import com.example.sabujak.reservation.repository.MemberReservationRepository;
import com.example.sabujak.reservation.repository.ReservationRepository;
Expand Down Expand Up @@ -372,6 +369,7 @@ public ReservationHistoryResponse.ReservationDetails getReservationDetails(Strin
List<Member> participants = new ArrayList<>();

boolean checkMyReservation = false;
ReservationStatus reservationStatus = null;

for (MemberReservation memberReservation : memberReservations) {
if (memberReservation.getMemberReservationType().equals(MemberReservationType.REPRESENTATIVE)) {
Expand All @@ -382,6 +380,7 @@ public ReservationHistoryResponse.ReservationDetails getReservationDetails(Strin

if (memberReservation.getMember().getMemberId() == member.getMemberId()) {
checkMyReservation = true;
reservationStatus = memberReservation.getMemberReservationStatus();
}
}

Expand Down Expand Up @@ -410,7 +409,9 @@ public ReservationHistoryResponse.ReservationDetails getReservationDetails(Strin
representative,
participants,
myMemberType,
reservationProgress);
reservationProgress,
reservationStatus
);
}

@Transactional
Expand Down Expand Up @@ -483,7 +484,7 @@ public void cancelRechargingRoom(String email, Long reservationId) {
Reservation reservation = reservationRepository.findById(reservationId)
.orElseThrow(() -> new ReservationException(RESERVATION_NOT_EXISTS));

if(reservation.getMemberReservations().get(0).getMember().getMemberId() != member.getMemberId()) {
if (reservation.getMemberReservations().get(0).getMember().getMemberId() != member.getMemberId()) {
throw new ReservationException(NOT_RESERVED_BY_MEMBER);
} else if (reservation.getReservationEndDateTime().isBefore(LocalDateTime.now())) {
throw new ReservationException(ALREADY_ENDED_RESERVATION);
Expand Down

0 comments on commit 88c26e1

Please sign in to comment.