1+ from datetime import datetime
12from enum import Enum
23from typing import Any , Optional , TypedDict , Union
34
4- from solapi . requests . send . send_request import MessageParameter
5+ from pydantic import BaseModel , Field
56
67
78# 외부 파일 import 대신 타입 정의
@@ -57,80 +58,28 @@ class MessageType(str, Enum):
5758
5859
5960# TODO: 생성자 만들 때 Request 딕셔너리가 아니라 Response 딕셔너리로 받아와야함.
60- class Message :
61- def __init__ (self , parameter : MessageParameter ):
62- """
63- Message 클래스 초기화
61+ class Message (BaseModel ):
62+ _to : str
63+ from__ : Optional [str ] = Field (None , alias = "from" )
64+ _text : Optional [str ] = None
65+ _date_created : Optional [datetime ] = None
66+ _date_updated : Optional [datetime ] = None
67+ _group_id : Optional [str ] = None
68+ _message_id : Optional [str ] = None
69+ _image_id : Optional [str ] = None
70+ _log : Optional [str ] = None
71+ _type : Optional [str ] = None
72+ _subject : Optional [str ] = None
73+ # TODO: kakao options, rcs options 타이핑 해야 함
74+ _kakao_options : Optional [dict [str , Any ]] = None
75+ _rcs_options : Optional [dict [str , Any ]] = None
76+ _country : Optional [str ] = None
77+ _auto_type_detect : Optional [bool ] = None
78+ _status_code : Optional [str ] = None
79+ _replacements : Optional [dict [str , Any ]] = None
80+ _custom_fields : Optional [dict [str , Any ]] = None
81+ _fax_options : Optional [dict [str , Any ]] = None
6482
65- Args:
66- parameter: 메시지 파라미터 딕셔너리(json)
67- """
68- # 수신번호
69- self ._to : Union [str , list [str ]] = parameter ["to" ]
70-
71- # 발신번호
72- self ._from_ : Optional [str ] = getattr (parameter , "from" , None )
73-
74- # 메시지 내용
75- self ._text : Optional [str ] = getattr (parameter , "text" , None )
76-
77- # 메시지 생성일자
78- self ._date_created : Optional [str ] = getattr (parameter , "dateCreated" , None )
79-
80- # 메시지 수정일자
81- self ._date_updated : Optional [str ] = getattr (parameter , "dateUpdated" , None )
82-
83- # 메시지의 그룹 ID
84- self ._group_id : Optional [str ] = getattr (parameter , "groupId" , None )
85-
86- # 해당 메시지의 ID
87- self ._message_id : Optional [str ] = getattr (parameter , "messageId" , None )
88-
89- # MMS 전용 스토리지(이미지) ID
90- self ._image_id : Optional [str ] = getattr (parameter , "imageId" , None )
91-
92- # 메시지 유형
93- self ._type : Optional [MessageType ] = getattr (parameter , "type" , None )
94-
95- # 문자 제목(LMS, MMS 전용)
96- self ._subject : Optional [str ] = getattr (parameter , "subject" , None )
97-
98- # 메시지 타입 감지 여부(비활성화 시 반드시 타입이 명시 되어야 함)
99- self ._auto_type_detect : Optional [bool ] = getattr (
100- parameter , "autoTypeDetect" , None
101- )
102-
103- # 카카오 알림톡/친구톡을 위한 프로퍼티
104- self ._kakao_options : Optional [KakaoOption ] = getattr (
105- parameter , "kakaoOptions" , None
106- )
107-
108- # RCS 메시지를 위한 프로퍼티
109- self ._rcs_options : Optional [RcsOption ] = getattr (parameter , "rcsOptions" , None )
110-
111- # 해외 문자 발송을 위한 국가번호(예) "82", "1" 등)
112- self ._country : Optional [str ] = getattr (parameter , "country" , None )
113-
114- # 메시지 로그
115- self ._log : Optional [list [dict [str , Any ]]] = getattr (parameter , "log" , None )
116-
117- # 대체 텍스트
118- self ._replacements : Optional [list [dict [str , Any ]]] = getattr (
119- parameter , "replacements" , None
120- )
121-
122- # 메시지 상태 코드
123- # https://developers.solapi.com/references/message-status-codes
124- self ._status_code : Optional [str ] = getattr (parameter , "status" , None )
125-
126- # 사용자를 위한 사용자만의 커스텀 값을 입력할 수 있는 필드
127- # 단, 오브젝트 내 키 값 모두 문자열 형태로 입력되어야 합니다.
128- self ._custom_fields : Optional [dict [str , str ]] = getattr (
129- parameter , "customFields" , None
130- )
131-
132- # 팩스 옵션
133- self ._fax_options : Optional [FileIds ] = getattr (parameter , "faxOptions" , None )
13483
13584 @property
13685 def to (self ) -> Union [str , list [str ]]:
@@ -142,11 +91,11 @@ def to(self, value: Union[str, list[str]]) -> None:
14291
14392 @property
14493 def from_ (self ) -> Optional [str ]:
145- return self ._from_
94+ return self .__dict__ . get ( "from" )
14695
14796 @from_ .setter
14897 def from_ (self , value : Optional [str ]) -> None :
149- self ._from_ = value
98+ self .from__ = value
15099
151100 @property
152101 def text (self ) -> Optional [str ]:
@@ -283,3 +232,6 @@ def fax_options(self) -> Optional[FileIds]:
283232 @fax_options .setter
284233 def fax_options (self , value : Optional [FileIds ]) -> None :
285234 self ._fax_options = value
235+
236+ class Config :
237+ populate_by_name = True
0 commit comments