Skip to content

Commit b448d1c

Browse files
committed
Merge branch 'release/v1.0.3'
2 parents 30e390c + 6d5f871 commit b448d1c

File tree

73 files changed

+1406
-96
lines changed

Some content is hidden

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

73 files changed

+1406
-96
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,7 +8,7 @@ dependencies {
98

109
// Spring
1110
implementation("org.springframework.boot:spring-boot-starter-web")
12-
implementation("org.springframework.boot:spring-boot-starter-actuator")
11+
implementation("org.springframework.boot:spring-boot-starter-validation")
1312

1413
// Swagger
1514
implementation("org.springdoc:springdoc-openapi-starter-webmvc-ui:2.8.3")

api/src/main/java/com/mbtips/MbtipsApplication.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@
55
import org.springframework.boot.context.properties.ConfigurationPropertiesScan;
66

77

8-
import org.springframework.boot.autoconfigure.domain.EntityScan;
8+
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
99

1010
@SpringBootApplication
1111
@ConfigurationPropertiesScan
12-
@EntityScan("com.embitips")
12+
@EnableJpaRepositories(basePackages = {"com.mbtips"})
1313
public class MbtipsApplication {
1414

1515
public static void main(String[] args) {

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
}

api/src/main/java/com/mbtips/common/exception/handler/GlobalExceptionHandler.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,14 @@
44
import com.mbtips.common.exception.enums.CommonException;
55
import com.mbtips.common.response.ApiResponse;
66
import lombok.extern.slf4j.Slf4j;
7+
import org.springframework.validation.FieldError;
8+
import org.springframework.web.bind.MethodArgumentNotValidException;
79
import org.springframework.web.bind.annotation.ExceptionHandler;
810
import org.springframework.web.bind.annotation.RestControllerAdvice;
911

12+
import java.util.List;
13+
import java.util.stream.Collectors;
14+
1015
@Slf4j
1116
@RestControllerAdvice
1217
public class GlobalExceptionHandler {
@@ -29,4 +34,23 @@ public ApiResponse<Void> exceptionHandler(Exception e) {
2934
return ApiResponse.fail(CommonException.INTERNAL_SERVER_ERROR);
3035
}
3136

37+
/**
38+
* to-do customexception 적용하기
39+
*/
40+
@ExceptionHandler(MethodArgumentNotValidException.class)
41+
public ApiResponse<Void> exceptionsHandler(MethodArgumentNotValidException e) {
42+
43+
List<String> errorMessages = e.getBindingResult().getFieldErrors().stream()
44+
.map(FieldError::getDefaultMessage)
45+
.collect(Collectors.toList());
46+
47+
log.error("### Validation Errors: {}", errorMessages);
48+
49+
return ApiResponse.fail(CommonException.INVALID_REQUEST_ERROR);
50+
}
51+
52+
/**
53+
* VirtualFriendNotFoundException 구현 변경
54+
*/
55+
3256
}
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+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package com.mbtips.domain.conversation;
2+
3+
import com.mbtips.conversation.ConversationRepository;
4+
import com.mbtips.conversation.entity.Conversation;
5+
import com.mbtips.user.entity.UserEntity;
6+
import com.mbtips.virtualfriend.entity.VirtualFriend;
7+
import lombok.RequiredArgsConstructor;
8+
import lombok.extern.slf4j.Slf4j;
9+
import org.springframework.stereotype.Service;
10+
11+
@Service
12+
@RequiredArgsConstructor
13+
@Slf4j
14+
public class ConversationService {
15+
16+
private final ConversationRepository conversationRepository;
17+
public Conversation createConversation(VirtualFriend friend, UserEntity userEntity) {
18+
Conversation conversation = Conversation.builder()
19+
.virtualFriend(friend)
20+
.user(userEntity).build();
21+
Conversation saveConversation = conversationRepository.save(conversation);
22+
return saveConversation;
23+
}
24+
25+
public void deleteConversation(VirtualFriend friend) {
26+
Conversation conversation = conversationRepository.findByFriendId(friend);
27+
conversationRepository.delete(conversation);
28+
log.debug("{} 대화방이 삭제되었습니다.", conversation.getConversationId());
29+
}
30+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package com.mbtips.domain.fastfriend.controller;
2+
3+
import com.mbtips.common.response.ApiResponse;
4+
import com.mbtips.domain.fastfriend.controller.dto.request.FastFriendMessageRequest;
5+
import com.mbtips.domain.fastfriend.controller.dto.request.FastFriendRequest;
6+
import com.mbtips.domain.fastfriend.controller.dto.response.FastFriendResponse;
7+
import com.mbtips.domain.fastfriend.service.FastFriendService;
8+
import com.mbtips.message.response.MessageResponse;
9+
import io.swagger.v3.oas.annotations.Operation;
10+
import jakarta.validation.Valid;
11+
import lombok.Getter;
12+
import lombok.RequiredArgsConstructor;
13+
import org.springframework.web.bind.annotation.*;
14+
15+
@RestController
16+
@RequestMapping("/api/fastfriend")
17+
@RequiredArgsConstructor
18+
public class FastFriendController {
19+
20+
private final FastFriendService fastFriendService;
21+
@PostMapping
22+
@Operation(summary = "빠른대화 생성", description = "빠른 대화 생성을 요청한 후 가상친구Id를 반환받습니다.")
23+
public ApiResponse<Long> createFastFriendRequest(@Valid @RequestBody FastFriendRequest fastFriendRequest){
24+
Long fastFriendId = fastFriendService.createFastFriend(fastFriendRequest);
25+
return ApiResponse.success(fastFriendId);
26+
}
27+
28+
@PostMapping("/message")
29+
@Operation(summary = "빠른대화 메시지 요청", description = "빠른 대화 친구에게 메시지를 보내고 응답을 받습니다.")
30+
public ApiResponse<String> fastFriendMessageRequest(@RequestBody FastFriendMessageRequest request) {
31+
32+
String result = fastFriendService.messageRequest(request);
33+
return ApiResponse.success(result);
34+
}
35+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.mbtips.domain.fastfriend.controller.dto.request;
2+
3+
public record FastFriendMessageRequest(
4+
Long fastFriendId,
5+
String content
6+
) {
7+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package com.mbtips.domain.fastfriend.controller.dto.request;
2+
3+
import com.mbtips.fastfriend.entity.FastFriend;
4+
5+
public record FastFriendRequest(
6+
String EorI,
7+
String NorS,
8+
String TorF,
9+
String JorP,
10+
String fastFriendName,
11+
int fastFriendAge,
12+
String fastFriendSex,
13+
String fastFriendRelationship
14+
) {
15+
16+
public FastFriend toEntity(FastFriendRequest request) {
17+
return FastFriend.builder()
18+
.EorI(request.EorI)
19+
.NorS(request.NorS)
20+
.TorF(request.TorF)
21+
.JorP(request.JorP)
22+
.fastFriendName(request.fastFriendName)
23+
.fastFriendAge(request.fastFriendAge)
24+
.fastFriendSex(request.fastFriendSex)
25+
.fastFriendRelationship(request.fastFriendRelationship)
26+
.build();
27+
}
28+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package com.mbtips.domain.fastfriend.controller.dto.response;
2+
3+
import com.mbtips.fastfriend.entity.FastFriend;
4+
5+
public record FastFriendResponse (
6+
Long fastFriendId,
7+
String EorI,
8+
String NorS,
9+
String TorF,
10+
String JorP,
11+
String fastFriendName,
12+
int fastFriendAge,
13+
String fastFriendSex,
14+
String fastFriendRelationship
15+
){
16+
17+
public static FastFriendResponse from(FastFriend saveFriend) {
18+
return new FastFriendResponse(
19+
saveFriend.getFastFriendId(),
20+
saveFriend.getEorI(),
21+
saveFriend.getNorS(),
22+
saveFriend.getTorF(),
23+
saveFriend.getJorP(),
24+
saveFriend.getFastFriendName(),
25+
saveFriend.getFastFriendAge(),
26+
saveFriend.getFastFriendSex(),
27+
saveFriend.getFastFriendRelationship()
28+
);
29+
}
30+
}

0 commit comments

Comments
 (0)