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()