Skip to content
Closed
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
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.ftm.server.adapter.in.web.user.dto.response;

import com.ftm.server.application.vo.user.EmailCodeVerificationVo;
import lombok.Data;

@Data
public class EmailCodeVerificationResponse {
private final Boolean isVerified;

public static EmailCodeVerificationResponse from(EmailCodeVerificationVo vo) {
return new EmailCodeVerificationResponse(vo.getIsVerified());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.ftm.server.adapter.in.web.user.dto.response;

import com.ftm.server.application.vo.user.EmailCodeVerificationVo;
import lombok.Data;

@Data
public class EmailCodeVerificationResponse {
private final Boolean isVerified;
private final Boolean isRecoverable;

public static EmailCodeVerificationResponse from(EmailCodeVerificationVo vo) {
return new EmailCodeVerificationResponse(vo.getIsVerified(), vo.getIsRecoverable());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.ftm.server.adapter.in.web.user.dto.response;

import com.ftm.server.application.vo.user.EmailCodeVerificationVo;
import lombok.Data;

@Data
public class EmailCodeVerificationResponse {
private final Boolean isVerified;
private final Boolean isRecoverable;

public static EmailCodeVerificationResponse from(EmailCodeVerificationVo vo) {
return new EmailCodeVerificationResponse(vo.getIsVerified(), vo.getIsRecoverable());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@

Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.ftm.server.application.command.user;

import lombok.Data;

@Data
public class DeleteByEmailCommand {
private final String email;

public static DeleteByEmailCommand of(String email) {
return new DeleteByEmailCommand(email);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package com.ftm.server.application.service.user;

import com.ftm.server.application.port.in.user.EmailCodeVerificationUseCase;
import com.ftm.server.application.port.out.persistence.user.LoadEmailVerificationLogPort;
import com.ftm.server.application.port.out.persistence.user.UpdateEmailVerificationLogPort;
import com.ftm.server.application.query.EmailCodeVerificationQuery;
import com.ftm.server.application.vo.user.EmailCodeVerificationVo;
import com.ftm.server.domain.entity.EmailVerificationLogs;
import jakarta.transaction.Transactional;
import java.util.Optional;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

@Service
@RequiredArgsConstructor
public class EmailCodeVerificationService implements EmailCodeVerificationUseCase {

private final LoadEmailVerificationLogPort loadEmailVerificationLogPort;
private final UpdateEmailVerificationLogPort updateEmailVerificationLogPort;

@Override
@Transactional
public EmailCodeVerificationVo execute(EmailCodeVerificationQuery query) {

Optional<EmailVerificationLogs> emailVerificationLogs =
loadEmailVerificationLogPort.loadEmailVerificationLogByEmailAndCode(query);

if (emailVerificationLogs.isEmpty()) { // 검증 코드가 일치하지 않음
return EmailCodeVerificationVo.of(false);
}
emailVerificationLogs.get().updateVerificationStatus(true); // 검증 코드가 일치함
updateEmailVerificationLogPort.updateEmailVerificationLog(emailVerificationLogs.get());
return EmailCodeVerificationVo.of(true);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package com.ftm.server.application.service.user;

import com.ftm.server.application.port.in.user.EmailCodeVerificationUseCase;
import com.ftm.server.application.port.out.persistence.user.CheckUserPort;
import com.ftm.server.application.port.out.persistence.user.LoadEmailVerificationLogPort;
import com.ftm.server.application.port.out.persistence.user.UpdateEmailVerificationLogPort;
import com.ftm.server.application.query.EmailCodeVerificationQuery;
import com.ftm.server.application.query.FindByEmailQuery;
import com.ftm.server.application.vo.user.EmailCodeVerificationVo;
import com.ftm.server.domain.entity.EmailVerificationLogs;
import jakarta.transaction.Transactional;
import java.util.Optional;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

@Service
@RequiredArgsConstructor
public class EmailCodeVerificationService implements EmailCodeVerificationUseCase {

private final LoadEmailVerificationLogPort loadEmailVerificationLogPort;
private final UpdateEmailVerificationLogPort updateEmailVerificationLogPort;
private final CheckUserPort checkUserPort;

@Override
@Transactional
public EmailCodeVerificationVo execute(EmailCodeVerificationQuery query) {

Optional<EmailVerificationLogs> emailVerificationLogs =
loadEmailVerificationLogPort.loadEmailVerificationLogByEmailAndCode(query);

if (emailVerificationLogs.isEmpty()) { // 검증 코드가 일치하지 않음
return EmailCodeVerificationVo.of(false);
}

emailVerificationLogs.get().updateVerificationStatus(true); // 검증 코드가 일치함
updateEmailVerificationLogPort.updateEmailVerificationLog(emailVerificationLogs.get());

// 해당 이메일의 계정 상태 확인 (soft delete 여부)
Boolean isRecoverable = !checkUserPort.checksNotDeletedUserByEmail(FindByEmailQuery.of(query.getEmail()));

return EmailCodeVerificationVo.of(true, isRecoverable);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package com.ftm.server.application.service.user;

import com.ftm.server.application.port.in.user.EmailCodeVerificationUseCase;
import com.ftm.server.application.port.out.persistence.user.LoadEmailVerificationLogPort;
import com.ftm.server.application.port.out.persistence.user.UpdateEmailVerificationLogPort;
import com.ftm.server.application.query.EmailCodeVerificationQuery;
import com.ftm.server.application.vo.user.EmailCodeVerificationVo;
import com.ftm.server.domain.entity.EmailVerificationLogs;
import jakarta.transaction.Transactional;
import java.util.Optional;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

@Service
@RequiredArgsConstructor
public class EmailCodeVerificationService implements EmailCodeVerificationUseCase {

private final LoadEmailVerificationLogPort loadEmailVerificationLogPort;
private final UpdateEmailVerificationLogPort updateEmailVerificationLogPort;
private final CheckUserPort checkUserPort;

@Override
@Transactional
public EmailCodeVerificationVo execute(EmailCodeVerificationQuery query) {

Optional<EmailVerificationLogs> emailVerificationLogs =
loadEmailVerificationLogPort.loadEmailVerificationLogByEmailAndCode(query);

if (emailVerificationLogs.isEmpty()) { // 검증 코드가 일치하지 않음
return EmailCodeVerificationVo.of(false);
}

emailVerificationLogs.get().updateVerificationStatus(true); // 검증 코드가 일치함
updateEmailVerificationLogPort.updateEmailVerificationLog(emailVerificationLogs.get());

// 해당 이메일의 계정 상태 확인 (soft delete 여부)
Boolean isRecoverable = checkUserPort.checksUserSoftDeletedByEmail(FindByEmailQuery.of(query.getEmail()));

return EmailCodeVerificationVo.of(true, isRecoverable);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package com.ftm.server.application.service.user;

import com.ftm.server.application.port.in.user.EmailCodeVerificationUseCase;
import com.ftm.server.application.port.out.persistence.user.CheckUserPort;
import com.ftm.server.application.port.out.persistence.user.LoadEmailVerificationLogPort;
import com.ftm.server.application.port.out.persistence.user.UpdateEmailVerificationLogPort;
import com.ftm.server.application.query.EmailCodeVerificationQuery;
import com.ftm.server.application.query.FindByEmailQuery;
import com.ftm.server.application.vo.user.EmailCodeVerificationVo;
import com.ftm.server.domain.entity.EmailVerificationLogs;
import jakarta.transaction.Transactional;
import java.util.Optional;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

@Service
@RequiredArgsConstructor
public class EmailCodeVerificationService implements EmailCodeVerificationUseCase {

private final LoadEmailVerificationLogPort loadEmailVerificationLogPort;
private final UpdateEmailVerificationLogPort updateEmailVerificationLogPort;
private final CheckUserPort checkUserPort;

@Override
@Transactional
public EmailCodeVerificationVo execute(EmailCodeVerificationQuery query) {

Optional<EmailVerificationLogs> emailVerificationLogs =
loadEmailVerificationLogPort.loadEmailVerificationLogByEmailAndCode(query);

if (emailVerificationLogs.isEmpty()) { // 검증 코드가 일치하지 않음
return EmailCodeVerificationVo.of(false);
}

emailVerificationLogs.get().updateVerificationStatus(true); // 검증 코드가 일치함
updateEmailVerificationLogPort.updateEmailVerificationLog(emailVerificationLogs.get());

// 해당 이메일의 계정 상태 확인 (soft delete 여부)
Boolean isRecoverable = checkUserPort.checksUserSoftDeletedByEmail(FindByEmailQuery.of(query.getEmail()));

return EmailCodeVerificationVo.of(true, isRecoverable);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.ftm.server.application.service.user;

import com.ftm.server.application.port.in.user.EmailDuplicationCheckUseCase;
import com.ftm.server.application.port.out.persistence.user.CheckUserPort;
import com.ftm.server.application.query.FindByEmailQuery;
import com.ftm.server.application.vo.user.EmailDuplicationVo;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

@Service
@RequiredArgsConstructor
public class EmailDuplicationCheckService implements EmailDuplicationCheckUseCase {

private final CheckUserPort checkUserPort;

@Override
public EmailDuplicationVo execute(FindByEmailQuery query) {
return EmailDuplicationVo.of(checkUserPort.checksUserByEmail(query));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.ftm.server.application.service.user;

import com.ftm.server.application.port.in.user.EmailDuplicationCheckUseCase;
import com.ftm.server.application.port.out.persistence.user.CheckUserPort;
import com.ftm.server.application.query.FindByEmailQuery;
import com.ftm.server.application.vo.user.EmailDuplicationVo;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

@Service
@RequiredArgsConstructor
public class EmailDuplicationCheckService implements EmailDuplicationCheckUseCase {

private final CheckUserPort checkUserPort;

@Override
public EmailDuplicationVo execute(FindByEmailQuery query) {
return EmailDuplicationVo.of(checkUserPort.checksNotDeletedUserByEmail(query));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
package com.ftm.server.application.service.user;

import com.ftm.server.adapter.in.web.user.dto.response.GeneralUserSignupResponse;
import com.ftm.server.application.command.user.GeneralUserCreationCommand;
import com.ftm.server.application.command.user.GeneralUserSignupCommand;
import com.ftm.server.application.port.in.user.GeneralUserSignupUseCase;
import com.ftm.server.application.port.out.persistence.user.CheckUserPort;
import com.ftm.server.application.port.out.persistence.user.LoadEmailVerificationLogPort;
import com.ftm.server.application.port.out.persistence.user.SaveUserImagePort;
import com.ftm.server.application.port.out.persistence.user.SaveUserPort;
import com.ftm.server.application.port.out.security.SecurityAuthenticationPort;
import com.ftm.server.application.query.FindByEmailQuery;
import com.ftm.server.common.exception.CustomException;
import com.ftm.server.common.response.enums.ErrorResponseCode;
import com.ftm.server.common.utils.RandomNickNameCreator;
import com.ftm.server.domain.entity.EmailVerificationLogs;
import com.ftm.server.domain.entity.User;
import com.ftm.server.domain.entity.UserImage;
import jakarta.transaction.Transactional;
import java.util.Optional;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

@Service
@RequiredArgsConstructor
public class GeneralUserSignupService implements GeneralUserSignupUseCase {

// service
private final LoadEmailVerificationLogPort loadEmailVerificationLogPort;
private final CheckUserPort checksUserPort;
private final SaveUserPort saveUserPort;
private final SaveUserImagePort saveUserImagePort;

// gateway
private final SecurityAuthenticationPort authenticationPort;

@Transactional
@Override
public GeneralUserSignupResponse execute(GeneralUserSignupCommand command) {
String email = command.getEmail();
Optional<EmailVerificationLogs> emailVerificationLogs =
loadEmailVerificationLogPort.loadEmailVerificationLogByEmail(
FindByEmailQuery.of(email));

if (checksUserPort.checksUserByEmail(FindByEmailQuery.of(email))) { // 기존에 가입된 회원인지 검사
throw new CustomException(ErrorResponseCode.USER_ALREADY_EXISTS);
}

if (emailVerificationLogs.isEmpty()) { // 이메일 인증이 완료되지 않음.
throw new CustomException(ErrorResponseCode.EMAIL_NOT_VERIFIED);
}

String nickname = RandomNickNameCreator.generateNickname(); // random 닉네임 생성

GeneralUserCreationCommand convertedCommand =
GeneralUserCreationCommand.of(
command.getEmail(),
authenticationPort.passwordEncode(command.getPassword()),
nickname,
command.getAge(),
command.getHashtags());

User user = saveUserPort.saveUser(User.createGeneralUser(convertedCommand));
saveUserImagePort.saveUserDefaultImage(UserImage.createUserImage(user.getId()));
return GeneralUserSignupResponse.of(user.getId());
}
}
Loading
Loading