Commit Graph
100 Commits
Author SHA1 Message Date
klaus 779fc5c5a5 feat(chat): 채팅권 구매 가격과 채팅횟수 변경
- 기존: 30캔, 채팅 40개
- 변경: 10캔, 채팅 12개
2025-10-22 16:40:54 +09:00
klaus 08ebb311fb feat(home): 인기 캐릭터 추가 2025-10-20 14:47:13 +09:00
klaus 12cdd25be7 feat(creator-profile-live): LiveRoomResponse에 utc 기반의 라이브 시작 시간 추가 2025-10-16 15:05:23 +09:00
klaus 59700493eb feat(explorer): 크리에이터 프로필에 최신/총/소장 콘텐츠 정보 추가
- ExplorerService.getCreatorProfile에서 다음 정보 계산/반환
  - 최신 오디오 콘텐츠 1개(`latestContent`)
  - 전체 콘텐츠 수(`totalContentCount`)
  - 조회 유저의 소장 콘텐츠 수(`ownedContentCount`)
- ExplorerQueryRepository.getOwnedContentCount 추가
  - 활성 KEEP 또는 유효한 RENTAL 주문 기준으로 distinct 카운트
- GetCreatorProfileResponse 스키마 확장
  - `latestContent`, `totalContentCount`, `ownedContentCount` 필드 추가
- AudioContentService.getLatestCreatorAudioContent 사용해 최신 콘텐츠 조회 로직 보강
  - 성인 콘텐츠 노출 여부 및 구매/대여 상태 반영
- OrderRepository의 주문 타입 조회 로직을 활용해 보유/대여 상태 표시

API 응답 필드가 추가되어 프로필 화면 구성 정보를 보강합니다. (호환성 유지)
2025-10-14 15:35:15 +09:00
klaus 88c3a84972 perf(admin-charge): 통화별 합계를 DB 그룹 집계로 이관하여 전송량/CPU 감소 2025-10-11 05:41:14 +09:00
klaus db0d3a6ef3 refactor(admin-charge): QGetChargeStatusQueryDto의 currency가 null이면 KRW로 설정되도록 coalesce("KRW") 적용 2025-10-11 05:07:21 +09:00
klaus 3d29d27441 refactor(admin-charge): QGetChargeStatusQueryDto의 currency가 null이 되지 않도록 coalesce("") 사용 2025-10-11 04:52:58 +09:00
klaus b5f66603bd refactor(admin-charge): QGetChargeStatusQueryDto의 currency가 null이 되지 않도록 coalesce("") 사용 2025-10-11 04:39:15 +09:00
klaus 976eeaa443 refactor(admin-charge): GetChargeStatusDetailResponse의 amount 타입을 Int에서 BigDecimal로 변경
- 충전 금액 계산을 좀 더 명확하게 하기 위해서 변경
2025-10-11 03:54:47 +09:00
klaus 25d1d813f1 refactor(admin-charge): HQL 파싱 에러 해결 위해 RIGHT → substring/length 치환 2025-10-11 03:37:46 +09:00
klaus 778f0c3ba2 fix(admin/charge): 통화별 리스트와 합계 행 추가 및 전체 합계 로직 수정
- 기존 로직은 통화 구분 없이 전체 합계를 계산·표시하여 통화가 혼재된 데이터에서 오해의 소지가 있었음.
- 관리 화면 요구사항: 통화(currency)별 합계를 명확히 제공.
2025-10-11 03:12:10 +09:00
klaus 38c50a4f8a fix(admin/charge): 통화별 리스트와 합계 행 추가 및 전체 합계 로직 수정
- 기존 로직은 통화 구분 없이 전체 합계를 계산·표시하여 통화가 혼재된 데이터에서 오해의 소지가 있었음.
- 관리 화면 요구사항: 통화(currency)별 합계를 명확히 제공.
2025-10-11 02:31:15 +09:00
klaus c497f321bb fix(admin-charge-status-detail): pgChargeAmount와 can의 가격을 가져와서 사용하는 로직을 제거하고 payment에 기록된 가격으로 계산하도록 수정 2025-10-10 23:32:36 +09:00
klaus 84c0768c8b fix(admin-charge-status): pgChargeAmount와 can의 가격을 가져와서 사용하는 로직을 제거하고 payment에 기록된 가격으로 계산하도록 수정 2025-10-10 22:31:36 +09:00
klaus efb8d8115f fix(verify-hecto): 데이터 검증시 가격비교 제거 2025-10-10 18:49:54 +09:00
klaus 41183b4648 fix(can-list): 국가별로 통화가 표시되도록 수정 2025-10-10 14:32:12 +09:00
klaus 36e20bf0d1 fix(payverse-webhook): orderId 비교 추가
- orderId와 chargeId 비교 로직 추가
2025-10-03 02:17:48 +09:00
klaus 0308e9ad83 fix(payverse): productName 비교 로직 제거
- productName에 +가 있는 경우 저장된 데이터와 검증을 위한 데이터가 다르게 나오기 때문에 비교 불가능
2025-10-03 02:10:30 +09:00
klaus 06c0374f16 사용하지 않는 print 제거 2025-10-03 01:56:55 +09:00
klaus c5bc610e2f webhook 호출 IP 확인을 위해 print 추가 2025-10-03 01:48:19 +09:00
klaus a86a24ca34 사용하지 않는 print 제거 2025-10-03 01:46:52 +09:00
klaus cb2e3ea581 fix(payverse-wehook): 한국 원화일 때와 USD일 때 mid 값이 달라야 하는데 성공 여부 비교시 원화 mid로 고정하여 비교하던 로직 수정 2025-10-03 01:29:59 +09:00
klaus 42eaf1d5e3 fix(payverse-verify): 결제 성공 여부 판단 로직 수정
- processingAmount 대신 requestAmount와 can 가격 비교
- productName, customerId 비교 추가
2025-10-03 01:25:27 +09:00
klaus 02ef706fc2 temp: 디버깅을 위해 print 추가 2025-10-03 00:57:50 +09:00
klaus 085b217abb fix(can): 이전 버전의 호환성을 위해 기존의 int price를 유지하도록 수정 2025-10-03 00:02:47 +09:00
klaus 0866e0972a 값 확인을 위해 추가했던 println 제거 2025-10-02 22:31:23 +09:00
klaus 4b13265737 fix(charge): payverseVerify 결제금액 비교로직 수정
- BigDecimal끼리 비교하는데 casting 로직이 추가되어 문제가 생기던 버그 수정
2025-10-02 22:23:06 +09:00
klaus 79cd2b8123 debug(charge): 해외결제 DEBUG를 위해 print 임시 추가 2025-10-02 20:40:34 +09:00
klaus 8cc9641bbf feat(charge): payloadJson의 amount
- 소수점 아래 불필요한 0을 제거
2025-10-02 20:29:49 +09:00
klaus 32935aed88 feat(charge): payloadJson의 amount
- 소수점 아래 불필요한 0을 제거
2025-10-02 19:59:04 +09:00
klaus c72adbfc4b temp(charge): 캔 리스트
- 해외 충전 테스트를 위해 전체 캔 리스트 표시
2025-10-02 19:56:23 +09:00
klaus bc378cc619 temp(charge): 캔 리스트
- 해외 충전 테스트를 위해 전체 캔 리스트 표시
2025-10-02 19:03:42 +09:00
klaus 6327a5d2bf feat(charge): 캔 충전시 통화(KRW, USD)별로 분기 처리 2025-10-02 18:59:52 +09:00
klaus 2ab2a04748 feat(can): 캔 응답 - String 형태 가격 필드 추가 2025-10-02 15:07:57 +09:00
klaus fb0a9e98a1 사용하지 않는 print 제거 2025-10-02 12:20:25 +09:00
klaus e45fe1bf10 feat: 일반 유저용 캔 리스트 조회 API 추가, GeoCountryFilter(GeoCountry.OTHER, GeoCountry.KR 구분용) 추가 2025-10-01 22:29:39 +09:00
klaus 3d852a8356 feat: 관리자용 캔 리스트 조회 API 추가 2025-10-01 22:16:44 +09:00
klaus b244944f41 feat: 캔 엔티티 currency - length 3으로 고정하여 CHAR(3)에 대응되도록 수정 2025-10-01 21:21:57 +09:00
klaus 3c7ba669e2 feat: Payment, AdTrackingHistory 엔티티 price - Decimal(10, 4)에 대응되도록 Column 추가 2025-10-01 21:08:35 +09:00
klaus 81e7e7129c feat: 캔 엔티티 currency - length 3으로 고정하여 CHAR(3)에 대응되도록 수정 2025-10-01 21:05:51 +09:00
klaus d7ad110b9e feat: 캔 등록/조회 - currency 추가 2025-10-01 20:55:52 +09:00
klaus 0c17ea2dcd fix: 캔 가격, Payment의 price 타입 Int, Double -> BigDecimal로 변경 2025-10-01 20:37:53 +09:00
klaus 78ff13a654 temp: 캔 가격 타입 Int -> Double로 변경 2025-10-01 16:07:34 +09:00
klaus 863c285049 fix: 불필요한 print 제거 2025-09-30 18:32:12 +09:00
klaus a3d74c0b57 fix: Payverse Webhook 엔드포인트에서 실제 클라이언트 IP를 가져올 수 있도록 수정 2025-09-30 18:22:46 +09:00
klaus 9016a72046 fix: ResponseStatusException이 ApiResponse로 래핑되지 않도록 수정
- 기본 에러 JSON 반환 유지
2025-09-30 18:16:13 +09:00
klaus 3c32614d1c temp(Exception): ResponseStatusException은 ApiResponse로 래핑하지 않고 그대로 전달 2025-09-30 17:59:55 +09:00
klaus 51988471cf temp(payverse): 호출되는 INBOUND_IP 확인하기 위해 출력 2025-09-30 17:55:31 +09:00
klaus 8990bd0722 fix(payverse): webhook 엔드포인트는 로그인 하지 않더라도 실행되도록 수정 2025-09-30 17:37:15 +09:00
klaus aab2417976 fix(payverse): print 제거 2025-09-30 17:22:39 +09:00
klaus 1bd6f8da4e fix(payverse): PVKR 카드 코드면 method를 "카드"로 저장 2025-09-30 17:02:02 +09:00
klaus 22bd1bf042 fix(payverse): 결제 payload에 customerId 길이 30자로 제한
- customerId를 sha1 기반 30자 이내로 생성하도록 변경하여 스펙 준수
- 불필요한 billkeyReq 제거
2025-09-26 16:51:54 +09:00
klaus d536a65fb4 fix(charge): payverse pg payload
- requestAmount의 값을 BigDecimal로 처리
2025-09-26 16:23:11 +09:00
klaus 03149a637d feat(charge): payverse pg - webhook API 추가 2025-09-25 21:18:45 +09:00
klaus bc6c05b3ea feat(charge): payverse pg - 충전/검증 API 추가 2025-09-25 20:37:39 +09:00
klaus 59ca353b25 feat(calculate-ratio): 정산 비율 삭제 URL 수정 2025-09-22 14:17:18 +09:00
klaus 6bc65ec412 feat(calculate-ratio): 정산 비율 조회 - 결과에 memberId 추가 2025-09-22 14:01:28 +09:00
klaus 97e95b51ab feat(calculate-ratio): 정산 비율 수정/삭제(소프트 삭제)와 업서트, 쿼리 보강
- deletedAt 기반 소프트 삭제 도입 및 restore/updateValues 추가
- 생성 시 기존(삭제 포함) 레코드 복구 후 값 갱신(업서트)
- /admin/calculate/ratio/update, /delete 엔드포인트 추가
- 정산 쿼리 조인에 deletedAt.isNull 적용하여 삭제 데이터 배제
- 목록/카운트 조회에서도 삭제 데이터 제외
2025-09-22 13:36:36 +09:00
klaus a6dfa81ba6 사용하지 않는 '지정 원작에 속한 활성 캐릭터 목록 조회 API' 제거 2025-09-18 22:49:35 +09:00
klaus dad517a953 feat(admin-character-list): 캐릭터 검색결과
- 캐릭터 목록과 동일한 내용으로 변경
2025-09-18 19:58:12 +09:00
klaus eb2d093b02 feat(admin-character-list): 캐릭터 검색에 페이징 추가 2025-09-18 19:29:34 +09:00
klaus 67186bba55 feat(original): 원작
- 원천 원작, 원천 원작 링크, 글/그림 작가, 제작사, 태그 추가
2025-09-18 18:04:59 +09:00
klaus edeecad2ce feat(original-app): 원작 리스트
- 페이징 추가
2025-09-15 16:00:09 +09:00
klaus 387f5388d9 feat(original-app): 원작 상세, 캐릭터 리스트
- 원작 상세에 캐릭터 20개 조회
- 지정 원작에 속한 활성 캐릭터 목록 조회 API 추가
2025-09-15 15:32:20 +09:00
klaus adcaa0a5fd fix(original): 캐릭터 수정
- 원작 ID가 0이 들어오면 캐릭터의 원작을 null로 처리한다.
2025-09-15 06:43:40 +09:00
klaus 47b2c1cb93 fix(original): 캐릭터 수정
- 원작 ID가 0이 들어오면 캐릭터의 원작을 null로 처리한다.
2025-09-15 06:17:55 +09:00
klaus 7f3589dcfb fix(original): 인기 캐릭터 조회
- 캐시 키 변경
2025-09-15 05:20:46 +09:00
klaus b134c28c10 feat(original): 관리자 캐릭터 상세 조회
- 원작 데이터 추가
2025-09-15 05:18:01 +09:00
klaus 41c8d0367d feat(original): 원작별 캐릭터 조회 API 추가 2025-09-15 00:31:14 +09:00
klaus 3b148d549e feat(original-app): 앱용 원작 목록/상세 API 및 조회 로직 추가
- 공개 목록 API: 미인증 사용자는 19금 비노출, 활성 캐릭터가 1개 이상 연결된 원작만 반환, 총개수+리스트 제공
- 상세 API: 로그인/본인인증 필수, 원작 상세+소속 활성 캐릭터 리스트 반환
2025-09-14 23:27:58 +09:00
klaus b6c96af8a2 feat(original): 원작 도메인과 캐릭터를 연결하기 위해 각각 검색 API 추가 2025-09-14 23:00:33 +09:00
klaus 4904625488 feat(original): 원작 도메인 추가, 관리자 CRUD/연결 API, 소프트 삭제, 서비스 계층 정비
- 원작 엔티티/레포지토리/관리자 API 구축(이미지 S3 업로드 포함)
- 캐릭터-원작 연관관계 및 관리자에서 배정/해제 API 제공
- 소프트 삭제(`isDeleted`) 도입 및 조회/수정/배정 로직에서 삭제 항목 필터링
- 컨트롤러-레포지토리 직접 접근 제거, `AdminOriginalWorkService`로 DB 접근 캡슐화
- 캐릭터 등록/수정에서 `originalWorkId` 지원 및 외부 API 업데이트 조건 분리
2025-09-14 22:33:30 +09:00
klaus 0574f4f629 feat(cache): 인기 캐릭터 조회에 윈도우 기반 동적 캐시 키 적용
- ChatCharacterService.getPopularCharacters()에 @Cacheable 추가
- 키: popular-chat-character:<windowStartEpoch>:<limit>
- 윈도우(매일 20:00 UTC) 전환 시 자동으로 신규 키 사용 → 전일 순위 캐시와 분리 보장

Why: 동일 윈도우 내 반복 요청의 DB 부하를 줄이고, 경계 전환 시 자연스러운 캐시 갱신을 보장.
2025-09-14 17:43:53 +09:00
klaus 4adc3e127c fix(popular): 일일 인기 캐릭터 집계 윈도우를 전날 완료 구간으로 고정
- UTC 20:00 경계 직후에도 [전날 20:00, 당일 20:00) 범위 사용으로 일일 순위 정확화
- RankingWindowCalculator.now(): lastBoundary 기반 [start, endExclusive) 계산
2025-09-14 17:28:33 +09:00
klaus dd0a1c2293 fix(chat-character): 인기 캐릭터
- 캐시 제거
2025-09-14 16:46:56 +09:00
klaus a07407417c fix(admin-chat-calculate): 캐릭터 정산 API
- ONLY_FULL_GROUP_BY 대응
- c2.image_path 집계식 적용
2025-09-13 05:01:52 +09:00
klaus e33e3b43b7 fix(admin-chat-calculate): 캐릭터 정산 API
- ONLY_FULL_GROUP_BY 대응
2025-09-13 04:33:01 +09:00
klaus 634bf759ca feat(admin-chat-calculate): 캐릭터 정산 API에 채팅 횟수 구매(CHAT_QUOTA_PURCHASE) 추가 2025-09-13 03:54:24 +09:00
klaus 0ed29c6097 feat(admin-chat-calculate): 캐릭터 정산 API에 imagePath를 imageHost를 포함한 url로 변경 추가 2025-09-13 03:20:26 +09:00
klaus b752434fbb feat(admin-chat-calculate): 캐릭터 정산 API에 totalCount 추가 2025-09-13 03:06:55 +09:00
klaus eec63cc7b2 feat(admin-chat-calculate): 캐릭터별 정산 조회 API 추가 2025-09-13 02:00:30 +09:00
klaus 3dc9dd1f35 feat(character): 최근 등록된 캐릭터 전체보기 API
- 반환 값에 전체 개수 추가
2025-09-12 19:00:45 +09:00
klaus 88e287067b feat(character): 최근 등록된 캐릭터 전체보기 API 추가 2025-09-12 18:37:25 +09:00
klaus 27a3f450ef fix(character): 인기 캐릭터 응답을 DTO로 변경하여 jackson 직렬화 오류 해결
- ChatCharacterService.getPopularCharacters 반환을 List<ChatCharacter> → List<Character> DTO로 변경
- 캐시 대상도 DTO로 전환(@Cacheable 유지, 동적 키/고정 TTL 그대로 사용)
- 컨트롤러에서 불필요한 매핑 제거(서비스가 DTO로 반환)
- Character DTO 직렬화 안정성 확보(@JsonProperty 추가)
- 이미지 URL 생성 로직을 서비스로 이동하고 imageHost(@Value) 주입해 구성
2025-09-11 18:53:27 +09:00
klaus 58a46a09c3 fix(character): SpEL 정적 호출 오류로 @JvmStatic 추가 2025-09-11 18:21:13 +09:00
klaus 83a1316a64 feat(character): UTC 20시 경계 기반 인기 캐릭터 집계 구현 및 캐시 적용
- 집계 기준을 "채팅방 전체 메시지 수"로 변경하여 캐릭터별 인기 순위 산정
- Querydsl `PopularCharacterQuery` 추가: chat_message → chat_participant(CHARACTER) → chat_character 조인
- 시간 경계: UTC 20:00 기준 [windowStart, nextBoundary) 구간 사용(배타적 종료 `<`)
- `ChatCharacterService.getPopularCharacters`에 @Cacheable 적용
  - cacheNames: `popularCharacters_24h`
  - key: `RankingWindowCalculator.now('popular-chat-character').cacheKey`
  - 상위 20개 기본, `loadCharactersInOrder`로 랭킹 순서 보존
- `RankingWindowCalculator`: 경계별 동적 키 생성(`popular-chat-character:{windowStartEpoch}`) 및 윈도우 계산
- `RedisConfig`: 24시간 TTL 캐시 `popularCharacters_24h` 추가(문자열/JSON 직렬화 지정)
- `ChatCharacterController`: 메인 API에 인기 캐릭터 섹션 연동

WHY
- 20시(UTC) 경계 변경 시 키가 달라져 첫 조회에서 자동 재집계/재캐싱
- 방 전체 참여도를 반영해 보다 직관적인 인기 지표 제공
- 캐시(24h TTL)로 DB 부하 최소화, 경계 전환 후 자연 무효화
2025-09-11 18:06:40 +09:00
klaus f05f146c89 fix(chat-quota): 유료 차감 후 무료·유료 동시 0일 때 next_recharge_at 설정 누락 수정
- 문제: 유료 잔여가 있을 때 유료 우선 차감 경로에서 `next_recharge_at` 설정 분기가 없어,
  무료/유료가 동시에 0이 되는 경우 다음 무료 충전 시점이 노출되지 않음
- 수정: `ChatRoomQuotaService.consumeOneForSend`의 유료 차감 분기에
  `remainingPaid==0 && remainingFree==0 && nextRechargeAt==null` 조건에서
  `now + 6h`로 `next_recharge_at`을 설정하도록 로직 추가
- 참고: 무료 차감 경로의 `next_recharge_at` 설정 및 입장 시 lazy refill 동작은 기존과 동일
2025-09-11 12:35:16 +09:00
klaus 3782062f4a fix(chat-room): 입장/전송 next 계산 보완 및 채팅 가능 시 next=null 처리
enter:
roomPaid==0 && roomFree>0 && global<=0 → 글로벌 next
roomPaid==0 && roomFree==0 → (global<=0) ? max(roomNext, globalNext) : roomNext
채팅 가능(totalRemaining>0)인 경우 next=null 반환(유료>0 포함)
send:
totalRemaining==0 && global<=0 → max(roomNext, globalNext)
채팅 가능(totalRemaining>0)인 경우 next=null 반환
2025-09-10 13:31:27 +09:00
klaus fd83abb46c feat(chat): 글로벌/방 쿼터 정책 개편, 결제/조회/차단/이관 로직 반영
글로벌: 무료 40, UTC 20:00 lazy refill(유료 제거)
방: 무료 10, 무료 0 순간 now+6h, 경과 시 lazy refill(무료=10, next=null)
전송: 유료 우선, 무료 사용 시 글로벌/룸 동시 차감, 조건 불충족 예외
API: 방 쿼터 조회/구매 추가(구매 시 30캔, UseCan에 roomId:characterId 기록)
next 계산: enter/send에서 경계 케이스 처리(max(room, global))
대화 초기화: 유료 쿼터 새 방으로 이관
2025-09-09 22:42:14 +09:00
klaus a9d1b9f4a6 fix(character): 캐릭터 상세 조회 응답에 MBTI·성별·나이 필드 추가
- CharacterDetailResponse에 gender, age 필드 추가
- ChatCharacterController에서 gender, age 매핑
- 기존 엔티티(ChatCharacter)의 gender/age 활용
2025-09-05 16:55:50 +09:00
klaus ad69dad725 fix(character-image): 리스트 응답 ownedCount에 프로필(+1) 반영
프로필 이미지는 무료로 항상 열람 가능하므로 보유 개수(ownedCount)에도
프로필 1장을 포함하도록 수정했습니다. 이를 통해 전체 개수(totalCount)와
보유 개수 산정 기준이 일관되게 맞춰집니다.
2025-09-01 16:33:53 +09:00
klaus 2f55303d16 feat(admin-curation): 리스트 정합성 개선 및 활성 캐릭터 수 DB 집계 적용
- 비활성(삭제) 큐레이션을 목록에서 제외: findByIsActiveTrueOrderBySortOrderAsc 사용
- 리스트 항목에 characterCount 추가 및 DB GROUP BY + COUNT로 직접 집계
- CharacterCurationMappingRepository: 집계용 프로젝션(CharacterCountPerCuration)과 countActiveCharactersByCurations 쿼리 추가
- CharacterCurationAdminService: listAll에서 집계 결과를 활용해 characterCount 매핑 (대량 엔티티 로딩 제거)
- CharacterCurationRepository: findMaxSortOrder 쿼리로 신규 등록 정렬 순서 계산에 활용
- 컨트롤러: 캐릭터 리스트 응답 DTO(CharacterCurationCharacterItemResponse) 사용, 이미지 URL은 CloudFront host + imagePath로 조립
2025-09-01 14:06:01 +09:00
klaus 3a9128a894 fix(character): 추가 정보 증분 업데이트 적용 및 값 필드 가변화
- 왜: 기존에는 추가 정보(memories, personalities, backgrounds, relationships) 수정 시 전체 삭제 후 재생성되어 변경 누락/DB 오버헤드가 발생함
- 무엇:
  - Memory/Personality/Background 값 필드(content/description/emotion)를 var로 전환해 in-place 업데이트 허용
  - 서비스 레이어에 증분 업데이트 로직 적용
    - 요청에 없는 항목만 제거, 기존 항목은 값만 갱신, 신규 키만 추가
    - relationships는 personName+relationshipName 복합 키 매칭(keyOf)으로 필드만 갱신
  - ChatCharacter 컬렉션에 orphanRemoval=true 설정하여 iterator.remove 시 고아 삭제 보장
  - updateChatCharacterWithDetails에서 clear/add 제거 → 증분 업데이트 메서드 호출로 변경
- 효과: DELETE+INSERT 제거로 성능 개선, ID/createdAt 유지로 감사 추적 용이, 데이터 정합성 향상
2025-09-01 12:29:26 +09:00
klaus def6296d4d fix(chat-character): 캐릭터 등록/수정 API
- 재시도 규칙 제거
2025-09-01 11:03:46 +09:00
klaus 034472defa fix(chat-character): DB에서 speechStyle type을 varchar에서 text로의 변경에 따라 @Column(columnDefinition = "TEXT") 추가 2025-08-29 01:38:49 +09:00
klaus 550e4ac9ce fix(character-main): 최근 대화 캐릭터 조회에서 roomId 대신 characterId 반환 2025-08-28 19:50:20 +09:00
klaus d26e0a89f6 feat(admin-curation): 큐레이션 캐릭터 다중 등록 및 검증 로직 개선
- 중복 ID 제거 및 0 이하 ID 필터링
- 조회 단계에서 활성 캐릭터만 조회하여 검증 포함
- 존재하지 않거나 비활성인 캐릭터는 건너뛰고 나머지만 등록
- 기존 매핑 있는 캐릭터는 무시, 다음 정렬 순서(nextOrder)로 일괄 추가
2025-08-28 19:22:31 +09:00
klaus 6767afdd35 feat(character-curation): 캐릭터 큐레이션 도메인/관리 API 추가 및 메인 화면 통합
- CharacterCuration/CharacterCurationMapping 엔티티 추가
- 리포지토리/서비스(조회·관리) 구현
- 관리자 컨트롤러에 등록/수정/삭제/정렬/캐릭터 추가·삭제·정렬 API 추가
- 앱 메인 API에 큐레이션 섹션 노출
- 정렬/소프트 삭제/활성 캐릭터 필터링 규칙 적용
2025-08-28 17:39:53 +09:00
klaus a58de0cf92 feat(chat-room-list): 이미지 메시지면 최근 메시지를 [이미지]로 표시 2025-08-28 02:33:04 +09:00
klaus df93f0e0ce feat(chat-quota): 30캔으로 충전시 유료 채팅 횟수
- 50 -> 40으로 변경
2025-08-28 00:22:15 +09:00