- Add cash_cc_balance to User model (withdrawable CC) - Create SnsShareSubmission model for SNS share verification - Add marketing campaign settings to SystemSettings - Add reward_type to ReferralReward model - Create /api/sns-share endpoints for submission and verification - Add referral signup reward logic (10CC on signup) - Create /sns-share user page for SNS sharing - Create /admin/sns-shares management page - Add marketing settings UI to admin settings page - Add SNS Shares menu to admin sidebar 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
58 lines
1.3 KiB
Python
58 lines
1.3 KiB
Python
from pydantic import BaseModel, HttpUrl
|
|
from typing import Optional, List
|
|
from datetime import datetime
|
|
|
|
|
|
class SnsShareSubmit(BaseModel):
|
|
"""SNS 공유 제출 요청"""
|
|
car_id: int
|
|
platform: str # twitter, instagram, facebook
|
|
sns_url: str # 공유 게시물 URL
|
|
|
|
|
|
class SnsShareResponse(BaseModel):
|
|
"""SNS 공유 제출 응답"""
|
|
id: int
|
|
user_id: int
|
|
car_id: int
|
|
platform: str
|
|
sns_url: str
|
|
status: str
|
|
rejected_reason: Optional[str] = None
|
|
reward_cc: float
|
|
rewarded_at: Optional[datetime] = None
|
|
submitted_at: datetime
|
|
verified_at: Optional[datetime] = None
|
|
verified_by: Optional[int] = None
|
|
|
|
# Car info for display
|
|
car_name: Optional[str] = None
|
|
car_image: Optional[str] = None
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
|
|
class SnsShareListResponse(BaseModel):
|
|
"""SNS 공유 목록 응답"""
|
|
submissions: List[SnsShareResponse]
|
|
total: int
|
|
pending_count: int
|
|
approved_count: int
|
|
rejected_count: int
|
|
|
|
|
|
class SnsShareVerify(BaseModel):
|
|
"""관리자 검증 요청"""
|
|
approved: bool
|
|
rejected_reason: Optional[str] = None
|
|
|
|
|
|
class SnsShareStats(BaseModel):
|
|
"""SNS 공유 통계"""
|
|
total_submissions: int
|
|
pending_submissions: int
|
|
approved_submissions: int
|
|
rejected_submissions: int
|
|
total_rewarded_cc: float
|