Skip to content
Open
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
74 changes: 74 additions & 0 deletions gon/week5/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
plugins {
id 'java'
id 'org.springframework.boot' version '4.0.5'
id 'io.spring.dependency-management' version '1.1.7'
}

group = 'com.example'
version = '0.0.1-SNAPSHOT'
description = 'umc10th'

java {
toolchain {
languageVersion = JavaLanguageVersion.of(21)
}
}

repositories {
mavenCentral()
}

dependencies {
//===============
//Main
//===============

//Spring Boot Starters
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-webmvc'

//Database
runtimeOnly 'com.mysql:mysql-connector-j'

//Lombok
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'

// API Documentation (Swagger)
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:3.0.1'
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-api:3.0.1'

//Security
implementation 'org.springframework.boot:spring-boot-starter-security'
testImplementation 'org.springframework.security:spring-security-test'

// Jwt
implementation 'io.jsonwebtoken:jjwt-api:0.12.3'
implementation 'io.jsonwebtoken:jjwt-impl:0.12.3'
implementation 'io.jsonwebtoken:jjwt-jackson:0.12.3'
implementation 'org.springframework.boot:spring-boot-configuration-processor'

// OAuth
implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'

//==============
//Test
//==============

//Spring Boot Test
testImplementation 'org.springframework.boot:spring-boot-starter-data-jpa-test'
testImplementation 'org.springframework.boot:spring-boot-starter-webmvc-test'

//Lombok for Test
testCompileOnly 'org.projectlombok:lombok'
testAnnotationProcessor 'org.projectlombok:lombok'

//Test Runtime
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'


}

tasks.named('test') {
useJUnitPlatform()
}
Binary file added gon/week5/gradle/wrapper/gradle-wrapper.jar
Binary file not shown.
7 changes: 7 additions & 0 deletions gon/week5/gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-9.4.1-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
93 changes: 93 additions & 0 deletions gon/week5/gradlew.bat

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions gon/week5/settings.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
rootProject.name = 'umc10th'
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.example.umc10th;

import jakarta.persistence.EntityListeners;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;

@SpringBootApplication
@EnableJpaAuditing
public class Umc10thApplication {

public static void main(String[] args) {
SpringApplication.run(Umc10thApplication.class, args);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package com.example.umc10th.domain.auth.controller;

import com.example.umc10th.domain.auth.dto.AuthReqDto;
import com.example.umc10th.domain.auth.dto.AuthResDto;
import com.example.umc10th.domain.auth.service.AuthService;
import com.example.umc10th.domain.user.exception.code.UserSuccessCode;
import com.example.umc10th.global.apiPayload.ApiResponse;
import com.example.umc10th.global.apiPayload.code.BaseSuccessCode;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequiredArgsConstructor
@RequestMapping("/v1/auth")
public class AuthController {

private final AuthService authService;

@PostMapping("/signup")
public ApiResponse<AuthResDto.SignupResult> singup(
@RequestBody @Valid AuthReqDto.Signup signup
){
AuthResDto.SignupResult signupResult = authService.signup(signup);
BaseSuccessCode code = UserSuccessCode.OK;
return ApiResponse.onSuccess(code, signupResult);
}

@PostMapping("/login")
public ApiResponse<AuthResDto.LoginResult> login(
@RequestBody @Valid AuthReqDto.LoginResult result
){
AuthResDto.LoginResult loginResult = authService.login(result);
BaseSuccessCode code = UserSuccessCode.OK;
return ApiResponse.onSuccess(code,loginResult);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
package com.example.umc10th.domain.auth.converter;

import com.example.umc10th.domain.auth.dto.AuthReqDto;
import com.example.umc10th.domain.auth.dto.AuthResDto;
import com.example.umc10th.domain.user.entity.Food;
import com.example.umc10th.domain.user.entity.Term;
import com.example.umc10th.domain.user.entity.User;
import com.example.umc10th.domain.user.entity.mapping.UserFood;
import com.example.umc10th.domain.user.entity.mapping.UserTerm;
import com.example.umc10th.domain.user.enums.SocialType;


import java.util.List;

public class AuthConveter {

public static User toUser(AuthReqDto.Signup signup, String encodedPassword){
return User.builder()
.email(signup.email())
.password(encodedPassword)
.name(signup.name())
.gender(signup.gender())
.birth(signup.birth())
.address(signup.address())
.point(signup.point())
.detailAddress(signup.detailAddress())
.phoneNumber(signup.phoneNumber())
.nickname(signup.nickName())
.socialType(SocialType.LOCAL)
.build();
}

public static AuthResDto.SignupResult toSignup(User user){
return new AuthResDto.SignupResult(
user.getId(),
user.getEmail(),
user.getName()
);
}

public static List<UserTerm> toUserTerms(User user,List<Term> terms){
return terms.stream()
.map(term -> UserTerm.builder()
.user(user)
.term(term)
.termName(term.getTermName())
.agreed(true)
.build())
.toList();
}

public static List<UserFood> toUserFoods(User user,List<Food> foods){
return foods.stream()
.map(food -> UserFood.builder()
.user(user)
.food(food)
.build())
.toList();
}

public static AuthResDto.LoginResult toLogin(Long userId,String accessToken,String refreshToken){
return new AuthResDto.LoginResult(userId, accessToken,refreshToken);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
package com.example.umc10th.domain.auth.dto;

import com.example.umc10th.domain.user.enums.Gender;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;

import java.time.LocalDate;
import java.util.List;

public class AuthReqDto {

public record Signup(

@NotBlank(message="이메일은 ν•„μˆ˜μž…λ‹ˆλ‹€.")
@Email(message = "이메일 ν˜•μ‹μ΄ μ˜¬λ°”λ₯΄μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.")
String email,

@NotBlank(message = "λΉ„λ°€λ²ˆν˜ΈλŠ” ν•„μˆ˜μž…λ‹ˆλ‹€.")
@Size(min =8,max=20,message="λΉ„λ°€λ²ˆν˜ΈλŠ” 8자 이상 20자 μ΄ν•˜λ‘œ μž…λ ₯ν•΄μ•Ό ν•©λ‹ˆλ‹€")
String password,

@NotBlank(message="이름은 ν•„μˆ˜μž…λ‹ˆλ‹€.")
String name,

@NotNull(message="성별은 ν•„μˆ˜μž…λ‹ˆλ‹€.")
Gender gender,

@NotNull(message ="생년월일은 ν•„μˆ˜μž…λ‹ˆλ‹€.")
LocalDate birth,

@NotBlank(message = "μ£Όμ†ŒλŠ” ν•„μˆ˜μž…λ‹ˆλ‹€.")
String address,

@NotBlank(message = "μƒμ„Έμ£Όμ†ŒλŠ” ν•„μˆ˜μž…λ‹ˆλ‹€.")
String detailAddress,

@NotBlank(message = "μ „ν™”λ²ˆν˜ΈλŠ” ν•„μˆ˜μž…λ‹ˆλ‹€.")
String phoneNumber,

@NotBlank(message = "λ‹‰λ„€μž„μ€ ν•„μˆ˜μž…λ‹ˆλ‹€.")
@Size(min=1,max=10,message="λ‹‰λ„€μž„μ€ 1자 이상 10자 μ΄ν•˜λ‘œ μž…λ ₯ν•΄μ•Ό ν•©λ‹ˆλ‹€.")
String nickName,

int point,

List<Long> termIds,
List<Long> foodIds
){}

public record LoginResult(
@Email(message="이메일 ν˜•μ‹μ„ λ‹€μ‹œ ν™•μΈν•΄μ£Όμ„Έμš”")
@NotBlank(message="이메일 μž…λ ₯을 ν•΄μ£Όμ„Έμš”")
String Email,

@NotBlank(message="λΉ„λ°€λ²ˆν˜Έ μž…λ ₯을 ν•΄μ£Όμ„Έμš”")
String password
){}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.example.umc10th.domain.auth.dto;


public class AuthResDto {

public record SignupResult(
Long userId,
String email,
String name
){}


public record LoginResult(
Long userId,
String accessToken,
String refreshToken
){}

}
Loading