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
11 changes: 0 additions & 11 deletions src/main/java/app/db/UserRepository.java

This file was deleted.

54 changes: 7 additions & 47 deletions src/main/java/app/handler/RegisterWithPost.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
package app.handler;

import app.db.UserRepository;
import app.db.Database;
import app.model.User;
import config.VariableConfig;
import exception.ErrorCode;
import exception.ServiceException;
import http.HttpMethod;
Expand All @@ -15,58 +14,19 @@
import web.response.RedirectResponse;

public class RegisterWithPost extends SingleArgHandler<QueryParameters> {
private static final String EMAIL = "email";
private static final String NICKNAME = "nickname";
private static final String PASSWORD = "password";

private static final Logger log = LoggerFactory.getLogger(RegisterWithPost.class);

private final UserRepository userRepository;

public RegisterWithPost(UserRepository userRepository) {
public RegisterWithPost() {
super(HttpMethod.POST, "/user/create");
this.userRepository = userRepository;
}

@Override
public HandlerResponse handle(QueryParameters params) {
String email = getRequired(params, EMAIL);
String nickname = getRequired(params, NICKNAME);
String password = getRequired(params, PASSWORD);

validate(email, nickname, password);

User saved = userRepository.save(
new User(password, nickname, email, UserRole.MEMBER.toString()));

log.info("Registered id:{}, email:{}, nickname:{}, password:{}",
saved.getId(), email, nickname, password);
String email = params.getQueryValue("email").orElseThrow(()-> new ServiceException(ErrorCode.MISSING_REGISTER_TOKEN, "email required"));
String nickname = params.getQueryValue("nickname").orElseThrow(()-> new ServiceException(ErrorCode.MISSING_REGISTER_TOKEN, "nickname required"));
String password = params.getQueryValue("password").orElseThrow(()-> new ServiceException(ErrorCode.MISSING_REGISTER_TOKEN, "password required"));
Database.addUser(new User(password, nickname, email, UserRole.MEMBER.toString()));
log.info("Registered - password:{}, nickname:{}, email:{}", password, nickname, email);
return RedirectResponse.to("/login");
}

private void validate(String email, String nickname, String password) {
validateDuplicate(email, nickname);
validateLength(email, VariableConfig.EMAIL_MIN, VariableConfig.EMAIL_MAX, ErrorCode.EMAIL_LENGTH_INVALID);
validateLength(nickname, VariableConfig.NICKNAME_MIN, VariableConfig.NICKNAME_MAX, ErrorCode.NICKNAME_LENGTH_INVALID);
validateLength(password, VariableConfig.PASSWORD_MIN, VariableConfig.PASSWORD_MAX, ErrorCode.PASSWORD_LENGTH_INVALID);
}

private String getRequired(QueryParameters params, String key) {
return params.getQueryValue(key)
.orElseThrow(() -> new ServiceException(ErrorCode.MISSING_REGISTER_TOKEN, key + " required"));
}

private void validateLength(String value, int min, int max, ErrorCode code) {
int len = value.length();
if (len < min || len > max)
throw new ServiceException(code);
}

private void validateDuplicate(String email, String nickname) {
if (!userRepository.findByColumn(EMAIL, email).isEmpty())
throw new ServiceException(ErrorCode.EMAIL_ALREADY_EXISTS);

if (!userRepository.findByColumn(NICKNAME, nickname).isEmpty())
throw new ServiceException(ErrorCode.NICKNAME_ALREADY_EXISTS);
}
}
3 changes: 0 additions & 3 deletions src/main/java/app/model/User.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,6 @@ public User(String password, String nickname, String email, String userRole) {
this.userRole = userRole;
}

public User() {
}

public Long getId() {
return id;
}
Expand Down
23 changes: 10 additions & 13 deletions src/main/java/config/AppConfig.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package config;

import app.db.UserRepository;
import app.handler.*;
import database.ConnectionManager;
import database.H2DbManager;
Expand Down Expand Up @@ -121,7 +120,8 @@ public RegisterWithGet registerWithGet() {
public RegisterWithPost registerWithPost() {
return getOrCreate(
"registerWithPost",
() -> new RegisterWithPost(userRepository()));
RegisterWithPost::new
);
}

public LoginWithPost loginWithPost() {
Expand Down Expand Up @@ -233,9 +233,8 @@ public QueryParamsResolver queryParamsResolver() {
}

public MultipartFormResolver multipartFormResolver(){
return getOrCreate("multipartFormResolver",
() -> new MultipartFormResolver(multipartFormParser()));

return getOrCreate("multipartFormResolver", () ->
new MultipartFormResolver(multipartFormParser()));
}

public MultipartFormParser multipartFormParser(){
Expand All @@ -251,7 +250,10 @@ public ExceptionHandlerMapping exceptionHandlerMapping() {
List.of(
serviceExceptionHandler(),
errorExceptionHandler(),
unhandledErrorHandler())));
unhandledErrorHandler()
)
)
);
}

public ServiceExceptionHandler serviceExceptionHandler() {
Expand Down Expand Up @@ -323,13 +325,8 @@ public H2DbManager h2DbManager(){
}

public DdlGenerator ddlGenerator(){
return getOrCreate(DdlGenerator.class.getSimpleName(),
() -> new DdlGenerator(connectionManager()));
}

public UserRepository userRepository(){
return getOrCreate(UserRepository.class.getSimpleName(),
()-> new UserRepository(connectionManager()));
return getOrCreate(DdlGenerator.class.getSimpleName(), () ->
new DdlGenerator(connectionManager()));
}
}

7 changes: 1 addition & 6 deletions src/main/java/config/DdlGenerator.java
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ private String buildDdlForEntity(Class<?> entityClass, String tableName) {
continue;
}

String columnName = toColumnName(field.getName());
String columnName = field.getName();
Class<?> fieldType = field.getType();

if (!firstColumn) {
Expand Down Expand Up @@ -108,9 +108,4 @@ private String toTableName(Class<?> clazz) {
}
return name;
}

private String toColumnName(String str){
String snake = str.replaceAll("(?<!^)([A-Z])", "_$1");
return snake.toLowerCase();
}
}
7 changes: 0 additions & 7 deletions src/main/java/config/VariableConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,4 @@ public class VariableConfig {

public static final long IDLE_MS = 30*60*100;
public static final long ABSOLUTE_MS = 180*60*100;

public static final int EMAIL_MAX = 50;
public static final int EMAIL_MIN = 4;
public static final int NICKNAME_MAX = 12;
public static final int NICKNAME_MIN = 4;
public static final int PASSWORD_MAX = 16;
public static final int PASSWORD_MIN = 4;
}
19 changes: 7 additions & 12 deletions src/main/java/database/CrudRepository.java
Original file line number Diff line number Diff line change
Expand Up @@ -43,10 +43,10 @@ public T save(T entity) {
if (Modifier.isStatic(field.getModifiers())) {
continue;
}
if ("id".equals(toColumnName(field.getName()))) {
if ("id".equals(field.getName())) {
continue;
}
sqlBuilder.append(toColumnName(field.getName())).append(", ");
sqlBuilder.append(field.getName()).append(", ");
placeholder.append("?, ");
insertFields.add(field);
}
Expand Down Expand Up @@ -128,7 +128,7 @@ public List<T> findAll() {
}

public List<T> findByColumn(String columnName, Object value) {
String sql = "SELECT * FROM " + tableName + " WHERE " + toColumnName(columnName) + " = ?";
String sql = "SELECT * FROM " + tableName + " WHERE " + columnName + " = ?";

try (Connection conn = connectionManager.getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql)) {
Expand All @@ -145,7 +145,7 @@ public List<T> findByColumn(String columnName, Object value) {
}

} catch (SQLException e) {
throw new ErrorException("엔티티 조회 중 오류 (column=" + toColumnName(columnName) + ", value=" + value + ")", e);
throw new ErrorException("엔티티 조회 중 오류 (column=" + columnName + ", value=" + value + ")", e);
}
}

Expand All @@ -167,10 +167,10 @@ public void update(T entity) {
if (Modifier.isStatic(field.getModifiers())) {
continue;
}
if ("id".equals(toColumnName(field.getName()))) {
if ("id".equals(field.getName())) {
continue;
}
sql.append(toColumnName(field.getName())).append(" = ?, ");
sql.append(field.getName()).append(" = ?, ");
updateFields.add(field);
}

Expand Down Expand Up @@ -264,7 +264,7 @@ private T mapRow(ResultSet resultSet) {
continue;
}

String columnName = toColumnName(field.getName());
String columnName = field.getName();
field.setAccessible(true);

Class<?> fieldType = field.getType();
Expand Down Expand Up @@ -311,9 +311,4 @@ private String toTableName(Class<?> clazz) {
}
return name;
}

private String toColumnName(String str){
String snake = str.replaceAll("(?<!^)([A-Z])", "_$1");
return snake.toLowerCase();
}
}
7 changes: 0 additions & 7 deletions src/main/java/exception/ErrorCode.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,6 @@ public enum ErrorCode {
HttpStatus.BAD_REQUEST, "400_MISSING_REGISTER_TOKEN", "회원가입에 필요한 토큰이 누락되었습니다."),
LOGIN_FAILED(
HttpStatus.BAD_REQUEST, "400_LOGIN_FAILED", "아이디 혹은 비밀번호가 잘못되었습니다."),
EMAIL_LENGTH_INVALID(HttpStatus.BAD_REQUEST, "400_EMAIL_LENGTH_INVALID", "이메일은 4 ~ 50글자 사이여야합니다."),
NICKNAME_LENGTH_INVALID(HttpStatus.BAD_REQUEST, "400_NICKNAME_LENGTH_INVALID", "닉네임은 4 ~ 12글자 사이여야합니다."),
PASSWORD_LENGTH_INVALID(HttpStatus.BAD_REQUEST, "400_PASSWORD_LENGTH_INVALID", "비밀번호는 4 ~ 16글자 사이여야합니다."),


EMAIL_ALREADY_EXISTS(HttpStatus.CONFLICT, "409_EMAIL_ALREADY_EXISTS", "이미 가입된 Email입니다."),
NICKNAME_ALREADY_EXISTS(HttpStatus.CONFLICT, "409_NICKNAME_ALREADY_EXISTS", "이미 사용중인 닉네임입니다."),

/* Internal Error */
INTERNAL_ERROR(HttpStatus.INTERNAL_SERVER_ERROR, "500_INTERNAL", "서버 내부 오류가 발생했습니다."),
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/exception/handler/ErrorExceptionHandler.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,11 @@ public boolean support(Throwable e) {
@Override
public void handle(Throwable t, Socket connection) {
ErrorException error = (ErrorException) t;
logger.debug("{} - {}", error.getMessage(), error.getThrowable().toString());
logger.debug(error.getThrowable().toString());
ErrorCode errorCode = error.getErrorCode();
HttpStatus status = errorCode.getStatus();

String body = toJson(errorCode.getCode(), errorCode.getMessage());
String body = toJson(errorCode.getCode(), error.getMessage());
byte[] bodyBytes = body.getBytes(StandardCharsets.UTF_8);

StringBuilder sb = new StringBuilder();
Expand Down