Skip to content

Commit 6d5f871

Browse files
authored
Merge pull request #10 from MBTips/feature/issue-2
Feat : 카카오 로그인
2 parents 91dd7fb + 1183372 commit 6d5f871

File tree

57 files changed

+776
-95
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

57 files changed

+776
-95
lines changed

api/build.gradle.kts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
21
extra["springCloudVersion"] = "2024.0.0"
32

43
dependencies {
@@ -9,8 +8,8 @@ dependencies {
98

109
// Spring
1110
implementation("org.springframework.boot:spring-boot-starter-web")
12-
implementation("org.springframework.boot:spring-boot-starter-actuator")
1311
implementation("org.springframework.boot:spring-boot-starter-validation")
12+
1413
// Swagger
1514
implementation("org.springdoc:springdoc-openapi-starter-webmvc-ui:2.8.3")
1615
}

api/src/main/java/com/mbtips/common/configuration/SwaggerConfiguration.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
package com.mbtips.common.configuration;
22

3+
import com.mbtips.common.constant.Constant;
34
import io.swagger.v3.oas.models.Components;
45
import io.swagger.v3.oas.models.OpenAPI;
56
import io.swagger.v3.oas.models.info.Info;
7+
import io.swagger.v3.oas.models.security.SecurityRequirement;
8+
import io.swagger.v3.oas.models.security.SecurityScheme;
69
import org.springframework.context.annotation.Bean;
710
import org.springframework.context.annotation.Configuration;
811

@@ -16,7 +19,8 @@ public class SwaggerConfiguration {
1619
@Bean
1720
public OpenAPI openAPI() {
1821
return new OpenAPI()
19-
.components(new Components())
22+
.addSecurityItem(new SecurityRequirement().addList("Bearer Authentication"))
23+
.components(new Components().addSecuritySchemes("Bearer Authentication", createAPIKeyScheme()))
2024
.info(apiInfo());
2125
}
2226

@@ -27,4 +31,10 @@ public Info apiInfo() {
2731
.version(API_VERSION);
2832
}
2933

34+
private SecurityScheme createAPIKeyScheme() {
35+
return new SecurityScheme().type(SecurityScheme.Type.HTTP)
36+
.bearerFormat("JWT")
37+
.scheme("Bearer");
38+
}
39+
3040
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.mbtips.common.properties;
2+
3+
import org.springframework.boot.context.properties.ConfigurationProperties;
4+
5+
@ConfigurationProperties(value = "kakao")
6+
public record KakaoProperties(
7+
String authorizeUrl,
8+
String appKey,
9+
String redirectUrl
10+
) {
11+
12+
}

api/src/main/java/com/mbtips/domain/conversation/ConversationService.java

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

33
import com.mbtips.conversation.ConversationRepository;
44
import com.mbtips.conversation.entity.Conversation;
5-
import com.mbtips.user.entity.User;
5+
import com.mbtips.user.entity.UserEntity;
66
import com.mbtips.virtualfriend.entity.VirtualFriend;
77
import lombok.RequiredArgsConstructor;
88
import lombok.extern.slf4j.Slf4j;
@@ -14,10 +14,10 @@
1414
public class ConversationService {
1515

1616
private final ConversationRepository conversationRepository;
17-
public Conversation createConversation(VirtualFriend friend, User user) {
17+
public Conversation createConversation(VirtualFriend friend, UserEntity userEntity) {
1818
Conversation conversation = Conversation.builder()
1919
.virtualFriend(friend)
20-
.user(user).build();
20+
.user(userEntity).build();
2121
Conversation saveConversation = conversationRepository.save(conversation);
2222
return saveConversation;
2323
}

api/src/main/java/com/mbtips/domain/message/MessageService.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import com.mbtips.message.response.MessageResponse;
44
import com.mbtips.message.MessageRepository;
5-
import com.mbtips.message.entity.Message;
65
import lombok.RequiredArgsConstructor;
76
import org.springframework.stereotype.Service;
87

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.mbtips.domain.virtualfriend;
22

3+
import com.mbtips.common.annotation.LoginUser;
4+
import com.mbtips.domain.user.User;
35
import com.mbtips.domain.virtualfriend.request.VirtualFriendRequest;
46
import com.mbtips.domain.virtualfriend.response.VirtualFriendResponse;
57
import com.mbtips.common.response.ApiResponse;
@@ -12,43 +14,42 @@
1214
import java.util.List;
1315

1416
@RestController
15-
@RequestMapping("/api/virtualfriend")
17+
@RequestMapping("/api/virtual-friend")
1618
@Slf4j
1719
@RequiredArgsConstructor
1820
public class VirtualFriendController {
1921

2022
private final VirtualFriendService virtualFriendService;
2123

2224
/**
23-
* todo - userId 추출하여 service전달
25+
*
2426
*/
2527
@GetMapping
2628
@Operation(summary = "가상친구, 채팅방 리스트 조회", description = "userId기준으로 채팅방+가상친구 리스트를 조회합니다.")
27-
public ApiResponse<List<VirtualFriendResponse>> getVirtualFriends(@RequestParam Long userId){
29+
public ApiResponse<List<VirtualFriendResponse>> getVirtualFriends(@LoginUser User user){
2830
log.debug(" <<< get virtualFriend List >>>");
29-
List<VirtualFriendResponse> result = virtualFriendService.getVirtualFriendsByUserId(userId);
31+
List<VirtualFriendResponse> result = virtualFriendService.getVirtualFriendsByUserId(user.getUserId());
3032
return ApiResponse.success(result);
3133
}
3234

3335
/**
34-
* todo - request validation 적용, 유저추출 적용
36+
* todo - request validation 적용
3537
*/
3638
@PostMapping
3739
@Operation(summary = "가상친구 생성", description = "가상친구 생성을 요청하며, 채팅방이 생성됩니다.")
38-
public ApiResponse<VirtualFriendResponse> createVirtualFriend(@Valid @RequestBody VirtualFriendRequest virtualFriendRequest){
39-
Long userId = 1L;
40-
VirtualFriendResponse result = virtualFriendService.createVirtualFriend(virtualFriendRequest, userId);
40+
public ApiResponse<VirtualFriendResponse> createVirtualFriend(@Valid @RequestBody VirtualFriendRequest virtualFriendRequest,
41+
@LoginUser User user){
42+
VirtualFriendResponse result = virtualFriendService.createVirtualFriend(virtualFriendRequest, user.getUserId());
4143
return ApiResponse.success(result);
4244
}
4345

4446
/**
45-
* todo - 유저추출 적용
47+
*
4648
*/
4749
@DeleteMapping("/{friendId}")
4850
@Operation(summary = "가상친구 삭제", description = "가상친구가 삭제되며, 채팅방이 삭제됩니다.")
49-
public ApiResponse<Void> deleteVirtualFriend(@PathVariable Long friendId){
50-
Long userId = 1L;
51-
virtualFriendService.deleteVirtualFriend(friendId, userId);
51+
public ApiResponse<Void> deleteVirtualFriend(@PathVariable Long friendId, @LoginUser User user){
52+
virtualFriendService.deleteVirtualFriend(friendId, user.getUserId());
5253
return ApiResponse.success();
5354
}
5455
}

api/src/main/java/com/mbtips/domain/virtualfriend/VirtualFriendService.java

Lines changed: 14 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,17 @@
33
import com.mbtips.common.exception.VirtualFriendNotFoundException;
44
import com.mbtips.conversation.entity.Conversation;
55
import com.mbtips.domain.conversation.ConversationService;
6+
import com.mbtips.domain.user.User;
67
import com.mbtips.domain.virtualfriend.request.VirtualFriendRequest;
78
import com.mbtips.domain.virtualfriend.response.VirtualFriendResponse;
8-
import com.mbtips.user.entity.User;
9+
import com.mbtips.user.application.service.UserService;
10+
import com.mbtips.user.entity.UserEntity;
911
import com.mbtips.virtualfriend.VirtualFriendRepository;
1012
import com.mbtips.virtualfriend.entity.VirtualFriend;
1113
import lombok.RequiredArgsConstructor;
1214
import org.springframework.stereotype.Service;
13-
import org.springframework.transaction.annotation.Transactional;
1415

1516
import java.util.List;
16-
import java.util.Optional;
1717
import java.util.stream.Collectors;
1818

1919
@Service
@@ -22,9 +22,9 @@ public class VirtualFriendService {
2222

2323
private final VirtualFriendRepository virtualFriendRepository;
2424
private final ConversationService conversationService;
25+
private final UserService userService;
2526

26-
@Transactional
27-
public List<VirtualFriendResponse> getVirtualFriendsByUserId(Long userId) {
27+
public List<VirtualFriendResponse> getVirtualFriendsByUserId(String userId) {
2828
List<Object[]> friends = virtualFriendRepository.findvirtualFriendAndConversation(userId);
2929

3030
List<VirtualFriendResponse> result = friends.stream()
@@ -37,32 +37,28 @@ public List<VirtualFriendResponse> getVirtualFriendsByUserId(Long userId) {
3737
/**
3838
* todo user탐색 추가
3939
*/
40-
@Transactional
41-
public VirtualFriendResponse createVirtualFriend(VirtualFriendRequest req, Long userId) {
40+
public VirtualFriendResponse createVirtualFriend(VirtualFriendRequest req, String userId) {
4241

43-
User user = new User();
44-
user.setUserEmail("[email protected]");
45-
user.setUserId(userId);
42+
User user = userService.findById(userId);
43+
UserEntity userEntity = new UserEntity(user);
4644

47-
VirtualFriend friend = VirtualFriendRequest.toEntity(req, user);
45+
VirtualFriend friend = VirtualFriendRequest.toEntity(req, userEntity);
4846
VirtualFriend saveFriend = virtualFriendRepository.save(friend);
4947

50-
Conversation conversation = conversationService.createConversation(friend, user);
48+
Conversation conversation = conversationService.createConversation(friend, userEntity);
5149

5250
VirtualFriendResponse result = VirtualFriendResponse.from(saveFriend, conversation.getConversationId());
5351
return result;
5452
}
5553
/**
5654
* todo user탐색 추가
5755
*/
58-
@Transactional
59-
public void deleteVirtualFriend(Long friendId, Long userId) {
56+
public void deleteVirtualFriend(Long friendId, String userId) {
6057

61-
User user = new User();
62-
user.setUserEmail("[email protected]");
63-
user.setUserId(userId);
58+
User user = userService.findById(userId);
59+
UserEntity userEntity = new UserEntity(user);
6460

65-
VirtualFriend virtualFriend = virtualFriendRepository.findByFriendId(friendId, user)
61+
VirtualFriend virtualFriend = virtualFriendRepository.findByFriendId(friendId, userEntity)
6662
.orElseThrow(() -> new VirtualFriendNotFoundException("가상 친구를 찾을 수 없습니다."));
6763
conversationService.deleteConversation(virtualFriend);
6864
virtualFriendRepository.delete(virtualFriend);

api/src/main/java/com/mbtips/domain/virtualfriend/request/VirtualFriendRequest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.mbtips.domain.virtualfriend.request;
22

3-
import com.mbtips.user.entity.User;
3+
import com.mbtips.user.entity.UserEntity;
44
import com.mbtips.virtualfriend.entity.VirtualFriend;
55
import jakarta.validation.constraints.Max;
66
import jakarta.validation.constraints.Min;
@@ -35,9 +35,9 @@ public record VirtualFriendRequest(
3535
String JorP
3636

3737
){
38-
public static VirtualFriend toEntity(VirtualFriendRequest req, User user) {
38+
public static VirtualFriend toEntity(VirtualFriendRequest req, UserEntity userEntity) {
3939
return VirtualFriend.builder()
40-
.user(user)
40+
.user(userEntity)
4141
.virtualFriendName(req.userName)
4242
.virtualFriendAge(req.age)
4343
.virtualFriendRelationship(req.relationship)
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.mbtips.user.application.dto;
2+
3+
import com.mbtips.domain.user.enums.Platform;
4+
5+
public record LoginUserRequestDto(
6+
Platform platform,
7+
long platformId
8+
) {
9+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package com.mbtips.user.application.manager;
2+
3+
import com.fasterxml.jackson.core.JsonProcessingException;
4+
import com.fasterxml.jackson.databind.ObjectMapper;
5+
import com.mbtips.common.exception.CustomException;
6+
import com.mbtips.common.exception.enums.CommonException;
7+
import com.mbtips.common.provider.JwtProvider;
8+
import com.mbtips.domain.user.User;
9+
import com.mbtips.domain.user.utils.UserUtils;
10+
import com.mbtips.user.application.dto.LoginUserRequestDto;
11+
import com.mbtips.user.application.service.UserService;
12+
import lombok.RequiredArgsConstructor;
13+
import org.springframework.stereotype.Service;
14+
import org.springframework.transaction.annotation.Transactional;
15+
16+
import java.util.Optional;
17+
18+
@Service
19+
@RequiredArgsConstructor
20+
public class UserManager {
21+
22+
private final UserService userService;
23+
private final ObjectMapper objectMapper;
24+
private final JwtProvider jwtProvider;
25+
26+
@Transactional
27+
public String login(LoginUserRequestDto requestDto) {
28+
String userId = UserUtils.getUserId(requestDto.platform(), requestDto.platformId());
29+
User user = userService.joinAndLogin(userId);
30+
try {
31+
return jwtProvider.createToken(objectMapper.writeValueAsString(user));
32+
} catch (JsonProcessingException e) {
33+
throw new CustomException(CommonException.JSON_PROCESS_ERROR);
34+
}
35+
}
36+
}

0 commit comments

Comments
 (0)