45 lines
1.8 KiB
Python
45 lines
1.8 KiB
Python
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()
|
|
|