1
1
"""회원 관련 API Router"""
2
2
from datetime import datetime
3
+ import secrets
3
4
from typing_extensions import Annotated
4
5
5
6
from fastapi import (
6
- APIRouter , BackgroundTasks , Depends , File , Form , Path , Query ,
7
+ APIRouter , BackgroundTasks , Body , Depends , File , Form , Path , Query ,
7
8
Request , status , UploadFile
8
9
)
9
10
from sqlalchemy import delete
10
11
11
- from api .v1 .service .point import PointServiceAPI
12
12
from bbs .social import SocialAuthService
13
13
from core .database import db_session
14
14
from core .models import Member
15
- from lib .mail import send_password_reset_mail , send_register_mail
15
+ from lib .mail import send_password_reset_mail , send_register_admin_mail , send_register_mail
16
16
17
17
from api .v1 .dependencies .member import (
18
- get_current_member , validate_create_data , validate_update_data
19
- )
20
- from api .v1 .service .member import (
21
- MemberServiceAPI ,
22
- MemberImageServiceAPI as ImageService
18
+ get_current_member , validate_certify_email_member , validate_create_data , validate_update_data
23
19
)
24
20
from api .v1 .models import MemberRefreshToken
25
21
from api .v1 .models .member import (
30
26
from api .v1 .models .response import (
31
27
MessageResponse , response_401 , response_403 , response_404 , response_409 , response_422
32
28
)
29
+ from api .v1 .service .member import (
30
+ MemberServiceAPI ,
31
+ MemberImageServiceAPI as ImageService ,
32
+ ValidateMemberAPI
33
+ )
34
+ from api .v1 .service .point import PointServiceAPI
33
35
34
36
router = APIRouter ()
35
37
@@ -70,6 +72,7 @@ async def create_member(
70
72
71
73
# 회원가입메일 발송 처리(백그라운드)
72
74
background_tasks .add_task (send_register_mail , request , member )
75
+ background_tasks .add_task (send_register_admin_mail , request , member )
73
76
74
77
message = "회원가입이 완료되었습니다."
75
78
if member .mb_email_certify2 :
@@ -83,6 +86,37 @@ async def create_member(
83
86
}
84
87
85
88
89
+ @router .put ("/members/{mb_id}/email-certification/change" ,
90
+ summary = "인증 이메일 변경" ,
91
+ responses = {** response_403 , ** response_409 , ** response_422 })
92
+ async def certificate_email_change (
93
+ request : Request ,
94
+ db : db_session ,
95
+ member_vaildate : Annotated [ValidateMemberAPI , Depends ()],
96
+ member : Annotated [Member , Depends (validate_certify_email_member )],
97
+ email : Annotated [str , Body (..., title = "이메일" , description = "변경할 이메일" )],
98
+ ) -> MessageResponse :
99
+ """
100
+ 메일인증을 처리하지 않은 회원의 메일을 변경하고 인증메일을 재전송합니다.
101
+
102
+ #### Request Body
103
+ - email: 변경할 이메일 주소
104
+ - password: 회원 비밀번호
105
+ """
106
+ member_vaildate .valid_email (email , member .mb_id )
107
+
108
+ # 이메일 및 인증코드 변경
109
+ member .mb_email = email
110
+ member .mb_email_certify2 = secrets .token_hex (16 )
111
+ db .commit ()
112
+ db .refresh (member )
113
+
114
+ # 인증메일 재전송
115
+ await send_register_mail (request , member )
116
+
117
+ return {"message" : f"{ email } 주소로 인증 메일을 재전송 했습니다." }
118
+
119
+
86
120
@router .put ("/members/{mb_id}/email-certification" ,
87
121
summary = "회원가입 메일인증 처리" )
88
122
async def certificate_email (
0 commit comments