feat: initialize aivideo project
This commit is contained in:
75
backend/app/modules/invites/service.py
Normal file
75
backend/app/modules/invites/service.py
Normal file
@@ -0,0 +1,75 @@
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from app.common.utils.id_gen import new_invite_code
|
||||
from app.models.entities import InviteCode, InviteRelation
|
||||
from app.modules.invites.repository import InviteRepository
|
||||
|
||||
|
||||
class InviteService:
|
||||
def __init__(self, db: Session) -> None:
|
||||
self.db = db
|
||||
self.repository = InviteRepository(db)
|
||||
|
||||
def get_invite_summary(self, user_id: int) -> dict:
|
||||
code = self.repository.get_default_code(user_id)
|
||||
if not code:
|
||||
code = self._create_default_code(user_id)
|
||||
relations = self.repository.inviter_relations(user_id)
|
||||
rewarded = [item for item in relations if item.reward_status == "rewarded"]
|
||||
return {
|
||||
"inviteCode": code.invite_code,
|
||||
"inviteLink": code.invite_link,
|
||||
"invitedUsers": len(relations),
|
||||
"rewardedUsers": len(rewarded),
|
||||
"rewardedPoints": sum(item.reward_points for item in rewarded),
|
||||
}
|
||||
|
||||
def create_invite_code(self, user_id: int) -> dict:
|
||||
code = self.repository.get_default_code(user_id)
|
||||
if code:
|
||||
return {"inviteCode": code.invite_code, "inviteLink": code.invite_link}
|
||||
code = self._create_default_code(user_id)
|
||||
return {"inviteCode": code.invite_code, "inviteLink": code.invite_link}
|
||||
|
||||
def list_relations(self, user_id: int) -> list[dict]:
|
||||
relations = self.repository.inviter_relations(user_id)
|
||||
users = self.repository.users_by_ids([item.invitee_user_id for item in relations])
|
||||
return [
|
||||
{
|
||||
"inviteeUserId": item.invitee_user_id,
|
||||
"inviteeNickname": users.get(item.invitee_user_id).nickname if users.get(item.invitee_user_id) else "",
|
||||
"rewardStatus": item.reward_status,
|
||||
"rewardPoints": item.reward_points,
|
||||
"createdAt": item.created_at.isoformat(),
|
||||
"rewardedAt": item.rewarded_at.isoformat() if item.rewarded_at else None,
|
||||
}
|
||||
for item in relations
|
||||
]
|
||||
|
||||
def list_rewards(self, user_id: int) -> list[dict]:
|
||||
relations = self.repository.inviter_relations(user_id)
|
||||
return [
|
||||
{
|
||||
"inviteeUserId": item.invitee_user_id,
|
||||
"rewardStatus": item.reward_status,
|
||||
"rewardPoints": item.reward_points,
|
||||
"rewardedAt": item.rewarded_at.isoformat() if item.rewarded_at else None,
|
||||
}
|
||||
for item in relations
|
||||
if item.reward_points > 0
|
||||
]
|
||||
|
||||
def _create_default_code(self, user_id: int) -> InviteCode:
|
||||
code_value = new_invite_code()
|
||||
code = InviteCode(
|
||||
user_id=user_id,
|
||||
invite_code=code_value,
|
||||
invite_link=f"http://localhost:3000/register?inviteCode={code_value}",
|
||||
status=1,
|
||||
is_default=True,
|
||||
)
|
||||
self.db.add(code)
|
||||
self.db.commit()
|
||||
self.db.refresh(code)
|
||||
return code
|
||||
|
||||
Reference in New Issue
Block a user