Skip to content

Commit 7e8fd9d

Browse files
authored
Merge pull request #22 from studio-recoding/feat-chat-ai
[🚀feat] FastAPI를 통한 Chat 생성 기능
2 parents 37ba15f + c0bad28 commit 7e8fd9d

Some content is hidden

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

52 files changed

+495
-378
lines changed

src/main/java/Ness/Backend/domain/auth/AuthController.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
import Ness.Backend.domain.auth.dto.LoginRequestDto;
44
import Ness.Backend.domain.auth.dto.RegisterRequestDto;
55
import Ness.Backend.domain.member.entity.Member;
6-
import Ness.Backend.global.common.response.CommonResponse;
76
import Ness.Backend.global.auth.AuthUser;
7+
import Ness.Backend.global.common.response.CommonResponse;
88
import io.swagger.v3.oas.annotations.Operation;
99
import io.swagger.v3.oas.annotations.tags.Tag;
1010
import lombok.RequiredArgsConstructor;

src/main/java/Ness/Backend/domain/auth/AuthService.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,10 @@
22

33
import Ness.Backend.domain.auth.dto.LoginRequestDto;
44
import Ness.Backend.domain.auth.dto.RegisterRequestDto;
5-
import Ness.Backend.domain.auth.jwt.JwtTokenProvider;
65
import Ness.Backend.domain.auth.security.AuthDetails;
76
import Ness.Backend.domain.member.MemberRepository;
8-
import Ness.Backend.global.common.response.CommonResponse;
97
import Ness.Backend.domain.member.entity.Member;
8+
import Ness.Backend.global.common.response.CommonResponse;
109
import lombok.RequiredArgsConstructor;
1110
import org.springframework.dao.DataIntegrityViolationException;
1211
import org.springframework.http.HttpStatus;

src/main/java/Ness/Backend/domain/auth/jwt/JwtTokenProvider.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,10 @@
11
package Ness.Backend.domain.auth.jwt;
22

33
import Ness.Backend.domain.auth.jwt.entity.JwtToken;
4-
import Ness.Backend.domain.member.entity.Member;
54
import Ness.Backend.domain.member.MemberRepository;
6-
import Ness.Backend.global.error.ErrorCode;
7-
import Ness.Backend.global.error.exception.UnauthorizedException;
5+
import Ness.Backend.domain.member.entity.Member;
86
import com.auth0.jwt.JWT;
97
import com.auth0.jwt.algorithms.Algorithm;
10-
118
import jakarta.annotation.PostConstruct;
129
import lombok.RequiredArgsConstructor;
1310
import org.springframework.beans.factory.annotation.Value;

src/main/java/Ness/Backend/domain/auth/oAuth/OAuth2Controller.java

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,17 @@
11
package Ness.Backend.domain.auth.oAuth;
22

3-
import Ness.Backend.domain.auth.jwt.entity.JwtToken;
43
import Ness.Backend.domain.member.entity.Member;
54
import Ness.Backend.global.auth.AuthUser;
6-
import Ness.Backend.global.common.response.CommonResponse;
75
import io.swagger.v3.oas.annotations.Operation;
86
import lombok.RequiredArgsConstructor;
9-
import org.springframework.http.HttpEntity;
10-
import org.springframework.http.HttpStatus;
117
import org.springframework.http.HttpStatusCode;
128
import org.springframework.http.ResponseEntity;
139
import org.springframework.web.bind.annotation.*;
1410

15-
import java.io.UnsupportedEncodingException;
16-
1711
@RestController
1812
@RequiredArgsConstructor
1913
public class OAuth2Controller {
2014
private final OAuth2Service oAuth2Service;
21-
@GetMapping("/dev/login/oauth/{registration}")
22-
@Operation(summary = "OAuth 로그인 요청", description = "개발 테스트용 API 입니다. 클라이언트에게 공개되지 않습니다.")
23-
public CommonResponse<?> devSocialLogin(@RequestParam String code, @PathVariable String registration) {
24-
String loginMessage = oAuth2Service.devSocialLogin(code, registration);
25-
return CommonResponse.postResponse(HttpStatus.OK.value(), loginMessage);
26-
}
2715

2816
@PostMapping("/login/oauth/{registration}")
2917
@Operation(summary = "OAuth 로그인 요청", description = "구글 계정으로 로그인하는 API 입니다.")

src/main/java/Ness/Backend/domain/auth/oAuth/OAuth2Service.java

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

33
import Ness.Backend.domain.auth.dto.ResourceDto;
44
import Ness.Backend.domain.auth.inmemory.RefreshTokenRepository;
5+
import Ness.Backend.domain.auth.jwt.JwtTokenProvider;
56
import Ness.Backend.domain.auth.jwt.entity.JwtToken;
67
import Ness.Backend.domain.auth.oAuth.google.dto.GoogleResourceDto;
7-
import Ness.Backend.domain.auth.jwt.JwtTokenProvider;
88
import Ness.Backend.domain.auth.oAuth.kakao.dto.KakaoResourceDto;
99
import Ness.Backend.domain.auth.oAuth.naver.dto.NaverResourceDto;
10-
import Ness.Backend.domain.auth.security.AuthDetails;
10+
import Ness.Backend.domain.member.MemberRepository;
1111
import Ness.Backend.domain.member.MemberService;
1212
import Ness.Backend.domain.member.entity.Member;
13-
import Ness.Backend.domain.member.MemberRepository;
1413
import Ness.Backend.global.auth.oAuth.google.GoogleOAuthApi;
1514
import Ness.Backend.global.auth.oAuth.google.GoogleResourceApi;
1615
import Ness.Backend.global.auth.oAuth.kakao.KakaoOAuthApi;
1716
import Ness.Backend.global.auth.oAuth.kakao.KakaoResourceApi;
1817
import Ness.Backend.global.auth.oAuth.naver.NaverOAuthApi;
1918
import Ness.Backend.global.auth.oAuth.naver.NaverResourceApi;
20-
import Ness.Backend.global.common.response.CommonResponse;
2119
import Ness.Backend.global.error.ErrorCode;
2220
import Ness.Backend.global.error.exception.UnauthorizedException;
23-
2421
import lombok.RequiredArgsConstructor;
2522
import lombok.extern.slf4j.Slf4j;
2623
import org.springframework.core.env.Environment;
2724
import org.springframework.dao.DataIntegrityViolationException;
28-
import org.springframework.http.HttpStatus;
29-
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
3025
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
31-
import org.springframework.security.core.Authentication;
3226
import org.springframework.security.core.context.SecurityContextHolder;
3327
import org.springframework.stereotype.Service;
3428
import org.springframework.transaction.annotation.Transactional;
@@ -186,7 +180,7 @@ private ResourceDto getUserResource(String accessToken, String registration) {
186180
.nickname(kakaoResourceDto.getKakaoAccount().getKakaoProfile().getNickname())
187181
.name(kakaoResourceDto.getKakaoAccount().getKakaoProfile().getNickname())
188182
.build();
189-
log.info("email: "+resourceDto.getEmail());
183+
log.info("email: "+ resourceDto.getEmail());
190184
break;
191185
case "naver":
192186
NaverResourceDto naverResourceDto =
@@ -198,7 +192,7 @@ private ResourceDto getUserResource(String accessToken, String registration) {
198192
.nickname(naverResourceDto.getNaverResponse().getNickname())
199193
.name(naverResourceDto.getNaverResponse().getName())
200194
.build();
201-
log.info("email: "+resourceDto.getEmail());
195+
log.info("email: "+ resourceDto.getEmail());
202196
break;
203197
}
204198
return resourceDto;

src/main/java/Ness/Backend/domain/auth/oAuth/google/dto/GoogleResourceDto.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package Ness.Backend.domain.auth.oAuth.google.dto;
22

33
import com.fasterxml.jackson.annotation.JsonProperty;
4-
import io.swagger.v3.oas.annotations.media.Schema;
5-
import lombok.*;
4+
import lombok.Builder;
5+
import lombok.EqualsAndHashCode;
6+
import lombok.Getter;
7+
import lombok.NoArgsConstructor;
68

79
@Getter
810
@EqualsAndHashCode

src/main/java/Ness/Backend/domain/auth/oAuth/kakao/dto/KakaoResourceDto.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package Ness.Backend.domain.auth.oAuth.kakao.dto;
22

33
import com.fasterxml.jackson.annotation.JsonProperty;
4-
import lombok.Builder;
54
import lombok.EqualsAndHashCode;
65
import lombok.Getter;
76
import lombok.NoArgsConstructor;

src/main/java/Ness/Backend/domain/auth/security/AuthDetailService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package Ness.Backend.domain.auth.security;
22

3-
import Ness.Backend.domain.member.entity.Member;
43
import Ness.Backend.domain.member.MemberRepository;
4+
import Ness.Backend.domain.member.entity.Member;
55
import lombok.RequiredArgsConstructor;
66
import org.springframework.security.core.userdetails.UserDetailsService;
77
import org.springframework.stereotype.Service;

src/main/java/Ness/Backend/domain/auth/security/SecurityConfig.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package Ness.Backend.domain.auth.security;
22

3-
import Ness.Backend.domain.auth.inmemory.RefreshTokenRepository;
43
import Ness.Backend.domain.auth.inmemory.RefreshTokenService;
54
import Ness.Backend.domain.auth.jwt.JwtAuthenticationFilter;
65
import Ness.Backend.domain.auth.jwt.JwtAuthorizationFilter;
Lines changed: 27 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package Ness.Backend.domain.chat;
22

3-
import Ness.Backend.domain.chat.dto.ChatCreateRequestDto;
4-
import Ness.Backend.domain.chat.dto.ChatListResponseDto;
3+
import Ness.Backend.domain.chat.dto.request.PostUserChatDto;
4+
import Ness.Backend.domain.chat.dto.response.GetAiChatDto;
5+
import Ness.Backend.domain.chat.dto.response.GetChatListDto;
6+
import Ness.Backend.domain.chat.dto.response.PostFastApiAiChatDto;
57
import Ness.Backend.domain.member.entity.Member;
68
import Ness.Backend.global.auth.AuthUser;
79
import io.swagger.v3.oas.annotations.Operation;
@@ -14,27 +16,35 @@
1416
@RestController
1517
@RequiredArgsConstructor
1618
@Tag(name = "Chat API", description = "사용자의 채팅 내역 관련 API")
19+
@RequestMapping("/chat")
1720
public class ChatController {
1821
private final ChatService chatService;
19-
@GetMapping("/chat/dev")
20-
@Operation(summary = "모든 사용자의 채팅 내역", description = "모든 사용자의 채팅 내역을 반환하는 API 입니다.")
21-
public ResponseEntity<ChatListResponseDto> getAllUserChat(){
22-
ChatListResponseDto allUserChats = chatService.findAllUserChat();
23-
return new ResponseEntity<>(allUserChats, HttpStatusCode.valueOf(200));
24-
}
2522

26-
@GetMapping("/chat")
27-
@Operation(summary = "한 사용자의 채팅 내역", description = "한 사용자의 모든 채팅 내역을 반환하는 API 입니다.")
28-
public ResponseEntity<ChatListResponseDto> getOneUserChat(@AuthUser Member member){
29-
ChatListResponseDto oneUserChats = chatService.findOneUserChat(member.getId());
23+
@GetMapping("/dev")
24+
@Operation(summary = "개발 테스트용 한 사용자의 채팅 내역", description = "한 사용자의 일주일치 채팅 내역을 반환하는 API 입니다.")
25+
public ResponseEntity<GetChatListDto> getUserChat(){
26+
GetChatListDto oneUserChats = chatService.getOneWeekUserChat(1L);
3027
return new ResponseEntity<>(oneUserChats, HttpStatusCode.valueOf(200));
3128
}
3229

33-
@PutMapping("/chat/new")
34-
@Operation(summary = "새로운 채팅 내역", description = "새로운 채팅 내역 저장하는 API 입니다.")
35-
public ResponseEntity<Long> createChat(@AuthUser Member member, @RequestBody ChatCreateRequestDto chatCreateRequestDto){
36-
Long userId = chatService.createNewChat(member.getId(), chatCreateRequestDto);
37-
return new ResponseEntity<>(userId, HttpStatusCode.valueOf(200));
30+
@PostMapping("/dev")
31+
@Operation(summary = "새로운 채팅으로 AI와 통신", description = "새로운 채팅 내역을 저장하고, AI의 응답을 받는 API 입니다.")
32+
public ResponseEntity<GetAiChatDto> postAiChat(@RequestBody PostUserChatDto postUserChatDto){
33+
GetAiChatDto answer = chatService.postNewUserChat(1L, postUserChatDto);
34+
return new ResponseEntity<>(answer, HttpStatusCode.valueOf(200));
3835
}
3936

37+
@GetMapping("")
38+
@Operation(summary = "한 사용자의 채팅 내역", description = "한 사용자의 일주일치 채팅 내역을 반환하는 API 입니다.")
39+
public ResponseEntity<GetChatListDto> getUserChat(@AuthUser Member member){
40+
GetChatListDto oneUserChats = chatService.getOneWeekUserChat(member.getId());
41+
return new ResponseEntity<>(oneUserChats, HttpStatusCode.valueOf(200));
42+
}
43+
44+
@PostMapping("")
45+
@Operation(summary = "새로운 채팅으로 AI와 통신", description = "새로운 채팅 내역을 저장하고, AI의 응답을 받는 API 입니다.")
46+
public ResponseEntity<GetAiChatDto> postAiChat(@AuthUser Member member, @RequestBody PostUserChatDto postUserChatDto){
47+
GetAiChatDto answer = chatService.postNewUserChat(member.getId(), postUserChatDto);
48+
return new ResponseEntity<>(answer, HttpStatusCode.valueOf(200));
49+
}
4050
}

0 commit comments

Comments
 (0)