Commit Graph

296 Commits

Author SHA1 Message Date
b3385e7df2 docs(db): 마이그레이션 파일명 날짜 형식 통일 및 marketing 공식 링크 컬럼 추가 2026-08-24 14:46:12 +09:00
6d46614dcd feat(ssulbox): 공식 링크 오버레이 추가 및 AI 브리핑 대기 제거 2026-08-24 13:44:45 +09:00
934410a83b Merge branch 'main' into feature-ssulbox: SAS 재생 URL·공식 링크 응답 반영 2026-08-24 11:20:46 +09:00
ac7e4bde9f fix(video): 재생 URL에 SAS 토큰을 붙여 영상 seek 안 되는 문제 수정 2026-08-24 10:16:40 +09:00
6197fcdc91 fix(crawling): homepages를 GraphQL 대신 __APOLLO_STATE__에서 추출
placeDetail(base)의 homepages 필드는 스키마에 없어 전체 크롤링이
400으로 실패했다(컨테이너 검증 완료). 쿼리에서 제거하고, WTM 우회용
브라우저가 이미 로드하는 place 페이지의 __APOLLO_STATE__ JSON을 캡처해
대표(repr) 링크를 추출한다. 브라우저 캡처 실패 시 HTML 직접 파싱으로
보충한다(직접 요청은 429로 막히는 환경이 있어 best-effort).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVSeUT2pEmeHc6hG6gVXUS
2026-08-21 11:30:01 +09:00
87cb3eb3cb fix(db): create_db_tables 목록에 Comment·VideoReaction 테이블 추가
신규 DB 셋업 시 두 테이블이 생성되지 않아 /video/all 등 댓글·좋아요
조회가 즉시 실패하던 누락을 보완한다.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVSeUT2pEmeHc6hG6gVXUS
2026-08-21 11:12:20 +09:00
98c6515192 feat(marketing): 직접 입력 경로에 official_site_url 입력 지원
POST /marketing 요청에 official_site_url(선택, 기본 null)을 추가한다.
http/https 스킴만 허용하고 2048자 초과는 422로 거부하며, 값이 있으면
marketing.official_site_url에 저장돼 기존 영상 조회 응답에 그대로 노출된다.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVSeUT2pEmeHc6hG6gVXUS
2026-08-21 10:57:42 +09:00
1ef8e82638 feat(crawling): 업체 공식 링크 수집·저장 및 official_site_url 응답 연동
- 네이버 placeDetail GraphQL base에 homepages 필드 추가, 대표(repr)
  링크 우선으로 살아있는 URL을 추출한다 (실서비스 응답 구조 확인 완료)
- marketing 테이블에 official_site_url 컬럼 추가: 크롤링 시 플레이스
  홈페이지 항목을 저장하고, 없으면 유저가 입력한 크롤링 소스 URL을 저장
- GET /video/{id}, /video/all의 official_site_url은 저장값 우선,
  컬럼 도입 전 기존 행은 place_id 기반 플레이스 URL로 폴백
- 기존 테이블에는 수동 마이그레이션 필요:
  ALTER TABLE marketing ADD COLUMN official_site_url VARCHAR(2048) NULL
  COMMENT '업체 공식 링크' AFTER place_id;

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVSeUT2pEmeHc6hG6gVXUS
2026-08-21 10:49:46 +09:00
61bdc27cd3 feat(video): 영상 응답에 official_site_url 필드 추가
GET /video/{id}와 GET /video/all 응답에 업체 공식 페이지 URL을 추가한다.
Project.marketing_intelligence → MarketingIntel.place_id("nv{place_id}")를
경유해 네이버 플레이스 URL로 복원하며, 크롤링 없이 직접 입력된 업체는
null로 내려간다.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVSeUT2pEmeHc6hG6gVXUS
2026-08-21 10:44:44 +09:00
9d40313fbb fix: 페이스북 공유하기 수정 2026-08-21 08:48:08 +09:00
1b982b6ae1 fix: 공유하기 수정 2026-08-20 16:35:19 +09:00
009bdbfe73 fix: 카카오 공유하기 수정 2026-08-20 15:58:25 +09:00
a727d4f1ac fix: 공유 미리보기가 깨지던 오류 수정 2026-08-20 13:39:17 +09:00
048a8f36a8 fix: 썰박스 포스터·SNS 메타데이터 생성 및 공유 미리보기 수정 2026-08-20 13:21:43 +09:00
5fcb964d7f fix: 공유하기 기능 수정 2026-08-20 10:34:12 +09:00
e47a97476d feat(ssulbox): SNS 제목·설명·태그를 ssul_content에 저장
영상과 같이 업로드·SEO 결과를 행에 남기고, 다음 요청부터는 DB 값을 쓴다.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-19 15:31:44 +09:00
fde48e8674 Merge branch 'main' into feature-ssulbox
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-19 15:25:13 +09:00
a2d84421d2 feat(video): 제목·설명·해시태그를 영상 완료 시 DB에 저장
업로드 시점 Redis SEO 캐시 대신 video 행을 기준으로 두고, 게시 시에만 변경분을 갱신한다.
2026-08-19 10:17:22 +09:00
c7149deb1f fix: 배포환경에 맞게 공유URL 적용되도록 수정 2026-08-18 17:23:50 +09:00
51ef659f16 fix:공유하기 기본이미지 + 내용 2026-08-18 14:55:32 +09:00
1507a0f859 feat(archive): 영상 목록 조회에 내 좋아요 여부(is_liked_by_me) 포함 2026-08-18 11:02:19 +09:00
11c358da3c feat(video): 영상 공유용 Open Graph 페이지 라우트 추가 2026-08-18 11:02:15 +09:00
701f0542da refactor(ssulbox): ssul_content.thumbnail_url 컬럼명을 poster_url 로 변경 2026-08-14 15:52:52 +09:00
8e9e12fe0b feat(video): 영상 첫 프레임 썸네일 생성 및 저장 2026-08-13 17:23:06 +09:00
bb8b20a7a9 Merge branch 'main' into feature-ssulbox 2026-08-12 15:42:53 +09:00
4c4297c37a fix(creatomate): 슬롯명이 명명 규칙을 어겨도 썸네일·태그 배정이 폴백되도록 수정 2026-08-12 15:31:02 +09:00
b04e239344 refactor: 크롤링/업로드 로그를 요청당 1줄 요약으로 축소
- 단계별 진행 로그를 삭제하고 계측치를 SUCCESS 한 줄에 통합
- 실패 경로(error/warning/exception) 로그는 그대로 유지
- gpt_status 를 locals() 검사 대신 초기화 후 직접 참조
2026-08-12 13:21:47 +09:00
f87cd07d5e feat(home): 이미지 업로드에 크기·개수 상한과 task 직렬화 락 도입 2026-08-11 17:06:21 +09:00
e1dca36d21 feat(generator): 카메라 모션을 media.py 로 통합하고 스토리보드가 컷별로 선택하도록 확장 2026-08-11 15:01:23 +09:00
434d0ca9c0 chore(generator): 이미지 모델을 flash 로 낮추고 오디세이 캡션 프롬프트 제거 2026-08-11 11:03:04 +09:00
459099998e feat(ssulbox): 업장 검색을 ADO2 방식으로 전환하고 URL 해석을 워커로 이관 2026-08-11 11:03:04 +09:00
50dc7af5bc feat(ssulbox): SNS 업로드 제목·설명·태그 자동 생성 2026-08-11 11:03:04 +09:00
fb8febe462 feat: 좋아요·댓글·SNS 업로드를 콘텐츠 종류 공용으로 통합 2026-08-11 11:03:03 +09:00
ed1ba71bfe refactor(ssulbox): 자동 마이그레이션 제거, DDL 을 수동 문서로 이관 2026-08-11 11:03:03 +09:00
666c3bf6d1 feat(ssulbox): 썰박스 생성 파이프라인 통합 및 콘텐츠 목록 UNION 2026-08-11 11:03:03 +09:00
8096837b13 유튜브 네트워크 오류 재시도 설정 추가 2026-07-28 16:07:08 +09:00
5903211eb9 fix: Meta 전환 이벤트 IP 추출 정확도 개선 및 첫 영상 백필 마이그레이션 추가
- _extract_client_ip를 X-Real-IP → X-Forwarded-For → 소켓 peer 순으로
  후보를 순회하며 공인 IP만 반환하도록 변경. 사설/루프백 대역(Docker 172.x,
  127.0.0.1 등)은 Meta가 폐기해 매개변수 전송률만 떨어뜨리므로 전송 생략
- X-Forwarded-For 맨 앞 항목은 클라이언트 위조가 가능하므로 단순 첫 항목
  사용을 중단하고, nginx가 덮어쓰는 X-Real-IP를 우선 사용
- 기존 회원의 first_video_created_at 백필 SQL 추가.
  신규 컬럼이라 전원 NULL이어서 배포 후 기존 회원이 영상을 추가 생성하면
  FirstVideoCreated가 오발화되는 문제 방지 (배포 전 실행 필요)
2026-07-28 09:34:27 +09:00
68fc5ebca6 Merge branch 'main' into feature-meta 2026-07-27 15:27:46 +09:00
cb8485ecd5 fix: 도메인 예외 롤백 로깅 개선 및 영상 생성 템플릿 배정 일관성 수정
- get_session에서 SocialException/DashboardException을 별도로 처리하여
  정상 플로우인 도메인 예외는 ERROR traceback 없이 warning 롤백 로그만 남기도록 수정
- generate_video 호출 시 CreatomateService에 project_id를 전달하여,
  미매핑 업종(general 등)의 템플릿 분배가 사전 이미지 배정 단계와
  동일한 템플릿을 사용하도록 일관성 확보
2026-07-27 11:21:01 +09:00
cbc3f47b54 fix: 썸네일 슬롯 매칭 개선, 가사 스키마 오류 수정, 롤백 로그 레벨 조정
- creatomate: 썸네일 슬롯 한정 subject 일치 시 space_type 페널티 면제,
  subject 가중치 상향 (2.0 → 3.0)
- lyric 스키마: 트레일링 콤마로 tuple이 되어버린 필드 정의 수정,
  중복 genre 필드 제거
- session: 4xx 도메인 예외 롤백 로그를 traceback 없는 WARNING으로 완화

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-24 13:11:46 +09:00
73b05f5cca feat: Meta 전환 추적(CAPI) 및 UTM 어트리뷰션 추가
- Meta Conversions API 클라이언트 추가 (app/utils/meta_capi.py)
- 전환 추적 라우터 추가 (/tracking/meta/first-video-created,
  /tracking/meta/complete-registration) 및 main.py 등록
- User 모델에 전환 1회 판정 컬럼(first_video_created_at,
  registration_tracked_at) 및 가입 시점 first-touch UTM 컬럼 5종 추가
- 카카오 콜백 리다이렉트 URL에 is_new_user 파라미터 추가
  (프론트가 신규 가입 시에만 CompleteRegistration 발화하도록)
- MetaConversionSettings 설정 추가 (FACEBOOK_PIXEL_ID,
  FACEBOOK_ACCESS_TOKEN, FACEBOOK_TEST_EVENT_CODE)
- DB 마이그레이션 SQL 2건 추가 (docs/database-schema/)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-24 10:28:37 +09:00
6090d500f9 썸네일 선택 로직 및 필터링 추가 2026-07-22 15:54:34 +09:00
788e76ef76 번역오류 수정 및 CTA적용 2026-07-21 13:56:40 +09:00
a253c5dd3a 썸네일 적용 2026-07-16 15:44:24 +09:00
153484f2bd 썸네일 생성 기능 추가 2026-07-16 13:37:13 +09:00
7ec9e9749d 제미나이 gpt로 변경 2026-07-14 11:05:15 +09:00
236c7916a7 이미지 수집 100장 상한 추가 2026-07-13 15:13:24 +09:00
593b6d9922 네이버 정책 변경으로 인한 이미지 크롤링 코드 수정 2026-07-13 14:47:13 +09:00
18ba089110 축제/행사 atrraction으로 분류 2026-07-10 13:56:31 +09:00
64b9959000 attraction 탬플릿 적용 2026-07-10 12:00:25 +09:00