✨ Feat: [#56] 초대관련 서비스(url 생성, 코드유효성검사, 사용자초대) 구현
This commit is contained in:
@@ -10,16 +10,25 @@ from rest_framework.views import APIView
|
||||
from rest_framework.response import Response
|
||||
from rest_framework import status
|
||||
|
||||
from .models import CertificationCode
|
||||
from .models import *
|
||||
|
||||
from common.models.choiceModels import CertificateCodeUseType
|
||||
from common.models.choiceModels import CertificateCodeUseType, InviteCodeUseType
|
||||
from common.utils.codeManger import set_expire
|
||||
|
||||
from solapi import SolapiMessageService
|
||||
from solapi.model import RequestMessage
|
||||
|
||||
from users.models import User
|
||||
|
||||
from projects.models import Project, ProjectTeamList
|
||||
|
||||
# from .schemas import send_sms_post_schema # Swagger나 drf-spectacular 등에 사용되는 데코레이터
|
||||
|
||||
INVITE_CHOICE_USE_TYPE ={
|
||||
'p': InviteCodeUseType.PROJECT,
|
||||
'h': InviteCodeUseType.HACKATHON
|
||||
}
|
||||
|
||||
class CertificateService:
|
||||
@staticmethod
|
||||
def send(code, identifier):
|
||||
@@ -80,3 +89,45 @@ class SmsService(CertificateService):
|
||||
except Exception as e:
|
||||
# print(f"메시지 발송 실패: {str(e)}")
|
||||
return False
|
||||
|
||||
|
||||
class InviteService:
|
||||
|
||||
# 종류마다 사용하는 테이블이 다르므로 오버라이딩
|
||||
@staticmethod
|
||||
def add_member(invitee, work):
|
||||
pass
|
||||
|
||||
# url 생성
|
||||
@staticmethod
|
||||
def create_invite_object_and_url(use_type, identifier, code) -> str:
|
||||
InviteCode.objects.create(
|
||||
use_type = INVITE_CHOICE_USE_TYPE[use_type],
|
||||
code = code,
|
||||
expire_at = set_expire(10080),
|
||||
identifier = identifier,
|
||||
)
|
||||
return f"https://{settings.DOMAIN_NAME}/invite?t={use_type}&i={identifier}&c={code}"
|
||||
|
||||
# 코드 유효성 검사
|
||||
@staticmethod
|
||||
def check_code(use_type, identifier, code) -> bool:
|
||||
if InviteCode.objects.filter(
|
||||
use_type = INVITE_CHOICE_USE_TYPE[use_type],
|
||||
identifier = identifier,
|
||||
code = code,
|
||||
expire_at__gte=now()
|
||||
).exists():
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
|
||||
class ProjectInviteService(InviteService):
|
||||
|
||||
# 사용자 초대
|
||||
@staticmethod
|
||||
def add_member(invitee: User, work: Project):
|
||||
return ProjectTeamList.objects.create(user=invitee, project=work)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user