Commit Graph

1405 Commits

Author SHA1 Message Date
김보곤
3f4cd88c20 feat:영상 파일 GCS 저장 및 삭제 연동
- VideoGenerationJob: 최종 합성 후 GCS 업로드, gcs_path 저장
- Veo3Controller: download/preview GCS 서명URL 사용, destroy GCS 파일 삭제
- VideoGeneration 모델: gcs_path fillable 추가
- GCS 불가 시 로컬 파일로 폴백

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 11:11:18 +09:00
김보곤
5e4a9c9291 fix:이력 삭제 시 로컬 영상 파일도 함께 삭제
- DB 레코드만 삭제하던 것을 storage/app/video_gen/{id}/ 디렉토리도 삭제
- 클립, 나레이션, BGM, 최종 영상 등 모든 작업 파일 정리

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 11:04:58 +09:00
김보곤
5985b88398 feat:생성이력에 서울시간 표기 + 제작시간 열 추가
- 날짜→생성일시: KST(Asia/Seoul) 기준 MM/DD HH:mm 형식
- 제작시간 열 추가: created_at~updated_at 차이 계산 (완료/실패 시)
- 진행 중인 항목은 "진행 중" 표시
- history API에 updated_at 추가 반환

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 11:03:37 +09:00
김보곤
60edc28a17 fix:한국인 여성 캐릭터 고정 + 나레이션-영상 싱크 버그 수정
- Gemini 프롬프트: visual_prompt에 한국인 여성(20대) 등장인물 규칙 추가
- Veo 프롬프트: 모든 클립에 "Korean woman in her 20s" 프리픽스 자동 추가
- 싱크 버그: activeNarrationPaths 인덱스 off-by-one ($num-1→$num) 수정
  - 나레이션이 영상보다 1장면 앞서 재생되던 근본 원인
- concatNarrations: atrim+apad로 나레이션을 장면 길이에 정확히 매칭

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 10:50:51 +09:00
김보곤
01efd99004 fix:자막 중앙배치+크기2배, TTS 볼륨 증가, BGM 앰비언트 자동생성
- 자막: 하단→중앙(Alignment=5), 48→96pt, 외곽선 5px, 줄바꿈 12자
- TTS: 나레이션 볼륨 1.0→2.0 (2배 증가)
- BGM: 무음 대신 분위기별 앰비언트 화음 자동생성 (FFmpeg aevalsrc)
- BGM 볼륨: 0.15→0.4 (나레이션 방해 안 하는 수준)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 10:45:22 +09:00
김보곤
a72ca314d1 docs:Google API 비용 모니터링 & 결제 가이드 문서 추가
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 10:38:27 +09:00
김보곤
8d8fa2da0a feat:생성 이력 체크박스 선택 삭제 기능 추가
- 이력 테이블 첫 열에 체크박스 추가 (전체 선택/해제)
- 선택 시 상단에 빨간색 삭제 버튼 표시
- DELETE /video/veo3/history API 엔드포인트 추가
- 삭제 후 이력 목록 자동 새로고침

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 10:26:37 +09:00
김보곤
bbedb67817 fix:Queue retry_after 90초→1860초 (영상생성 Job 타임아웃 방지)
영상 생성 Job이 10~20분 소요되는데 retry_after=90초로 설정되어
DB 큐 드라이버가 Job을 "멈춤"으로 판단하여 재시도 → tries 초과 실패
retry_after를 Job timeout(1800초)보다 크게 설정하여 해결

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 10:22:47 +09:00
김보곤
fb69877330 fix:영상 클립 RAI 필터링 대응 (재시도 + 건너뛰기)
- VeoVideoService.waitAndSave() 반환값을 array로 변경 (실패 원인 포함)
- 클립 생성 실패 시 프롬프트 수정 후 자동 재시도
- 재시도 실패 시 해당 장면 건너뛰고 나머지로 합성 진행
- 성공 클립이 절반 미만일 때만 전체 실패 처리
- 건너뛴 장면의 나레이션/자막 자동 필터링

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 10:01:32 +09:00
김보곤
cff3adfd6d fix:Veo 3.1 API 폴링 엔드포인트 수정 (fetchPredictOperation)
- GET /v1/{operationName} → POST fetchPredictOperation 변경
- 응답 구조 predictions → response.videos 수정
- 연속 5회 HTTP 에러 시 조기 중단 로직 추가
- 30초 간격 대기 로그 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 09:44:23 +09:00
김보곤
5ed10104e3 fix:영상 생성 진행 상태 UI 대폭 개선
- 경과 시간 실시간 표시 (초 단위 타이머)
- 단계별 타임라인 (Queue 대기 → TTS → 영상 → BGM → 합성)
- 프로그레스 바 shimmer 애니메이션 (작동 중 표시)
- 2분간 변화 없으면 경고 배너 표시
- 폴링 횟수 & 서버 마지막 업데이트 시간 표시
- status API에 updated_at/created_at 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 09:05:09 +09:00
김보곤
8a6f3f20c9 fix:Gemini 3.0 Flash 모델 적용 + 제목 선택 UI/UX 개선
- 기본 모델을 gemini-3.0-flash로 변경
- @apply를 순수 CSS로 전환 (Tailwind CDN 호환)
- 제목 카드에 라디오 도트, 체크 뱃지, hover/selected 효과 추가
- 선택 시 border glow + 체크마크 표시

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 08:56:02 +09:00
김보곤
0c8b1c8f60 fix:Veo3Controller tenant_id를 session 기반으로 변경
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 08:52:40 +09:00
김보곤
2fbbaad713 fix:GeminiScriptService를 AiConfig(DB) 기반으로 연결
- .env API 키 대신 시스템 > AI 설정의 활성 Gemini 설정 사용
- API Key / Vertex AI(서비스 계정) 방식 자동 분기 지원

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 08:50:26 +09:00
김보곤
6ab93aedd2 feat:YouTube Shorts AI 자동 생성 시스템 구현 (Veo 3.1 + Gemini)
- GeminiScriptService: 트렌딩 제목/시나리오 생성
- VeoVideoService: Veo 3.1 영상 클립 생성
- TtsService: Google TTS 나레이션 생성
- BgmService: 분위기별 BGM 선택
- VideoAssemblyService: FFmpeg 영상 합성
- VideoGenerationJob: 백그라운드 처리
- Veo3Controller: API 엔드포인트
- React 프론트엔드 (5단계 위저드)
- GoogleCloudService.getAccessToken() public 변경

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 08:46:28 +09:00
김보곤
9714dedd04 feat:홈택스 세금계산서 자동 증분 동기화
페이지 로드 시 바로빌 API를 백그라운드에서 호출하여 신규 데이터를 자동 동기화.
수동 데이터소스 토글/저장 버튼 제거, 항상 로컬 DB에서 즉시 표시 후 증분 동기화.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 22:24:19 +09:00
김보곤
0dbfb0b62e fix:수당 안내서 PPTX '주일/경동' → 'SAM'으로 변경
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 20:28:01 +09:00
김보곤
f26934eb61 fix:수당 안내서 PPTX 대외비 표시 및 협업지원금 표현 순화
- 전 슬라이드에 빨간색 'CONFIDENTIAL/대외비' 스탬프 추가
- 표지에 '사내 대외비 문서' 보안 경고문 추가
- 협업지원금 설명을 '내부 복리후생 지원제도'로 순화
- '생계 보조' → '안정적 파트너십 유지를 위한 내부 지원'으로 변경
- 유의사항(필독) 섹션 추가: 외부 유출 금지 명시
- 보안 유의사항 슬라이드(8번) 신규 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 20:21:59 +09:00
김보곤
e8c74dee99 docs:영업파트너 수당 안내서 PPTX 생성
개인/단체 파트너 수당 체계를 설명하는 7슬라이드 PPTX 자료:
표지, 수당 체계 비교, 개인/단체 상세, 협업지원금 설명, 계산 예시, 지급 절차 요약

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 20:17:08 +09:00
김보곤
d7d4eb0926 fix:협업지원금 개념 반영 (개인 파트너도 유치자에게 3% 지급)
- createCommission: 개인 파트너도 parent_id → SalesPartner 조회하여 3% 협업지원금 계산
- 대시보드: "유치수당" → "협업지원금" 카드 이름 복원
- 본사 총 수당 구조: 개인 28%(20+5+3), 단체 33%(30+0+3)
- 변경 보고서 v2 업데이트

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 20:02:56 +09:00
김보곤
fcbeccb4db docs:단체(그룹) 수당 체계 통합 변경 보고서 추가
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 19:49:39 +09:00
김보곤
f1f31d5f70 feat:단체(그룹) 수당 체계 통합 (단체 30%, 유치 3%, 매니저 0%)
- SalesPartner: referrer_partner_id, referrer/referredGroups 관계, isGroup() 헬퍼
- SalesCommission: 유치수당 필드, referrerPartner 관계, 지급 추적 메서드
- SalesCommissionService: 단체/개인 분기 수당 계산 로직
- SalesManagerService: 단체 등록 시 수당률 자동 설정
- SalesManagerController: 유형 선택 및 유치 파트너 지정 기능
- 대시보드: 유치수당 카드 표시 및 합산
- UI: purple 색상 처리 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 19:42:51 +09:00
김보곤
eafd81d97a feat:파트너 검색에 포지션(역할) 필드 추가
- searchPartners 역할 필터를 sales만 → sales/manager 모두 포함하도록 확장
- 사용자 역할(영업파트너/상담매니저)을 position 필드로 API 응답에 추가
- handlePartnerSelect에 position 매핑 추가 (key: position, label: 포지션/직책/역할)
- PartnerSearchModal 검색 결과에 position 배지 표시

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 18:07:16 +09:00
김보곤
823916aa1d feat:새 계약 생성 비밀유지서약서 테스트 데이터 번개 버튼 추가
- 기존 번개(노란색): 영업파트너 계약서 테스트 데이터
- 새 번개(보라색): 비밀유지서약서 테스트 데이터
- 개발 편의를 위한 관리자 전용 퀵필 버튼

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 17:46:45 +09:00
김보곤
66abdc31e5 feat:템플릿 카드에서 PDF/Word 파일 직접 교체/추가 기능
- 템플릿 카드의 PDF 표시 영역에 '교체' 버튼 추가
- PDF 미연결 템플릿에 'PDF/Word 파일 추가' 버튼 표시
- 카드에서 직접 파일 선택 → 업로드 → 즉시 반영
- PDF/DOC/DOCX 지원 (서버에서 자동 PDF 변환)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 17:31:36 +09:00
김보곤
a7aa2e2cd2 fix:E-Sign 알림톡 certKey 버그 수정 및 발송 상태 추적 기능 추가
- sendATKakaotalkEx() 호출 시 존재하지 않는 certKey 파라미터 제거 (TypeError 버그)
- sendAlimtalk/dispatchNotification 결과 반환 (void → array)
- send/remind 응답에 notification_results 포함
- 감사 로그 metadata에 서명자별 알림 발송 결과 저장
- EsignPublicController 다음 서명자/완료 알림에도 동일 수정 적용
- detail.blade.php: 발송 방식 배지, 서명자 연락처, 알림 오류 배너, 활동 로그 발송 결과 표시
- send.blade.php: 발송 후 알림 실패 시 경고 메시지 표시

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 17:01:14 +09:00
김보곤
bea7bd5987 feat:전자계약 알림톡 발송 방식 선택 기능 추가
- EsignApiController: send_method/sms_fallback 저장, dispatchNotification/sendAlimtalk 메서드 추가
- EsignPublicController: 완료/다음서명자 알림에 알림톡 지원 추가
- EsignContract 모델: send_method, sms_fallback fillable/casts 추가
- send.blade.php: 발송방식 선택 UI (알림톡/이메일/동시), SMS 대체발송, 연락처 확인

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 16:12:41 +09:00
김보곤
33871e3240 feat:사이드바 메뉴 전체 접기/펼치기 버튼 추가
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 14:54:33 +09:00
김보곤
7eb761af41 feat:메뉴관리 전체 접기/펼치기 토글 버튼 추가
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 14:52:09 +09:00
김보곤
04461e57f5 fix:메뉴관리 하위메뉴 중복 문서아이콘 제거, 실제 아이콘은 전체 표시
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 14:48:47 +09:00
김보곤
1ddf6032d2 fix:메뉴관리 테이블 아이콘을 상위 그룹만 표시
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 14:47:12 +09:00
김보곤
bb9c1f94d6 feat:메뉴관리 테이블에 아이콘 표시 추가
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 14:43:00 +09:00
김보곤
bd6f1c4b60 feat:카카오톡 사용법 가이드 페이지 추가
- 알림톡/친구톡 비교, 준비사항, 채널/템플릿/발송/전송내역 사용법
- FAQ 섹션 포함 (초보자 친화적 설명)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 14:34:45 +09:00
김보곤
d69f4ef5d3 feat:바로빌 카카오톡(알림톡/친구톡) 서비스 구현
- BarobillService에 KAKAOTALK SOAP 클라이언트 추가
  - 채널/템플릿 관리, 알림톡/친구톡 발송, 전송조회/예약취소 API
- BarobillKakaotalkController (API) 생성: 15개 엔드포인트
- KakaotalkController (페이지) 생성: 5개 페이지
- 라우트 등록 (web.php, api.php)
- Blade 뷰 5개 생성: 대시보드, 채널관리, 템플릿관리, 발송, 전송내역

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 14:11:15 +09:00
김보곤
70bfccf5fb fix:전자서명 필드 위치 설정/복사 시 field_value 누락 수정
configureFields()와 copyFieldsFromContract()에서 기존 필드를
삭제 후 재생성할 때 field_value를 설정하지 않아 계약서 PDF에
서명자명, 날짜 등 기본값이 빠지는 문제 수정.
buildVariableMap()으로 변수 맵을 구성하여 값을 채우도록 개선.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 13:27:38 +09:00
김보곤
9cde5f56f0 fix:OTP 이메일에 코드 복사 편의 영역 추가
이메일에서는 JavaScript가 차단되므로 클립보드 버튼 대신
user-select:all로 터치/클릭 시 전체 선택되는 복사 영역 추가.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 13:22:01 +09:00
김보곤
36627b976d fix:전자서명 done 페이지 계약/서명자 정보 표시 수정
getContract API가 항상 데이터를 반환하되 is_signable 플래그로
서명 가능 여부를 전달하도록 변경. done 페이지에서 signed/completed
상태의 계약도 정상적으로 정보를 표시할 수 있도록 수정.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 13:18:17 +09:00
김보곤
489b65410e fix:전자서명 getContract API에 계약/서명자 상태 체크 추가
취소/거절/완료된 계약이나 이미 서명한 서명자가 서명 페이지에
접근할 때 즉시 명확한 에러 메시지를 표시하도록 개선.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 13:14:33 +09:00
김보곤
8fe03b57f4 feat:전자서명 문서 다운로드 시 미리보기 PDF 제공 (서명/도장 제외 필드 합성)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 12:57:29 +09:00
김보곤
992f28ba33 fix:전자서명 서명/확인 단계 버튼 위치 수정 (서명란 바로 아래로)
- flex-1 제거하여 카드가 화면 전체를 채우지 않도록 변경
- 이전/서명확인 버튼이 서명 입력란 바로 아래에 위치

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 12:49:17 +09:00
김보곤
8cfc44bf45 fix:영업파트너 수정 모달 validation 에러 표시 추가
- 폼을 AJAX 제출로 변경하여 422 에러 시 모달 내 에러 메시지 표시
- innerHTML로 로드된 script 태그 수동 실행 처리
- 컨트롤러에 JSON 응답 지원 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 12:47:41 +09:00
김보곤
29b40ad2bc fix:사업자 정보 미입력 시 불필요한 SalesPartner 레코드 생성 방지
- 기존 레코드가 있거나 실제 값이 입력된 경우에만 저장
- SoftDelete 스코프 충돌 방지를 위해 where 쿼리로 변경

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 11:56:40 +09:00
김보곤
0eb4baffef fix:updateSalesPartner의 partner_type도 'individual'로 수정
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 11:17:24 +09:00
김보곤
c9e8ae5dd4 fix:SalesPartner partner_type을 enum 유효값 'individual'로 수정
- 'sales'는 enum('individual','corporate')에 없는 값이라 DB 저장 실패
- create/update 모두 'individual'로 변경

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 11:15:59 +09:00
김보곤
7e9dec8bd3 feat:영업파트너 등록/수정에 사업자 정보(상호, 사업자등록번호, 주소) 필드 추가
- 컨트롤러 store/update 유효성 검사에 3개 필드 추가
- 서비스 create/update에서 SalesPartner 레코드 생성/업데이트
- 등록 폼(create.blade.php)에 사업자 정보 섹션 추가
- 수정 모달(edit-modal.blade.php)에 사업자 정보 섹션 추가
- 테스트 데이터 자동입력에 사업자 정보 포함

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 11:11:32 +09:00
김보곤
2fdf151c14 fix:영업파트너 검색을 sales 역할 기반으로 변경
- whereHas('salesPartner') → whereHas('userRoles') + role.name='sales'
- 현재 테넌트의 sales 역할을 가진 활성 사용자만 검색

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 11:00:37 +09:00
김보곤
72ce6980a7 fix:영업파트너 모달 높이 고정+스크롤 적용, salesPartner 레코드 보유자만 검색
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 10:55:05 +09:00
김보곤
92c78b353e feat:E-Sign 계약 생성 영업파트너 검색 모달 추가
- EsignApiController에 searchPartners() 검색 API 추가
- SalesPartner 모델 $fillable에 company_name, biz_no, address 추가
- User 모델에 salesPartner() HasOne 관계 추가
- create.blade.php에 PartnerSearchModal 컴포넌트 + 자동채우기 로직 추가
- web.php에 search-partners 라우트 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 10:48:31 +09:00
김보곤
e0627e04ac fix:select padding-right !important로 Tailwind 클래스 우선순위 문제 해결
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 10:32:36 +09:00
김보곤
027d880df7 fix:select 드롭다운 텍스트-화살표 겹침 방지 전역 CSS 추가
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 10:30:05 +09:00