Add SNS Marketing Campaign feature

- 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>
This commit is contained in:
AutonetSellCar Deploy
2026-01-03 18:21:17 +09:00
parent 718c5b0474
commit 7c943d8553
17 changed files with 1414 additions and 6 deletions

View File

@@ -0,0 +1,35 @@
from sqlalchemy import Column, Integer, String, Float, DateTime, ForeignKey, Text
from sqlalchemy.orm import relationship
from sqlalchemy.sql import func
from ..database import Base
class SnsShareSubmission(Base):
"""SNS 공유 제출 및 검증 모델"""
__tablename__ = "sns_share_submissions"
id = Column(Integer, primary_key=True, index=True)
user_id = Column(Integer, ForeignKey("users.id"), nullable=False)
car_id = Column(Integer, ForeignKey("cars.id"), nullable=False)
# SNS 정보
platform = Column(String(20), nullable=False) # twitter, instagram, facebook
sns_url = Column(String(500), nullable=False) # 공유 게시물 URL
# 상태
status = Column(String(20), default="pending") # pending, approved, rejected
rejected_reason = Column(Text, nullable=True) # 거부 사유
# CC 보상
reward_cc = Column(Float, default=3.0) # 기본 3CC 보상
rewarded_at = Column(DateTime(timezone=True), nullable=True) # 보상 지급 시각
# 타임스탬프
submitted_at = Column(DateTime(timezone=True), server_default=func.now())
verified_at = Column(DateTime(timezone=True), nullable=True) # 검증 시각
verified_by = Column(Integer, ForeignKey("users.id"), nullable=True) # 검증한 관리자
# Relationships
user = relationship("User", foreign_keys=[user_id], backref="sns_submissions")
car = relationship("Car", backref="sns_shares")
verifier = relationship("User", foreign_keys=[verified_by])