o2o-site-AEO/solution/frontend/src/api/generated/model/placeData.ts
김성경 81ea676546 [feat] solution: 미니블로그 빌더 기능 확장 — 알림 이메일 분리·삭제·즉시발송·공급자 무관 생성
빌더 앱에서 미니블로그를 운영하는 데 필요했던 몇 가지를 묶었다.

- notify_email: 업장별 승인 메일 수신자를 계정 로그인 이메일과 분리(places.notify_email,
  migrations/0021, PlaceCRUD·protocol.py·place_service.py 검증, BlogPostsPage.tsx 설정 UI)
- 글 삭제(soft delete): 상태 제한 없이 지우고, 이미 게재된 글이면 재발행 잡까지 큐에 넣는다
  (post_crud.py, router/v1/site/post.py DELETE, BlogPostsPage.tsx 삭제 버튼)
- 지금 발송하기: 아침 9시 스윕을 안 기다리고 바로 발송(post_crud.next_due_for_mail,
  BlogPostsPage.tsx 버튼)
- blog_service.generate_one: 하드코딩된 Gemini 대신 services/llm/provider.py(LLM_PROVIDER,
  기본 openai)를 타도록 전환, 업종별 분기 구조(현재 숙소만 구현) 추가
- site_payload.publish_url(place, site): 발행 주소 조합을 한 곳에 모은 헬퍼
- 프론트: orval 로 재생성한 API 클라이언트(notify_email·삭제·즉시발송·social 엔드포인트 반영)

관련 스위트는 별도 커밋(쓰레드 연동 작업)에서 이미 PASS 확인함
2026-09-22 08:37:38 +09:00

42 lines
1.7 KiB
TypeScript

/**
* Generated by orval v7.21.0 🍺
* Do not edit manually.
* Web4Ai API
* OpenAPI spec version: 0.1.0
*/
import type { PlaceCategory } from "./placeCategory";
import type { PlaceStatus } from "./placeStatus";
import type { PlaceDataOwnerUserId } from "./placeDataOwnerUserId";
import type { PlaceDataExternalSource } from "./placeDataExternalSource";
import type { PlaceDataExternalPlaceId } from "./placeDataExternalPlaceId";
import type { PlaceDataRoadAddress } from "./placeDataRoadAddress";
import type { PlaceDataAddress } from "./placeDataAddress";
import type { PlaceDataPhone } from "./placeDataPhone";
import type { PlaceDataLatitude } from "./placeDataLatitude";
import type { PlaceDataLongitude } from "./placeDataLongitude";
import type { PlaceDataRegionCode } from "./placeDataRegionCode";
import type { PlaceDataVerifiedAt } from "./placeDataVerifiedAt";
import type { PlaceDataContentUpdatedAt } from "./placeDataContentUpdatedAt";
import type { PlaceDataNotifyEmail } from "./placeDataNotifyEmail";
import type { PlaceDataCreatedAt } from "./placeDataCreatedAt";
export interface PlaceData {
place_id: string;
name: string;
category: PlaceCategory;
status: PlaceStatus;
owner_user_id?: PlaceDataOwnerUserId;
external_source?: PlaceDataExternalSource;
external_place_id?: PlaceDataExternalPlaceId;
road_address?: PlaceDataRoadAddress;
address?: PlaceDataAddress;
phone?: PlaceDataPhone;
latitude?: PlaceDataLatitude;
longitude?: PlaceDataLongitude;
region_code?: PlaceDataRegionCode;
verified_at?: PlaceDataVerifiedAt;
content_updated_at?: PlaceDataContentUpdatedAt;
notify_email?: PlaceDataNotifyEmail;
created_at?: PlaceDataCreatedAt;
}