Skip to content

Commit 1e42b3c

Browse files
author
kilian
committed
feature : #1 User 회원가입 구현
1 parent 4b215ee commit 1e42b3c

9 files changed

Lines changed: 85 additions & 24 deletions

File tree

apps/commerce-api/build.gradle.kts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,12 @@ dependencies {
99
//service
1010
implementation(project(":core:service:user-service"))
1111

12+
//domain
13+
implementation(project(":core:domain"))
14+
1215
// web
1316
implementation("org.springframework.boot:spring-boot-starter-web")
17+
implementation("org.springframework.boot:spring-boot-starter-validation")
1418
implementation("org.springframework.boot:spring-boot-starter-actuator")
1519
implementation("org.springdoc:springdoc-openapi-starter-webmvc-ui:${project.properties["springDocOpenApiVersion"]}")
1620

apps/commerce-api/src/main/java/com/loopers/application/api/user/UserV1ApiSpec.java

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,26 @@
22

33
import com.loopers.application.api.common.dto.ApiResponse;
44
import io.swagger.v3.oas.annotations.Operation;
5-
import io.swagger.v3.oas.annotations.media.Schema;
65
import io.swagger.v3.oas.annotations.tags.Tag;
76

7+
import static com.loopers.application.api.user.UserV1Dto.JoinUserRequest;
8+
import static com.loopers.application.api.user.UserV1Dto.JoinUserResponse;
9+
810
@Tag(name = "User V1 API", description = "User API 입니다.")
911
public interface UserV1ApiSpec {
1012

13+
// @Operation(
14+
// summary = "사용자 조회",
15+
// description = "ID로 사용자를 조회합니다."
16+
// )
17+
// ApiResponse<UserV1Dto.GetUserResponse> getUser(
18+
// @Schema(name = "사용자 ID", description = "조회할 사용자 ID")
19+
// Long userId
20+
// );
21+
1122
@Operation(
12-
summary = "사용자 조회",
13-
description = "ID로 사용자를 조회합니다."
23+
summary = "사용자 회원가입",
24+
description = "사용자가 회원가입합니다."
1425
)
15-
ApiResponse<UserV1Dto.GetUserResponse> getUser(
16-
@Schema(name = "사용자 ID", description = "조회할 사용자 ID")
17-
Long userId
18-
);
26+
ApiResponse<JoinUserResponse> joinUser(JoinUserRequest request);
1927
}
Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,31 @@
11
package com.loopers.application.api.user;
22

33
import com.loopers.application.api.common.dto.ApiResponse;
4+
import com.loopers.core.domain.user.User;
5+
import com.loopers.core.service.user.JoinUserService;
46
import lombok.RequiredArgsConstructor;
5-
import org.springframework.web.bind.annotation.GetMapping;
6-
import org.springframework.web.bind.annotation.PathVariable;
7+
import org.springframework.web.bind.annotation.PostMapping;
8+
import org.springframework.web.bind.annotation.RequestBody;
79
import org.springframework.web.bind.annotation.RequestMapping;
810
import org.springframework.web.bind.annotation.RestController;
911

10-
@RequiredArgsConstructor
12+
import static com.loopers.application.api.user.UserV1Dto.JoinUserRequest;
13+
import static com.loopers.application.api.user.UserV1Dto.JoinUserResponse;
14+
1115
@RestController
16+
@RequiredArgsConstructor
1217
@RequestMapping("/api/v1/users")
1318
public class UserV1Controller implements UserV1ApiSpec {
1419

15-
@GetMapping("/{userId}")
20+
private final JoinUserService joinUserService;
21+
1622
@Override
17-
public ApiResponse<UserV1Dto.GetUserResponse> getUser(
18-
@PathVariable(value = "userId") Long userId
23+
@PostMapping("/join")
24+
public ApiResponse<JoinUserResponse> joinUser(
25+
@RequestBody JoinUserRequest request
1926
) {
20-
return ApiResponse.success(null);
27+
User user = joinUserService.joinUser(request.toCommand());
28+
29+
return ApiResponse.success(JoinUserResponse.from(user));
2130
}
2231
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,33 @@
11
package com.loopers.application.api.user;
22

3+
import com.fasterxml.jackson.annotation.JsonFormat;
4+
import com.loopers.core.domain.user.User;
5+
import com.loopers.core.service.user.command.JoinUserCommand;
6+
import jakarta.validation.constraints.NotBlank;
7+
8+
import java.time.LocalDate;
9+
310
public class UserV1Dto {
411

12+
public record JoinUserRequest(
13+
@NotBlank String identifier,
14+
@NotBlank String email,
15+
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd") LocalDate birthday,
16+
@NotBlank String gender
17+
) {
18+
public JoinUserCommand toCommand() {
19+
return new JoinUserCommand(identifier, email, birthday, gender);
20+
}
21+
}
22+
523
public record GetUserResponse(String userId) {
624

725
}
26+
27+
public record JoinUserResponse(String userId) {
28+
29+
public static JoinUserResponse from(User user) {
30+
return new JoinUserResponse(user.getUserId().value());
31+
}
32+
}
833
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
POST {{commerce-api}}/api/v1/users/join
2+
Content-Type: application/json
3+
4+
{
5+
"identifier": "{{identifier}}",
6+
"email": "{{email}}",
7+
"birthday": "{{birthday}}",
8+
"gender":"{{gender}}"
9+
}
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.loopers.core.domain.user.vo;
22

3-
import java.time.LocalDateTime;
3+
import java.time.LocalDate;
44

5-
public record UserBirthDay(LocalDateTime value) {
5+
public record UserBirthDay(LocalDate value) {
66
}

core/infra/database/mysql/user-mysql/src/main/java/com/loopers/core/infra/database/mysql/user/entity/UserEntity.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,9 @@
1515
import lombok.Builder;
1616
import lombok.NoArgsConstructor;
1717

18+
import java.time.LocalDate;
1819
import java.time.LocalDateTime;
20+
import java.util.Optional;
1921

2022
@Entity
2123
@Table(
@@ -38,7 +40,7 @@ public class UserEntity {
3840

3941
private String email;
4042

41-
private LocalDateTime birthDay;
43+
private LocalDate birthDay;
4244

4345
private String gender;
4446

@@ -50,7 +52,11 @@ public class UserEntity {
5052

5153
public static UserEntity from(User user) {
5254
return UserEntity.builder()
53-
.id(Long.parseLong(user.getUserId().value()))
55+
.id(
56+
Optional.ofNullable(user.getUserId().value())
57+
.map(Long::parseLong)
58+
.orElse(null)
59+
)
5460
.identifier(user.getIdentifier().value())
5561
.email(user.getEmail().value())
5662
.birthDay(user.getBirthDay().value())

core/service/user-service/src/main/java/com/loopers/core/service/user/JoinUserService.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import com.loopers.core.domain.user.vo.UserBirthDay;
77
import com.loopers.core.domain.user.vo.UserEmail;
88
import com.loopers.core.domain.user.vo.UserIdentifier;
9-
import com.loopers.core.service.user.command.CreateUserCommand;
9+
import com.loopers.core.service.user.command.JoinUserCommand;
1010
import lombok.RequiredArgsConstructor;
1111
import org.springframework.stereotype.Service;
1212

@@ -16,7 +16,7 @@ public class JoinUserService {
1616

1717
private final UserRepository userRepository;
1818

19-
public User createUser(CreateUserCommand command) {
19+
public User joinUser(JoinUserCommand command) {
2020
UserIdentifier userIdentifier = new UserIdentifier(command.getUserIdentifier());
2121
UserEmail userEmail = new UserEmail(command.getEmail());
2222
UserBirthDay userBirthDay = new UserBirthDay(command.getBirthDay());

core/service/user-service/src/main/java/com/loopers/core/service/user/command/CreateUserCommand.java renamed to core/service/user-service/src/main/java/com/loopers/core/service/user/command/JoinUserCommand.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,20 @@
22

33
import lombok.Getter;
44

5-
import java.time.LocalDateTime;
5+
import java.time.LocalDate;
66

77
@Getter
8-
public class CreateUserCommand {
8+
public class JoinUserCommand {
99

1010
private final String userIdentifier;
1111

1212
private final String email;
1313

14-
private final LocalDateTime birthDay;
14+
private final LocalDate birthDay;
1515

1616
private final String gender;
1717

18-
public CreateUserCommand(String userIdentifier, String email, LocalDateTime birthDay, String gender) {
18+
public JoinUserCommand(String userIdentifier, String email, LocalDate birthDay, String gender) {
1919
this.userIdentifier = userIdentifier;
2020
this.email = email;
2121
this.birthDay = birthDay;

0 commit comments

Comments
 (0)