Skip to content

Commit

Permalink
Feat : 회원가입 API 구현
Browse files Browse the repository at this point in the history
회원가입 API 구현, SQL문 실행 안됨

Related to: #5
  • Loading branch information
crayon committed Mar 13, 2022
1 parent 10caaed commit ddf2c96
Show file tree
Hide file tree
Showing 7 changed files with 123 additions and 3 deletions.
3 changes: 2 additions & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,10 @@ repositories {
dependencies {
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.2'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.2'
implementation('org.springframework.boot:spring-boot-starter-web')
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'mysql:mysql-connector-java'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'io.springfox:springfox-boot-starter:3.0.0'
implementation 'io.springfox:springfox-swagger-ui:3.0.0'
compileOnly 'org.projectlombok:lombok'
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package com.moodstation.springboot.dto;

import com.moodstation.springboot.entity.User;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;

@Getter
@NoArgsConstructor
public class UserCreateRequestDto {
BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();

private String email;
private String nickname;
private String password;

@Builder
public UserCreateRequestDto(String email, String nickname, String password) {
this.email = email;
this.nickname = nickname;
this.password = encoder.encode(password);
}

public User toEntity() {
return User.builder()
.email(email)
.nickname(nickname)
.password(password)
.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.moodstation.springboot.dto;

import com.moodstation.springboot.entity.User;
import lombok.Getter;

@Getter
public class UserCreateResponseDto {

private Long id;
private String email;
private String nickname;

public UserCreateResponseDto(User entity) {
this.id = entity.getId();
this.email = entity.getEmail();
this.nickname = entity.getNickname();
}
}
21 changes: 19 additions & 2 deletions src/main/java/com/moodstation/springboot/entity/User.java
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
package com.moodstation.springboot.entity;

import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.springframework.format.annotation.DateTimeFormat;

import javax.persistence.*;
import java.time.LocalDateTime;

@Getter
@NoArgsConstructor
Expand All @@ -23,6 +26,20 @@ public class User {
@Column(nullable = false)
private String password;

@Column(nullable = false)
private String accesstoken;
@Column(name = "created_at")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private LocalDateTime createdAt;

@Column(name = "updated_at")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private LocalDateTime updatedAt;

@Builder
public User(String email, String nickname, String password) {
this.email = email;
this.nickname = nickname;
this.password = password;
this.createdAt = LocalDateTime.now();
this.updatedAt = LocalDateTime.now();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,13 @@
import com.moodstation.springboot.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.Optional;

public interface UserRepository extends JpaRepository<User, Long> {

// 이메일 중복 방지
Optional<User> findByEmail(String email);

// 닉네임 중복 방지
Optional<User> findByNickname(String nickname);
}
21 changes: 21 additions & 0 deletions src/main/java/com/moodstation/springboot/service/UserService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.moodstation.springboot.service;

import com.moodstation.springboot.dto.UserCreateRequestDto;
import com.moodstation.springboot.repository.UserRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import javax.transaction.Transactional;

@RequiredArgsConstructor
@Service
public class UserService {

private final UserRepository userRepository;

// 회원가입
@Transactional
public Long save(UserCreateRequestDto requestDto) {
return userRepository.save(requestDto.toEntity()).getId();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.moodstation.springboot.web;

import com.moodstation.springboot.dto.UserCreateRequestDto;
import com.moodstation.springboot.dto.UserCreateResponseDto;
import com.moodstation.springboot.entity.User;
import com.moodstation.springboot.service.UserService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

@RequiredArgsConstructor
@RestController
public class UserApiController {

private final UserService userService;

@PostMapping("/api/v1/signup")
public Long signup(@RequestBody UserCreateRequestDto requestDto) {
return userService.save(requestDto);
}

}

0 comments on commit ddf2c96

Please sign in to comment.