Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 15 additions & 6 deletions src/main/java/com/petlog/auth/service/TokenService.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import com.petlog.auth.repository.RefreshTokenRepository;
import com.petlog.common.config.jwt.TokenProvider;
import com.petlog.member.entity.Member;
import com.petlog.member.service.MemberService;
import com.petlog.member.repository.MemberRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Service;
Expand All @@ -23,39 +23,48 @@ public class TokenService {
private static final int ONE_MONTH_HOURS = 24 * 30;

private final TokenProvider tokenProvider;
private final MemberService memberService;
private final RefreshTokenRepository refreshTokenRepository;
private final MemberRepository memberRepository;

@Transactional(readOnly = true)
@Profile("local")
public String generateLocalAccessToken(final Long memberId) {
final Member member = memberService.getMember(memberId);
final Member member = getMember(memberId);

return tokenProvider.generateAccessToken(member, Duration.ofHours(ONE_YEAR_HOURS));
}

private Member getMember(final Long memberId) {
return memberRepository.findById(memberId)
.orElseThrow(() -> new IllegalArgumentException("존재하지 않는 회원입니다."));
}

@Transactional(readOnly = true)
public String generateAccessToken(final Long memberId) {
final Member member = memberService.getMember(memberId);
final Member member = getMember(memberId);

return tokenProvider.generateAccessToken(member, Duration.ofHours(ONE_HOUR));
}

@Transactional
public String generateRefreshToken(final Long memberId) {
final Member member = memberService.getMember(memberId);
final Member member = getMember(memberId);

final String refreshToken = tokenProvider.generateRefreshToken(member, Duration.ofHours(ONE_MONTH_HOURS));
refreshTokenRepository.save(new RefreshToken(member, refreshToken));

return refreshToken;
}

@Transactional(readOnly = true)
public String reissueAccessToken(final String refreshToken) {

if(!tokenProvider.validToken(refreshToken)) {
throw new IllegalArgumentException("유효하지 않은 refreshToken 입니다.");
}

final Long memberId = getRefreshToken(refreshToken).getMember().getId();
final Member member = memberService.getMember(memberId);
final Member member = getMember(memberId);

return tokenProvider.generateAccessToken(member, Duration.ofHours(EXPIRED_AT_HOURS));
}
Expand Down
5 changes: 3 additions & 2 deletions src/main/java/com/petlog/docs/MemberControllerDocs.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.petlog.docs;

import com.petlog.auth.resolver.Authenticated;
import com.petlog.member.controller.dto.request.UpdateIsNotificationEnabledRequestDto;
import com.petlog.member.controller.dto.response.GetIsNotificationEnabledResponseDto;
import io.swagger.v3.oas.annotations.Operation;
Expand All @@ -12,11 +13,11 @@ public interface MemberControllerDocs {

@io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "200", description = "알림 수신 여부 조회에 성공하였습니다.")
@Operation(summary = "알림 수신 여부 조회 API")
ResponseEntity<ApiResponse<GetIsNotificationEnabledResponseDto>> getIsNotificationEnabled();
ResponseEntity<ApiResponse<GetIsNotificationEnabledResponseDto>> getIsNotificationEnabled(@Authenticated final Long memberId);

@io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "200", description = "알림 수신 여부 설정에 성공하였습니다.")
@Operation(summary = "알림 수신 여부 설정 API")
ResponseEntity<ApiResponse<Void>> updateIsNotificationEnabled(final UpdateIsNotificationEnabledRequestDto request);
ResponseEntity<ApiResponse<Void>> updateIsNotificationEnabled(@Authenticated final Long memberId, final UpdateIsNotificationEnabledRequestDto request);

@io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "200", description = "회원 탈퇴에 성공하였습니다.")
@Operation(summary = "회원 탈퇴 API")
Expand Down
14 changes: 12 additions & 2 deletions src/main/java/com/petlog/member/controller/MemberController.java
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package com.petlog.member.controller;

import com.petlog.auth.resolver.Authenticated;
import com.petlog.common.response.ApiResponse;
import com.petlog.docs.MemberControllerDocs;
import com.petlog.member.controller.dto.request.UpdateIsNotificationEnabledRequestDto;
import com.petlog.member.controller.dto.response.GetIsNotificationEnabledResponseDto;
import com.petlog.member.service.MemberService;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.DeleteMapping;
Expand All @@ -20,9 +22,14 @@
@RestController
public class MemberController implements MemberControllerDocs {

private final MemberService memberService;

@GetMapping("/api/notification")
public ResponseEntity<ApiResponse<GetIsNotificationEnabledResponseDto>> getIsNotificationEnabled() {
final GetIsNotificationEnabledResponseDto response = new GetIsNotificationEnabledResponseDto(true);
public ResponseEntity<ApiResponse<GetIsNotificationEnabledResponseDto>> getIsNotificationEnabled(
@Authenticated final Long memberId
) {
final boolean isNotificationEnabled = memberService.getIsNotificationEnabled(memberId);
final GetIsNotificationEnabledResponseDto response = new GetIsNotificationEnabledResponseDto(isNotificationEnabled);

return ResponseEntity.ok(
ApiResponse.successWithData(GET_IS_NOTIFICATION_ENABLED, response)
Expand All @@ -31,8 +38,11 @@ public ResponseEntity<ApiResponse<GetIsNotificationEnabledResponseDto>> getIsNot

@PutMapping("/api/notification")
public ResponseEntity<ApiResponse<Void>> updateIsNotificationEnabled(
@Authenticated final Long memberId,
@RequestBody final UpdateIsNotificationEnabledRequestDto request
) {
memberService.updateIsNotificationEnabled(memberId, request.isNotificationEnabled());

return ResponseEntity.ok(
ApiResponse.success(UPDATE_IS_NOTIFICATION_ENABLED)
);
Expand Down
4 changes: 4 additions & 0 deletions src/main/java/com/petlog/member/entity/Member.java
Original file line number Diff line number Diff line change
Expand Up @@ -43,4 +43,8 @@ public Member(
this.isNotificationEnabled = true;
this.providerId = providerId;
}

public void updateIsNotificationEnabled(final boolean isNotificationEnabled) {
this.isNotificationEnabled = isNotificationEnabled;
}
}
25 changes: 20 additions & 5 deletions src/main/java/com/petlog/member/service/MemberService.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,15 @@
import com.petlog.member.service.dto.LoginDto;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@RequiredArgsConstructor
@Service
public class MemberService {

private final MemberRepository memberRepository;

public Member getMember(final Long memberId) {
return memberRepository.findById(memberId)
.orElseThrow(() -> new IllegalArgumentException("존재하지 않는 memberId 입니다. memberId: " + memberId));
}

@Transactional
public Member login(final LoginDto dto) {
final Member member = memberRepository.findByProviderId(dto.providerId());

Expand All @@ -30,4 +27,22 @@ public Member login(final LoginDto dto) {
private Member signUp(final String name, final String email, final String providerId) {
return memberRepository.save(new Member(name, email, providerId));
}

@Transactional(readOnly = true)
public boolean getIsNotificationEnabled(final Long memberId) {
final Member member = getMember(memberId);

return member.isNotificationEnabled();
}

private Member getMember(final Long memberId) {
return memberRepository.findById(memberId)
.orElseThrow(() -> new IllegalArgumentException("존재하지 않는 회원입니다."));
}

@Transactional
public void updateIsNotificationEnabled(final Long memberId, final boolean isNotificationEnabled) {
final Member member = getMember(memberId);
member.updateIsNotificationEnabled(isNotificationEnabled);
}
}
1 change: 1 addition & 0 deletions src/main/java/com/petlog/pet/service/PetService.java
Original file line number Diff line number Diff line change
Expand Up @@ -178,6 +178,7 @@ public void createWateringRecord(final Long memberId, final Long groupId, final
wateringDailyRecordRepository.save(record);
}

@Transactional
public void createPoopRecord(Long memberId, final Long groupId, final String memo) {
final Member member = getMember(memberId);
final PetGroup petGroup = getPetGroup(groupId);
Expand Down
2 changes: 2 additions & 0 deletions src/main/java/com/petlog/s3/service/S3Service.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import com.petlog.s3.service.dto.S3PresignedUrlItem;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.UUID;
Expand All @@ -18,6 +19,7 @@ public class S3Service {
private final PresignedUrlGenerator presignedUrlGenerator;
private final MemberRepository memberRepository;

@Transactional(readOnly = true)
public GeneratedS3PresignedUrlDto generateS3PresignedUrl(final Long memberId, final FileType fileType, final List<String> fileNames) {
getMember(memberId);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,7 @@ private void validateIsScheduleWriter(final Member member, final Schedule schedu
}
}

@Transactional
public void deleteSchedule(final Long memberId, final Long groupId, final Long scheduleId) {
final Member member = getMember(memberId);
final PetGroup petGroup = getPetGroup(groupId);
Expand Down
Loading