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:
35
backend/app/models/sns_share.py
Normal file
35
backend/app/models/sns_share.py
Normal 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])
|
||||
Reference in New Issue
Block a user