Skip to content

Commit

Permalink
Merge pull request #24 from Re-4aliens/feat/#15_memberInfo
Browse files Browse the repository at this point in the history
Feat/#15 회원도메인 구현
  • Loading branch information
mjj111 authored Feb 3, 2024
2 parents 3e2042a + f5afcb0 commit 3bc8894
Show file tree
Hide file tree
Showing 42 changed files with 1,478 additions and 45 deletions.
158 changes: 158 additions & 0 deletions src/docs/asciidoc/member.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,158 @@
= Spring REST Docs
:toc: left
:toclevels: 2
:sectlinks:

[[resources-post]]
== 회원

[[resources-post-create]]
=== 회원 가입

==== HTTP request
include::{snippets}/member-signup/http-request.adoc[]


==== HTTP response
include::{snippets}/member-signup/http-response.adoc[]

==== response-body 설명
include::{snippets}/member-signup/response-fields.adoc[]



=== 프로필 이미지 변경

==== HTTP request
include::{snippets}/member-change-profile-image/http-request.adoc[]

==== HTTP response
include::{snippets}/member-change-profile-image/http-response.adoc[]

==== response-body 설명
include::{snippets}/member-change-profile-image/response-fields.adoc[]


=== 임시 비밀번호 발급

==== HTTP request
include::{snippets}/member-temporary-password/http-request.adoc[]

==== request-body 설명
include::{snippets}/member-temporary-password/request-fields.adoc[]

==== HTTP response
include::{snippets}/member-temporary-password/http-response.adoc[]

==== response-body 설명
include::{snippets}/email-verification-send/response-fields.adoc[]


=== 비밀번호 변경

==== HTTP request

include::{snippets}/member-change-password/http-request.adoc[]

==== request-body 설명
include::{snippets}/member-change-password/request-fields.adoc[]

==== HTTP response

include::{snippets}/member-change-password/http-response.adoc[]

==== response-body 설명
include::{snippets}/member-change-password/response-fields.adoc[]




=== 회원 탈퇴

==== HTTP request

include::{snippets}/member-withdraw/http-request.adoc[]


==== HTTP response

include::{snippets}/member-withdraw/http-response.adoc[]

==== response-body 설명
include::{snippets}/member-withdraw/response-fields.adoc[]





=== 회원 상태

==== HTTP request

include::{snippets}/member-get-status/http-request.adoc[]


==== HTTP response

include::{snippets}/member-get-status/http-response.adoc[]

==== response-body 설명
include::{snippets}/member-get-status/response-fields.adoc[]




=== 개인 정보 조회

==== HTTP request

include::{snippets}/member-get-member-page/http-request.adoc[]


==== HTTP response

include::{snippets}/member-get-member-page/http-response.adoc[]

==== response-body 설명
include::{snippets}/member-get-member-page/response-fields.adoc[]




=== 자기소개 변경

==== HTTP request

include::{snippets}/member-change-about-me/http-request.adoc[]

==== request-body 설명
include::{snippets}/member-change-about-me/request-fields.adoc[]



==== HTTP response

include::{snippets}/member-change-about-me/http-response.adoc[]

==== response-body 설명
include::{snippets}/member-change-about-me/response-fields.adoc[]



=== MBTI 변경

==== HTTP request

include::{snippets}/member-change-mbti/http-request.adoc[]

==== request-body 설명
include::{snippets}/member-change-mbti/request-fields.adoc[]



==== HTTP response

include::{snippets}/member-change-mbti/http-response.adoc[]

==== response-body 설명
include::{snippets}/member-change-mbti/response-fields.adoc[]
73 changes: 66 additions & 7 deletions src/main/java/com/aliens/backend/auth/domain/Member.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
package com.aliens.backend.auth.domain;

import com.aliens.backend.auth.controller.dto.LoginMember;
import com.aliens.backend.member.controller.dto.MemberPage;
import com.aliens.backend.member.domain.Image;
import com.aliens.backend.member.domain.MemberInfo;
import com.aliens.backend.member.domain.MemberStatus;
import com.aliens.backend.member.controller.dto.EncodedSignUp;
import com.aliens.backend.uploader.S3File;
import jakarta.persistence.*;

import java.util.ArrayList;
Expand All @@ -14,37 +20,90 @@ public class Member {
@Column
private Long id;

@Column
private String name;

@Column
private String email;

@Column
private String password;

@Column
private MemberRole role;
private MemberRole role = MemberRole.MEMBER;

@Column
private MemberStatus status = MemberStatus.NOT_APPLIED_NOT_MATCHED;

@Column
private Boolean withdraw = false;

@OneToMany(mappedBy = "member", cascade = CascadeType.REMOVE)
@OneToMany(mappedBy = "member",
cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE})
private List<Token> tokens = new ArrayList<>();

@OneToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE})
@JoinColumn(name = "image_id")
private Image image;

@OneToOne(mappedBy = "member",
cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE})
private MemberInfo memberInfo;

protected Member() {
}

public Member(final String email, final String password, final MemberRole role) {
this.email = email;
public static Member of(final EncodedSignUp request, final Image image) {
Member member = new Member();
member.name = request.name();
member.email = request.email();
member.password = request.password();
member.image = image;
return member;
}

public void changePassword(final String password) {
this.password = password;
this.role = role;
}

public void putMemberInfo(final MemberInfo memberInfo) {
this.memberInfo = memberInfo;
}

public boolean isCorrectPassword(String password) {
return this.password.equals(password);
}

public void withdraw() {
withdraw = true;
}

public LoginMember getLoginMember() {
return new LoginMember(id,role);
return new LoginMember(id, role);
}

public MemberPage getMemberPage() {
return new MemberPage(name, image.getURL());
}

public boolean isWithdraw() {
return withdraw;
}

public String getStatus() {
return status.getMessage();
}

public String getProfileName() {
return image.getName();
}

public void changeProfileImage(final S3File newFile) {
image.change(newFile);
}

@Override
public String toString() {
return String.format("email: %s, password : %s, role : %s", this.email, this.password, this.role);
return String.format("email: %s, role : %s", this.email, this.role);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,5 @@
@Repository
public interface MemberRepository extends JpaRepository<Member,Long> {
Optional<Member> findByEmail(String email);
Optional<Member> findByEmailAndName(String email, String name);
}
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,11 @@ public AuthToken login(LoginRequest loginRequest) {
}

private Member getMemberEntityFromEmail(final String email) {
return memberRepository.findByEmail(email).orElseThrow(() -> new RestApiException(MemberError.NULL_MEMBER));
Member member = memberRepository.findByEmail(email).orElseThrow(() -> new RestApiException(MemberError.NULL_MEMBER));
if (member.isWithdraw()) {
throw new RestApiException(MemberError.WITHDRAW_MEMBER);
}
return member;
}

private void passwordCheck(final String password, final Member member) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import jakarta.persistence.*;

@Entity
@Table(schema = "EMAIL_AUTHENTICATION")
@Table(name = "EMAIL_AUTHENTICATION")
public class EmailAuthentication {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Expand Down
16 changes: 14 additions & 2 deletions src/main/java/com/aliens/backend/email/service/EmailContent.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@
@Component
public class EmailContent {

public String getTitle() {
public String getAuthenticationMailTitle() {
return "[FriendShip] Account Verification 회원가입 이메일 인증";
}

public String getContent(String token, String domainUrl) {
public String getAuthenticationMailContent(String token, String domainUrl) {
String englishContent = "Thank you for registering with FriendShip App.\n"
+ "To ensure the security of your account, we need to verify your email address.\n\n"
+ "Please click the link below to verify your email and activate your account:\n"
Expand Down Expand Up @@ -38,4 +38,16 @@ public String getContent(String token, String domainUrl) {

return englishContent + koreanContent;
}

public String getTemporaryMailTitle() {
return "[FriendShip] 임시 비밀번호 발급";
}

public String getTemporaryMailContent(final String tmpPassword) {
String englishContent = "The temporary password has been issued. Your temporary password is: " + tmpPassword;

String koreanContent = "임시 비밀번호가 발급되었습니다. 임시 비밀번호는 다음과 같습니다: " + tmpPassword;

return englishContent + "\n\n" + koreanContent;
}
}
20 changes: 18 additions & 2 deletions src/main/java/com/aliens/backend/email/service/EmailSender.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.aliens.backend.email.service;

import com.aliens.backend.global.property.EmailProperties;
import com.aliens.backend.member.controller.dto.event.TemporaryPasswordEvent;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Component;
Expand Down Expand Up @@ -28,10 +29,25 @@ public void sendAuthenticationEmail(final String email, final String emailToken)
private SimpleMailMessage createAuthenticationMail(final String email, final String emailToken) {
SimpleMailMessage authenticationEmail = new SimpleMailMessage();
authenticationEmail.setTo(email);
authenticationEmail.setSubject(emailContent.getTitle());
authenticationEmail.setSubject(emailContent.getAuthenticationMailTitle());

String content = emailContent.getContent(emailToken, emailProperties.getDomainUrl());
String content = emailContent.getAuthenticationMailContent(emailToken, emailProperties.getDomainUrl());
authenticationEmail.setText(content);
return authenticationEmail;
}

public void sendTemporaryPassword(final TemporaryPasswordEvent event) {
SimpleMailMessage mailMessage = createTemporaryPassword(event);
javaMailSender.send(mailMessage);
}

private SimpleMailMessage createTemporaryPassword(final TemporaryPasswordEvent event) {
SimpleMailMessage temporaryPasswordEmail = new SimpleMailMessage();
temporaryPasswordEmail.setTo(event.email());
temporaryPasswordEmail.setSubject(emailContent.getTemporaryMailTitle());

String content = emailContent.getTemporaryMailContent(event.tmpPassword());
temporaryPasswordEmail.setText(content);
return temporaryPasswordEmail;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
import com.aliens.backend.global.encode.SymmetricKeyEncoder;
import com.aliens.backend.global.error.EmailError;
import com.aliens.backend.global.exception.RestApiException;
import com.aliens.backend.member.controller.dto.event.TemporaryPasswordEvent;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

Expand Down Expand Up @@ -58,4 +60,9 @@ public String authenticateEmail(final String token) throws Exception {
private EmailAuthentication getEmailAuthentication(final Long emailEntityId) {
return emailAuthenticationRepository.findById(emailEntityId).orElseThrow(() -> new RestApiException(EmailError.NULL_EMAIL));
}

@EventListener
public void listen(TemporaryPasswordEvent event) {
emailSender.sendTemporaryPassword(event);
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.aliens.backend.uploader;
package com.aliens.backend.global.config;

import com.aliens.backend.global.property.S3UploadProperties;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.s3.AmazonS3Client;
Expand Down
Loading

0 comments on commit 3bc8894

Please sign in to comment.