1- from typing import Optional
1+ from typing import Optional , Union
22
33from solapi .lib .authenticator import AuthenticationParameter
44from solapi .lib .fetcher import RequestMethod , default_fetcher
55from solapi .lib .string_date_transfer import format_with_transfer
66from solapi .model .message import Message
7- from solapi .requests . request_confiog import SendRequestConfig
8- from solapi . requests . send . send_request import (
9- MultipleDetailMessageSendingRequest ,
7+ from solapi .model . request . send_message_request import (
8+ SendMessageRequest ,
9+ SendRequestConfig ,
1010)
11- from solapi .responses .send .send_repsonse import DetailGroupMessageResponse
1211
1312
1413class SolapiMessageService :
@@ -19,48 +18,31 @@ def __init__(self, api_key: str, api_secret: str):
1918 "api_secret" : api_secret ,
2019 }
2120
22- # TODO: Request도 pydantic 모델로 진행
23- async def send (
21+ def send (
2422 self ,
25- messages : list [Message ] | Message ,
26- request_config : Optional [SendRequestConfig ] = None ,
23+ messages : Union [ list [Message ], Message ] ,
24+ request_config : Optional [SendRequestConfig ] = None
2725 ):
2826 payload = []
29- if isinstance (messages , list ):
30- for value in messages :
31- payload .append (value )
32- else :
27+ if isinstance (messages , Message ):
3328 payload .append (messages )
34- pass
29+ elif isinstance (messages , list ):
30+ payload .extend (messages )
3531
3632 if len (payload ) == 0 :
37- raise Exception ("데이터가 반드시 1건 이상 기입되어 있어야 합니다." )
33+ raise ValueError ("데이터가 반드시 1건 이상 기입되어 있어야 합니다." )
3834
39- parameter : MultipleDetailMessageSendingRequest = {"messages" : payload }
40- if request_config ["appId" ] is not None :
41- parameter .appId = request_config ["appId" ]
42- if request_config ["showMessageList" ] is not None :
43- parameter .showMessageList = request_config ["showMessageList" ]
44- if request_config ["scheduledDate" ] is not None :
45- parameter .scheduledDate = format_with_transfer (
46- request_config ["scheduledDate" ]
47- )
48-
49- response = await default_fetcher (
50- self ._auth_info ,
51- {
52- "method" : RequestMethod ("POST" ),
53- "url" : f"${ self .baseUrl } /messages/v4/send-many/detail" ,
54- },
55- parameter ,
35+ request = SendMessageRequest (
36+ messages = payload ,
37+ app_id = request_config .app_id ,
38+ allow_duplicates = request_config .allow_duplicates ,
39+ show_message_list = request_config .show_message_list ,
5640 )
57- validated_response = DetailGroupMessageResponse .model_validate (response )
58- count = validated_response .group_info .count
59- if (
60- len (validated_response .failed_message_list ) > 0
61- and count .total == count .registeredFailed
62- ):
63- raise Exception ("" )
64-
65- return validated_response
66-
41+ # TODO: 일어나면 여기부터 시작!
42+ if request_config .scheduled_date != "" :
43+ request .scheduled_date = format_with_transfer (request_config .scheduled_date )
44+
45+ return default_fetcher (self ._auth_info , request = {
46+ "method" : RequestMethod .POST ,
47+ "url" : f"{ self .baseUrl } /messages/v4/send-many/detail"
48+ }, data = request .model_dump ())
0 commit comments