Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
104 commits
Select commit Hold shift + click to select a range
0731c33
feat[post]:post투표수페이징추가
GarakChoi Oct 8, 2025
d9d02f9
fix[poll]:test fix
GarakChoi Oct 8, 2025
21b1e86
feat[poll]:중복투표제거
GarakChoi Oct 8, 2025
f66cc3e
faet[post]:투표 본인 확인 추가
GarakChoi Oct 10, 2025
50ee479
faet[post]:투표 본인 확인 추가
GarakChoi Oct 10, 2025
b97b7b6
faet[post]:투표 본인 확인 추가
GarakChoi Oct 10, 2025
07b3dbd
faet[post]:투표 본인 확인 추가
GarakChoi Oct 10, 2025
4450f10
fix[poll]:fix updatepoll
GarakChoi Oct 10, 2025
bede07a
Merge pull request #238 from prgrms-web-devcourse-final-project/feat/…
Nohheechul Oct 10, 2025
8daa4c6
refactor[law-word]: 일반 용어 검색 기능 추가
Nohheechul Oct 10, 2025
4c3c5fb
Merge pull request #260 from prgrms-web-devcourse-final-project/refac…
DooHyoJeong Oct 10, 2025
22f41c9
feat[post]:myvotedpaged
GarakChoi Oct 10, 2025
a863c2a
Merge pull request #262 from prgrms-web-devcourse-final-project/feat/…
DooHyoJeong Oct 10, 2025
baecebd
fix[member]: 회원 탈퇴 시 연관 데이터 삭제 로직 추가
asowjdan Oct 10, 2025
5fb21e8
fix[member]: 회원 탈퇴 시 연관 데이터 삭제 로직 추가
asowjdan Oct 10, 2025
a61d13b
Merge remote-tracking branch 'origin/feat/member' into feat/member
asowjdan Oct 10, 2025
eba261b
test[member]: 회원 탈퇴 시 연관 데이터 삭제 로직 추가에 따른 테스트 코드 수정
asowjdan Oct 10, 2025
838a7c4
fix[member]: 브랜치 병합 과정에서 제거하지 못한 cascade 로직 제거
asowjdan Oct 10, 2025
73e258a
Merge pull request #263 from asowjdan/feat/member
asowjdan Oct 10, 2025
4890f7e
fix[post]:fix paged totalelements
GarakChoi Oct 10, 2025
f04faaf
feat[chat]: ai채팅 비동기 처리
yongho9064 Oct 10, 2025
83d0230
Merge pull request #265 from prgrms-web-devcourse-final-project/feat/…
Nohheechul Oct 10, 2025
8f081dc
Merge pull request #264 from prgrms-web-devcourse-final-project/feat/…
GarakChoi Oct 10, 2025
483bdb6
fix[member]: 챗봇 답변 내용에 대한 항목에 cascade 로직 추가 및 연관 데이터 삭제 로직 순서 변경
asowjdan Oct 10, 2025
c4dc46e
test[member]: 회원 탈퇴 로직 변경으로 인한 테스트 코드 수정
asowjdan Oct 10, 2025
d5d60d3
Merge pull request #266 from asowjdan/fix/member
asowjdan Oct 11, 2025
1c4756f
fix[post]:fix updatedAt
GarakChoi Oct 13, 2025
657e7f0
fix[post]:fix updatedAt
GarakChoi Oct 13, 2025
e7a048b
fix[post]:fix updatedAt
GarakChoi Oct 13, 2025
5f06c08
fix[post]:fix updatedAt
GarakChoi Oct 13, 2025
bc57b5e
Merge pull request #268 from prgrms-web-devcourse-final-project/feat/…
GarakChoi Oct 13, 2025
fca10ad
fix[post]:myposts rollback
GarakChoi Oct 13, 2025
e189d1f
fix[post]:myposts rollback
GarakChoi Oct 13, 2025
6cef13a
Merge pull request #270 from prgrms-web-devcourse-final-project/feat/…
GarakChoi Oct 13, 2025
18aa050
feat[chat]: kafka 비동기 이벤트 처리 구현 (채팅 기록, 키워드 추출)
yongho9064 Oct 13, 2025
a1b342b
chore[prompt]: 키워드 추출 프롬프트 수정
yongho9064 Oct 13, 2025
59bc9c5
docker: kafka 추가
yongho9064 Oct 13, 2025
2f86406
chore[chat]: AsyncPostChatProcessingService.java 비활성
yongho9064 Oct 13, 2025
af4c135
config: kafka 의존성 추가
yongho9064 Oct 13, 2025
9161ed7
config: kafka 설정 추가
yongho9064 Oct 13, 2025
a1bbdd8
Merge pull request #271 from prgrms-web-devcourse-final-project/feat/…
DooHyoJeong Oct 13, 2025
15a83b3
feat[post]:dummy data
GarakChoi Oct 13, 2025
0d0cdec
fix[member]:쿠키 유효시간 수정 및 쿠키 생성 도메인 수정
asowjdan Oct 13, 2025
2d3fb31
chore[infra]: actuator 확인용
DooHyoJeong Oct 10, 2025
893d02d
chore[infra]: ai 데이터 세팅
DooHyoJeong Oct 10, 2025
dde199b
chore[infra]: 배포 데이터 세팅
DooHyoJeong Oct 13, 2025
1a432db
chore[infra]: 배포 카푸카 세팅
DooHyoJeong Oct 13, 2025
49e4e26
Merge pull request #274 from prgrms-web-devcourse-final-project/chore…
DooHyoJeong Oct 13, 2025
14be983
Merge pull request #273 from asowjdan/fix/member
DooHyoJeong Oct 13, 2025
092f3c6
feat[post]:dummy member
GarakChoi Oct 13, 2025
5f04a28
feat[post]:dummy member
GarakChoi Oct 13, 2025
37490d9
fix[prompt]: 프롬프트 수정
yongho9064 Oct 13, 2025
1d37f7c
Merge pull request #277 from prgrms-web-devcourse-final-project/feat/…
GarakChoi Oct 13, 2025
a49dfbe
Merge pull request #276 from prgrms-web-devcourse-final-project/fix/p…
GarakChoi Oct 13, 2025
f331f00
fix[history]: getChatHistory 버그 수정
yongho9064 Oct 13, 2025
3bbc5f5
Merge pull request #279 from prgrms-web-devcourse-final-project/fix/chat
DooHyoJeong Oct 13, 2025
d744dce
chore[infra]: 배포 카푸카 세팅
DooHyoJeong Oct 13, 2025
1bbfb25
chore[infra]: admin 계정 추가
DooHyoJeong Oct 13, 2025
1800a2a
Merge pull request #281 from prgrms-web-devcourse-final-project/chore…
DooHyoJeong Oct 13, 2025
cf00181
chore[infra]: work
DooHyoJeong Oct 13, 2025
0d693ca
Merge pull request #283 from prgrms-web-devcourse-final-project/chore…
DooHyoJeong Oct 13, 2025
edcfa32
chore[infra]: work
DooHyoJeong Oct 13, 2025
8fe9e55
Merge pull request #285 from prgrms-web-devcourse-final-project/chore…
DooHyoJeong Oct 13, 2025
9d94e52
chore[infra]: work
DooHyoJeong Oct 13, 2025
aae94c1
Merge pull request #287 from prgrms-web-devcourse-final-project/chore…
DooHyoJeong Oct 13, 2025
77ff795
refactor[law-word]: 용어 검색 띄어쓰기, ^ 정규화
Nohheechul Oct 14, 2025
0444007
Merge pull request #291 from prgrms-web-devcourse-final-project/refac…
DooHyoJeong Oct 14, 2025
16574f9
feat[home]: 판례 법령 등등 갯수
yongho9064 Oct 14, 2025
ccf5e5a
Merge pull request #292 from prgrms-web-devcourse-final-project/feat/…
DooHyoJeong Oct 14, 2025
1066851
feat[post]:Dummytest
GarakChoi Oct 14, 2025
0b636f2
Refactor[poll]:pollvote object->dto
GarakChoi Oct 14, 2025
4a4067a
Merge pull request #294 from prgrms-web-devcourse-final-project/feat/…
GarakChoi Oct 14, 2025
a5aed47
feat[chat]: 채팅 기록 redis에 캐싱
yongho9064 Oct 14, 2025
48a53c5
move: 패키지 infrastructure 이동
yongho9064 Oct 14, 2025
d79fbd2
Merge pull request #295 from prgrms-web-devcourse-final-project/feat/…
DooHyoJeong Oct 14, 2025
720cf74
feat[chat]: redis 캐시 삭제 추가
yongho9064 Oct 14, 2025
3a99f5d
fix: redis 오류 수정
yongho9064 Oct 14, 2025
4dc4e05
Merge pull request #296 from prgrms-web-devcourse-final-project/feat/…
DooHyoJeong Oct 14, 2025
1f0f780
fix[member]:로컬과 소셜 회원의 기본 키 값 중복 제거
asowjdan Oct 14, 2025
179b36f
fix[member]:중복 제거용 시퀀스 테이블 생성
asowjdan Oct 14, 2025
b99cec9
Merge pull request #297 from asowjdan/fix/member
DooHyoJeong Oct 14, 2025
d5c4d62
refactor[Precedent]: 판례 풀 텍스트 검색으로 전환
Nohheechul Oct 14, 2025
474c2f1
refactor[law]: PageResponseDto 리펙토링
Nohheechul Oct 14, 2025
c98210c
Merge pull request #299 from prgrms-web-devcourse-final-project/refac…
DooHyoJeong Oct 14, 2025
085f812
fix: docker-compose.yml 메모리 부족 버그 수정
yongho9064 Oct 14, 2025
c8dd482
chore: 빈공간 제거
yongho9064 Oct 14, 2025
3c48a06
Merge pull request #301 from prgrms-web-devcourse-final-project/fix/o…
DooHyoJeong Oct 14, 2025
3c615bf
refactor[law]: error 로그 추가
Nohheechul Oct 14, 2025
356a88d
Merge pull request #303 from prgrms-web-devcourse-final-project/refac…
Nohheechul Oct 14, 2025
38c906a
chore[infra]: docker kafka 설치 순서 변경
DooHyoJeong Oct 14, 2025
8674477
chore[infra]: sentry 버전 변경
DooHyoJeong Oct 14, 2025
47bc3d8
Merge pull request #305 from prgrms-web-devcourse-final-project/chore…
DooHyoJeong Oct 14, 2025
e340287
chore[infra]: sentry 지원을 위한 스프링부트 버전 변경
DooHyoJeong Oct 14, 2025
6d4dac9
Merge pull request #307 from prgrms-web-devcourse-final-project/chore…
DooHyoJeong Oct 14, 2025
b922d05
chore[infra]: sentry 테스트
DooHyoJeong Oct 14, 2025
e25ff39
Merge pull request #309 from prgrms-web-devcourse-final-project/chore…
DooHyoJeong Oct 14, 2025
08b3d2d
chore[infra]: sentry 테스트
DooHyoJeong Oct 14, 2025
75d058c
Merge pull request #310 from prgrms-web-devcourse-final-project/chore…
DooHyoJeong Oct 14, 2025
14000eb
chore[initdate]: 스프링부트 버전 복구
DooHyoJeong Oct 14, 2025
365ac30
Merge pull request #312 from prgrms-web-devcourse-final-project/chore…
DooHyoJeong Oct 14, 2025
c5f60da
chore[initdate]: sentry test
DooHyoJeong Oct 14, 2025
c8552b0
Merge pull request #314 from prgrms-web-devcourse-final-project/chore…
DooHyoJeong Oct 14, 2025
241f31e
chore[initdate]: sentry test
DooHyoJeong Oct 14, 2025
c78b000
Merge pull request #316 from prgrms-web-devcourse-final-project/chore…
DooHyoJeong Oct 14, 2025
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
2 changes: 2 additions & 0 deletions backend/.env.default
Original file line number Diff line number Diff line change
Expand Up @@ -77,3 +77,5 @@ CUSTOM_CORS_ALLOWED_ORIGINS=NEED_TO_SET
CUSTOM_OAUTH2_REDIRECT_URL=NEED_TO_SET
CUSTOM_OAUTH2_FAILURE_URL=NEED_TO_SET
CUSTOM_FRONTEND_URL=NEED_TO_SET
PROD_COOKIE_DOMAIN=NEED_TO_SET
DEV_COOKIE_DOMAIN=NEED_TO_SET
6 changes: 4 additions & 2 deletions backend/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@ dependencies {
implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'
implementation group: 'org.springframework.boot', name: 'spring-boot-starter-mail', version: '3.0.5'
implementation 'org.springframework.boot:spring-boot-starter-batch'
implementation 'org.springframework.kafka:spring-kafka'
testImplementation 'org.springframework.kafka:spring-kafka-test'

// API Documentation (문서화)
implementation 'org.apache.commons:commons-lang3:3.18.0'
Expand All @@ -60,8 +62,8 @@ dependencies {
implementation 'org.springframework.session:spring-session-data-redis'

// Logging & Monitoring (로깅/모니터링)
implementation 'io.sentry:sentry-spring-boot-starter:7.16.0'
implementation 'io.sentry:sentry-logback:7.16.0'
implementation 'io.sentry:sentry-spring-boot-starter:7.18.0'
implementation 'io.sentry:sentry-logback:7.18.0'

// Development Tools (개발 도구)
compileOnly 'org.projectlombok:lombok'
Expand Down
44 changes: 40 additions & 4 deletions backend/docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,14 @@ services:
volumes:
- mysql-data:/var/lib/mysql
- ./sql:/sql # 호스트 ./sql 폴더를 컨테이너 /sql에 마운트
command: >
command: >
--character-set-server=utf8mb4
--collation-server=utf8mb4_0900_ai_ci
--default-time-zone=Asia/Seoul
--skip-log-bin
--lower-case-table-names=1
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "-p${DEV_DATASOURCE_PASSWORD}"]
test: [ "CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "-p${DEV_DATASOURCE_PASSWORD}" ]
interval: 10s
timeout: 5s
retries: 10
Expand All @@ -40,7 +40,7 @@ services:
command: >
redis-server --appendonly yes
healthcheck:
test: ["CMD", "redis-cli", "ping"]
test: [ "CMD", "redis-cli", "ping" ]
interval: 10s
timeout: 5s
retries: 10
Expand All @@ -62,6 +62,10 @@ services:
image: ollama/ollama:latest
container_name: ollama
restart: unless-stopped
deploy:
resources:
limits:
memory: 2g
ports:
- "11434:11434"
volumes:
Expand All @@ -78,8 +82,40 @@ services:
timeout: 5s
retries: 10

zookeeper:
image: confluentinc/cp-zookeeper:7.4.4
container_name: zookeeper
restart: unless-stopped
ports:
- "2181:2181"
environment:
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000

kafka:
image: confluentinc/cp-kafka:7.4.4
container_name: kafka
restart: unless-stopped
depends_on:
- zookeeper
ports:
- "9092:9092"
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT
KAFKA_LISTENERS: INTERNAL://0.0.0.0:29092,EXTERNAL://0.0.0.0:9092
KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka:29092,EXTERNAL://localhost:9092
KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1
KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1
volumes:
- kafka-data:/var/lib/kafka/data

volumes:
mysql-data:
redis-data:
qdrant-data:
ollama-data:
ollama-data:
kafka-data:
17 changes: 17 additions & 0 deletions backend/sql/member_id_sequence.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
-- ============================================
-- 공유 member_id 시퀀스 테이블 생성
-- ============================================
-- 주의: 기존 배포 환경에 데이터가 있다면
-- backend/sql/migrate_member_id_sequence.sql을 먼저 실행해야 합니다!
-- ============================================

CREATE TABLE IF NOT EXISTS member_id_sequence (
sequence_name VARCHAR(255) NOT NULL PRIMARY KEY,
next_val BIGINT NOT NULL
);

-- 초기값 설정: 신규 설치 시 1부터 시작
-- 기존 환경은 마이그레이션 스크립트로 처리
INSERT INTO member_id_sequence (sequence_name, next_val)
VALUES ('member_id_seq', 1)
ON DUPLICATE KEY UPDATE sequence_name = sequence_name;
107 changes: 107 additions & 0 deletions backend/sql/migrate_member_id_sequence.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
-- ============================================
-- member_id 중복 해결 및 공유 시퀀스 설정 마이그레이션
-- ============================================
-- 실행 전 주의사항:
-- 1. 반드시 데이터베이스 백업을 먼저 수행하세요!
-- 2. 서비스를 중단한 상태에서 실행하세요 (데이터 정합성)
-- 3. 실행 후 애플리케이션을 재시작하세요
-- ============================================

-- 1단계: 현재 상태 확인
SELECT '=== 현재 member 테이블 ===' as info;
SELECT COUNT(*) as count, MIN(member_id) as min_id, MAX(member_id) as max_id FROM member;

SELECT '=== 현재 oauth2_member 테이블 ===' as info;
SELECT COUNT(*) as count, MIN(member_id) as min_id, MAX(member_id) as max_id FROM oauth2_member;

SELECT '=== 중복 확인 ===' as info;
SELECT m.member_id, 'BOTH' as status
FROM member m
INNER JOIN oauth2_member o ON m.member_id = o.member_id;

-- 2단계: oauth2_member의 member_id를 재할당
-- member 테이블의 최대값 이후부터 시작
SET @max_member_id := (SELECT COALESCE(MAX(member_id), 0) FROM member);

SELECT CONCAT('member 테이블 최대 ID: ', @max_member_id) as info;

-- 임시 테이블로 매핑 생성
CREATE TEMPORARY TABLE IF NOT EXISTS oauth2_member_id_mapping (
old_member_id BIGINT,
new_member_id BIGINT,
PRIMARY KEY (old_member_id)
);

-- 매핑 데이터 생성
INSERT INTO oauth2_member_id_mapping (old_member_id, new_member_id)
SELECT
member_id as old_member_id,
@max_member_id + ROW_NUMBER() OVER (ORDER BY member_id) as new_member_id
FROM oauth2_member
ORDER BY member_id;

SELECT '=== 매핑 테이블 ===' as info;
SELECT * FROM oauth2_member_id_mapping;

-- 3단계: 외래키 제약 확인 (있다면 비활성화)
SET FOREIGN_KEY_CHECKS = 0;

-- 4단계: 연관 테이블 업데이트 (member_id를 외래키로 가진 테이블만)
-- Post 테이블 (FK: member_id)
UPDATE post p
INNER JOIN oauth2_member_id_mapping m ON p.member_id = m.old_member_id
SET p.member_id = m.new_member_id;

-- PollVote 테이블 (FK: member_id)
UPDATE poll_vote pv
INNER JOIN oauth2_member_id_mapping m ON pv.member_id = m.old_member_id
SET pv.member_id = m.new_member_id;

-- History 테이블 (FK: member_id)
UPDATE history h
INNER JOIN oauth2_member_id_mapping m ON h.member_id = m.old_member_id
SET h.member_id = m.new_member_id;

-- 5단계: oauth2_member 테이블 업데이트
UPDATE oauth2_member o
INNER JOIN oauth2_member_id_mapping m ON o.member_id = m.old_member_id
SET o.member_id = m.new_member_id;

-- 6단계: 외래키 제약 다시 활성화
SET FOREIGN_KEY_CHECKS = 1;

-- 7단계: 시퀀스 테이블 생성
CREATE TABLE IF NOT EXISTS member_id_sequence (
sequence_name VARCHAR(255) NOT NULL PRIMARY KEY,
next_val BIGINT NOT NULL
);

-- 8단계: 초기값 설정 (재할당 후 최대값 + 1)
INSERT INTO member_id_sequence (sequence_name, next_val)
SELECT 'member_id_seq', COALESCE(MAX(max_id), 0) + 1
FROM (
SELECT COALESCE(MAX(member_id), 0) as max_id FROM member
UNION ALL
SELECT COALESCE(MAX(member_id), 0) as max_id FROM oauth2_member
) as max_values
ON DUPLICATE KEY UPDATE next_val = VALUES(next_val);

-- 9단계: 최종 상태 확인
SELECT '=== 마이그레이션 후 member 테이블 ===' as info;
SELECT COUNT(*) as count, MIN(member_id) as min_id, MAX(member_id) as max_id FROM member;

SELECT '=== 마이그레이션 후 oauth2_member 테이블 ===' as info;
SELECT COUNT(*) as count, MIN(member_id) as min_id, MAX(member_id) as max_id FROM oauth2_member;

SELECT '=== 중복 확인 (0건이어야 함) ===' as info;
SELECT m.member_id, 'BOTH' as status
FROM member m
INNER JOIN oauth2_member o ON m.member_id = o.member_id;

SELECT '=== 시퀀스 초기값 ===' as info;
SELECT * FROM member_id_sequence;

-- 임시 테이블 삭제
DROP TEMPORARY TABLE IF EXISTS oauth2_member_id_mapping;

SELECT '=== 마이그레이션 완료! ===' as info;
2 changes: 2 additions & 0 deletions backend/src/main/java/com/ai/lawyer/BackendApplication.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.ConfigurationPropertiesScan;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
import org.springframework.scheduling.annotation.EnableAsync;

@EnableAsync
@SpringBootApplication
@EnableJpaAuditing
@ConfigurationPropertiesScan
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import com.ai.lawyer.domain.chatbot.dto.ChatDto.ChatHistoryDto;
import com.ai.lawyer.domain.chatbot.dto.HistoryDto;
import com.ai.lawyer.domain.chatbot.service.ChatService;
import com.ai.lawyer.domain.chatbot.service.HistoryService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
Expand All @@ -21,7 +20,6 @@
public class HistoryController {

private final HistoryService historyService;
private final ChatService chatService;

@Operation(summary = "채팅방 제목 목록 조회")
@GetMapping("/")
Expand All @@ -32,7 +30,7 @@ public ResponseEntity<List<HistoryDto>> getHistoryTitles(@AuthenticationPrincipa
@Operation(summary = "채팅 조회")
@GetMapping("/{historyId}")
public ResponseEntity<List<ChatHistoryDto>> getChatHistory(@AuthenticationPrincipal Long memberId, @PathVariable("historyId") Long roomId) {
return chatService.getChatHistory(memberId, roomId);
return historyService.getChatHistory(memberId, roomId);
}

@Operation(summary = "채팅방 삭제")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,6 @@ public static class ChatResponse {
@Schema(description = "채팅방 ID", example = "1")
private Long roomId;

@Schema(description = "History 방 제목", example = "손해배상 청구 관련 문의")
private String title;

@Schema(description = "AI 챗봇의 응답 메시지", example = "네, 관련 법령과 판례를 바탕으로 답변해 드리겠습니다.")
private String message;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,10 @@ public class Chat {
@Lob
private String message;

@OneToMany(mappedBy = "chatId")
@OneToMany(mappedBy = "chatId", cascade = CascadeType.ALL, orphanRemoval = true)
private List<ChatPrecedent> chatPrecedents;

@OneToMany(mappedBy = "chatId")
@OneToMany(mappedBy = "chatId", cascade = CascadeType.ALL, orphanRemoval = true)
private List<ChatLaw> chatLaws;

@CreationTimestamp
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ public class History {
private Long historyId;

@ManyToOne
@JoinColumn(name = "member_id")
@JoinColumn(name = "member_id", foreignKey = @ForeignKey(name = "FK_HISTORY_MEMBER"))
private Member memberId;

@OneToMany(mappedBy = "historyId", cascade = CascadeType.ALL, orphanRemoval = true)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,18 @@

import com.ai.lawyer.domain.chatbot.entity.ChatLaw;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

@Repository
public interface ChatLawRepository extends JpaRepository<ChatLaw, Long> {

/**
* member_id에 해당하는 모든 ChatLaw 삭제 (회원 탈퇴 시 사용)
*/
@Modifying
@Query("DELETE FROM ChatLaw cl WHERE cl.chatId.historyId.memberId.memberId = :memberId")
void deleteByMemberIdValue(@Param("memberId") Long memberId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,16 @@

import com.ai.lawyer.domain.chatbot.entity.ChatPrecedent;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

public interface ChatPrecedentRepository extends JpaRepository<ChatPrecedent, Long> {

/**
* member_id에 해당하는 모든 ChatPrecedent 삭제 (회원 탈퇴 시 사용)
*/
@Modifying
@Query("DELETE FROM ChatPrecedent cp WHERE cp.chatId.historyId.memberId.memberId = :memberId")
void deleteByMemberIdValue(@Param("memberId") Long memberId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,18 @@

import com.ai.lawyer.domain.chatbot.entity.Chat;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

@Repository
public interface ChatRepository extends JpaRepository<Chat, Long> {

/**
* member_id에 해당하는 모든 Chat 삭제 (회원 탈퇴 시 사용)
*/
@Modifying
@Query("DELETE FROM Chat c WHERE c.historyId.memberId.memberId = :memberId")
void deleteByMemberIdValue(@Param("memberId") Long memberId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@
import com.ai.lawyer.domain.chatbot.entity.History;
import com.ai.lawyer.domain.member.entity.Member;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
Expand All @@ -14,4 +17,12 @@ public interface HistoryRepository extends JpaRepository<History, Long> {

History findByHistoryIdAndMemberId(Long roomId, Member memberId);

/**
* member_id로 채팅 히스토리 삭제 (회원 탈퇴 시 사용)
* Member와 OAuth2Member 모두 같은 member_id 공간을 사용하므로 Long 타입으로 삭제
*/
@Modifying
@Query("DELETE FROM History h WHERE h.memberId.memberId = :memberId")
void deleteByMemberIdValue(@Param("memberId") Long memberId);

}
Loading