diff --git a/codes/services.py b/codes/services.py index 0ffe8ad..7b6693c 100644 --- a/codes/services.py +++ b/codes/services.py @@ -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): @@ -79,4 +88,46 @@ class SmsService(CertificateService): return True except Exception as e: # print(f"메시지 발송 실패: {str(e)}") - return False \ No newline at end of file + 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) + +