Igloo-Club / Igloo-Club-BE

1 stars 1 forks source link

[feat] 눈길 알림 기능 추가 #36

Closed clap-0 closed 4 months ago

clap-0 commented 5 months ago

🔥 Related Issues

💜 작업 내용

✅ PR Point

1️⃣ 알림 MMS

@Service
@Transactional(readOnly = true)
public class NungilService {
    @Transactional
    public void sendNungil(Member member, Long nungilId){
        ...
        // 눈길 받은 사용자에게 알림 전송
        String phoneNumber = receiver.getPhoneNumber();
        String url = BASE_URL + "/receiveddetailpage/" + newNungil.getId();
        String text = "[눈길] 새로운 눈길이 도착했어요. 얼른 확인해보세요!\n" + url;

        coolSMS.send(phoneNumber, text);
    }
    @Transactional
    public void matchNungil(Long nungilId){
        ...
        // 눈길 보낸 사용자에게 알림 전송
        String phoneNumber = sender.getPhoneNumber();
        String url = BASE_URL + "/finishmatch/" + sentNungil.getId();
        String text = "[눈길] 축하해요! 서로의 눈길이 닿았어요. 채팅방을 통해 두 분의 첫만남 약속을 잡아보세요.\n" + url;

        coolSMS.send(phoneNumber, text);
    }

2️⃣ 마케팅 정보 수신 동의 여부 갱신

Member 엔티티에 임베디드 타입 형태로 ConsentPolicy 클래스를 만들고, 마케팅 정보 수신 동의 여부를 필드로 가지게 했습니다. 이후 새로운 선택 약관이 추가된다면, 해당 클래스에 넣을 예정입니다.

@Getter
@Embeddable
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class ConsentPolicy {

    // 마케팅 정보 수신 동의
    private Boolean agreeMarketing = true;

    public static ConsentPolicy create(Boolean agreeMarketing) {
        ConsentPolicy consentPolicy = new ConsentPolicy();
        consentPolicy.agreeMarketing = agreeMarketing;
        return consentPolicy;
    }
}

약관 갱신은 PATCH /api/member/consent 경로로 하였습니다.

@PatchMapping("/api/member/consent")
public ResponseEntity<?> updateConsentPolicy(@RequestBody ConsentUpdateRequest request, Principal principal) {
    Member member = getMember(principal);
    memberService.updateConsentPolicy(request, member);
    return ResponseEntity.ok(null);
}
/**
 * 약관 선택 항목 동의 여부를 갱신하는 메서드입니다.
 * @param request 선택 약관 별 동의 여부를 나타내는 DTO
 * @param member 약관 동의 여부를 갱신할 사용자 Entity
 */
@Transactional
public void updateConsentPolicy(ConsentUpdateRequest request, Member member) {
    ConsentPolicy consentPolicy = ConsentPolicy.create(request.getAgreeMarketing());

    member.updateConsentPolicy(consentPolicy);
}

눈길 알림 MMS의 경우, 본래 마케팅 정보 수신 동의 여부에 따라 발송할 계획이었으나, 약관을 읽었을 때, 알림 MMS가 광고성 정보 제공 목적이 아니라 판단되어 해당 기능은 보류했습니다.

☀ 스크린샷 / GIF / 화면 녹화