✨ 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.response import Response
|
||||||
from rest_framework import status
|
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 common.utils.codeManger import set_expire
|
||||||
|
|
||||||
from solapi import SolapiMessageService
|
from solapi import SolapiMessageService
|
||||||
from solapi.model import RequestMessage
|
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 등에 사용되는 데코레이터
|
# from .schemas import send_sms_post_schema # Swagger나 drf-spectacular 등에 사용되는 데코레이터
|
||||||
|
|
||||||
|
INVITE_CHOICE_USE_TYPE ={
|
||||||
|
'p': InviteCodeUseType.PROJECT,
|
||||||
|
'h': InviteCodeUseType.HACKATHON
|
||||||
|
}
|
||||||
|
|
||||||
class CertificateService:
|
class CertificateService:
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def send(code, identifier):
|
def send(code, identifier):
|
||||||
@@ -79,4 +88,46 @@ class SmsService(CertificateService):
|
|||||||
return True
|
return True
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
# print(f"메시지 발송 실패: {str(e)}")
|
# print(f"메시지 발송 실패: {str(e)}")
|
||||||
return False
|
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