feat: initialize aivideo project
This commit is contained in:
15
backend/app/modules/growth_rules/repository.py
Normal file
15
backend/app/modules/growth_rules/repository.py
Normal file
@@ -0,0 +1,15 @@
|
||||
from sqlalchemy import select
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from app.models.entities import GrowthRewardRule
|
||||
|
||||
|
||||
class GrowthRulesRepository:
|
||||
def __init__(self, db: Session) -> None:
|
||||
self.db = db
|
||||
|
||||
def get_rule(self, rule_type: str) -> GrowthRewardRule | None:
|
||||
return self.db.scalar(
|
||||
select(GrowthRewardRule).where(GrowthRewardRule.rule_type == rule_type)
|
||||
)
|
||||
|
||||
38
backend/app/modules/growth_rules/router.py
Normal file
38
backend/app/modules/growth_rules/router.py
Normal file
@@ -0,0 +1,38 @@
|
||||
from fastapi import APIRouter, Depends
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from app.common.db.session import get_db
|
||||
from app.common.responses.api_response import success_response
|
||||
from app.common.security.deps import require_admin_permission
|
||||
from app.modules.growth_rules.schema import GrowthRulePayload
|
||||
from app.modules.growth_rules.service import GrowthRulesService
|
||||
|
||||
|
||||
router = APIRouter(prefix="/api/v1/admin/growth-rules", tags=["admin-growth-rules"])
|
||||
|
||||
|
||||
@router.get("")
|
||||
def get_growth_rules(
|
||||
_=Depends(require_admin_permission()),
|
||||
db: Session = Depends(get_db),
|
||||
):
|
||||
return success_response(GrowthRulesService(db).get_rules())
|
||||
|
||||
|
||||
@router.put("/signup")
|
||||
def update_signup_rule(
|
||||
payload: GrowthRulePayload,
|
||||
_=Depends(require_admin_permission()),
|
||||
db: Session = Depends(get_db),
|
||||
):
|
||||
return success_response(GrowthRulesService(db).update_signup_rule(payload))
|
||||
|
||||
|
||||
@router.put("/invite")
|
||||
def update_invite_rule(
|
||||
payload: GrowthRulePayload,
|
||||
_=Depends(require_admin_permission()),
|
||||
db: Session = Depends(get_db),
|
||||
):
|
||||
return success_response(GrowthRulesService(db).update_invite_rule(payload))
|
||||
|
||||
9
backend/app/modules/growth_rules/schema.py
Normal file
9
backend/app/modules/growth_rules/schema.py
Normal file
@@ -0,0 +1,9 @@
|
||||
from pydantic import BaseModel
|
||||
|
||||
|
||||
class GrowthRulePayload(BaseModel):
|
||||
enabled: bool
|
||||
reward_points: int
|
||||
min_consume_points: int = 0
|
||||
remark: str = ""
|
||||
|
||||
44
backend/app/modules/growth_rules/service.py
Normal file
44
backend/app/modules/growth_rules/service.py
Normal file
@@ -0,0 +1,44 @@
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from app.common.errors.app_error import NotFoundAppError
|
||||
from app.modules.growth_rules.repository import GrowthRulesRepository
|
||||
|
||||
|
||||
class GrowthRulesService:
|
||||
def __init__(self, db: Session) -> None:
|
||||
self.db = db
|
||||
self.repository = GrowthRulesRepository(db)
|
||||
|
||||
def get_rules(self) -> dict:
|
||||
signup = self.repository.get_rule("signup_reward")
|
||||
invite = self.repository.get_rule("invite_reward")
|
||||
return {
|
||||
"signupRewardEnabled": bool(signup.enabled) if signup else False,
|
||||
"signupRewardPoints": signup.reward_points if signup else 0,
|
||||
"inviteRewardEnabled": bool(invite.enabled) if invite else False,
|
||||
"inviteRewardPoints": invite.reward_points if invite else 0,
|
||||
"inviteRewardTrigger": invite.trigger_condition if invite else "on_first_consume",
|
||||
"inviteRewardMinConsumePoints": invite.min_consume_points if invite else 0,
|
||||
}
|
||||
|
||||
def update_signup_rule(self, payload) -> dict:
|
||||
rule = self.repository.get_rule("signup_reward")
|
||||
if not rule:
|
||||
raise NotFoundAppError("signup rule not found", code=70010)
|
||||
rule.enabled = payload.enabled
|
||||
rule.reward_points = payload.reward_points
|
||||
rule.remark = payload.remark
|
||||
self.db.commit()
|
||||
return self.get_rules()
|
||||
|
||||
def update_invite_rule(self, payload) -> dict:
|
||||
rule = self.repository.get_rule("invite_reward")
|
||||
if not rule:
|
||||
raise NotFoundAppError("invite rule not found", code=70011)
|
||||
rule.enabled = payload.enabled
|
||||
rule.reward_points = payload.reward_points
|
||||
rule.min_consume_points = payload.min_consume_points
|
||||
rule.remark = payload.remark
|
||||
self.db.commit()
|
||||
return self.get_rules()
|
||||
|
||||
Reference in New Issue
Block a user