package Ġcom . ort . last w olf . domain . service . say Ċ Ċ import Ġcom . ort . db fl ute . all common . C Def Ċ import Ġcom . ort . last w olf . domain . model . char ach ip . Char a Ċ import Ġcom . ort . last w olf . domain . model . message . Message Ċ import Ġcom . ort . last w olf . domain . model . message . Message Content Ċ import Ġcom . ort . last w olf . domain . model . message . MessageType Ċ import Ġcom . ort . last w olf . domain . model . my self . participant . V illage Say Sit uation Ċ import Ġcom . ort . last w olf . domain . model . v illage . V illage Ċ import Ġcom . ort . last w olf . domain . model . v illage . participant . V illage Participant Ċ import Ġcom . ort . last w olf . fw . exception . Last w olf BadRequest Exception Ċ import Ġcom . ort . last w olf . fw . exception . Last w olf Business Exception Ċ import Ġorg . springframework . stereotype . Service Ċ Ċ @ Service Ċ class ĠS ay Domain Service ( ĊĠĠĠ Ġprivate Ġval Ġnormal Say Domain Service : ĠNormal Say Domain Service , ĊĠĠĠ Ġprivate Ġval Ġgr ave Say Domain Service : ĠGr ave Say Domain Service , ĊĠĠĠ Ġprivate Ġval Ġmono logue Say Domain Service : ĠMono logue Say Domain Service , ĊĠĠĠ Ġprivate Ġval Ġwer ew olf Say Domain Service : ĠW er ew olf Say Domain Service , ĊĠĠĠ Ġprivate Ġval Ġm ason Say Domain Service : ĠM ason Say Domain Service Ċ ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġdefault MessageType Order Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠ ĠC Def . MessageType . äºº çĭ ¼ ãģ® åĽ ģ ãģį , ĊĠĠĠĠĠĠĠ ĠC Def . MessageType . åħ± æľī çĻº è¨Ģ , ĊĠĠĠĠĠĠĠ ĠC Def . MessageType . éĢļå¸¸ çĻº è¨Ģ , ĊĠĠĠĠĠĠĠ ĠC Def . MessageType . æŃ» èĢħ ãģ® åĳ » ãģį , ĊĠĠĠĠĠĠĠ ĠC Def . MessageType . çĭ¬ ãĤĬ è¨Ģ ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġfun Ġconvert ToS it uation ( ĊĠĠĠĠĠĠĠ Ġv illage : ĠV illage , ĊĠĠĠĠĠĠĠ Ġparticipant : ĠV illage Participant ? ĊĠĠĠ Ġ): ĠV illage Say Sit uation Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠV illage Say Sit uation ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Available Say Ġ= Ġis Available Say ( v illage , Ġparticipant ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselect able MessageType List Ġ= Ġget Selectable MessageType List ( v illage , Ġparticipant ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdefault MessageType Ġ= Ġdetect Default MessageType ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Available Say ( v illage , Ġparticipant ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Selectable MessageType List ( v illage , Ġparticipant ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġassert Say ( ĊĠĠĠĠĠĠĠ Ġv illage : ĠV illage , ĊĠĠĠĠĠĠĠ Ġparticipant : ĠV illage Participant ?, ĊĠĠĠĠĠĠĠ Ġchar a : ĠChar a ?, ĊĠĠĠĠĠĠĠ Ġlatest Day Message List : ĠList < Message >, ĊĠĠĠĠĠĠĠ Ġmessage Content : ĠMessage Content ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ äºĭ åīį ãĥģ ãĤ§ ãĥĥãĤ¯ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Available Say ( v illage , Ġparticipant )) Ġthrow ĠLast w olf Business Exception (" çĻº è¨Ģ ãģ§ãģį ãģ¾ãģĽãĤĵ ") ĊĠĠĠĠĠĠĠ Ġ// Ġ çĻº è¨Ģ ç¨® åĪ¥ ãģĶ ãģ¨ ãģ® ãĥģ ãĤ§ ãĥĥãĤ¯ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( message Content . type . to C def ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠC Def . MessageType . éĢļå¸¸ çĻº è¨Ģ Ġ-> Ġnormal Say Domain Service . assert Say ( v illage , Ġparticipant !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠC Def . MessageType . äºº çĭ ¼ ãģ® åĽ ģ ãģį Ġ-> Ġwer ew olf Say Domain Service . assert Say ( v illage , Ġparticipant !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠC Def . MessageType . åħ± æľī çĻº è¨Ģ Ġ-> Ġm ason Say Domain Service . assert Say ( v illage , Ġparticipant !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠC Def . MessageType . æŃ» èĢħ ãģ® åĳ » ãģį Ġ-> Ġgr ave Say Domain Service . assert Say ( v illage , Ġparticipant !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠC Def . MessageType . çĭ¬ ãĤĬ è¨Ģ Ġ-> Ġmono logue Say Domain Service . assert Say ( v illage , Ġparticipant !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠLast w olf BadRequest Exception (" ä¸į æŃ£ ãģª çĻº è¨Ģ ç¨® åĪ¥ ãģ§ãģĻ ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġ çĻº è¨Ģ åĽŀ æķ° ãĢģ éķ· ãģķ ãĢģ è¡Į æķ° ãĥģ ãĤ§ ãĥĥãĤ¯ ĊĠĠĠĠĠĠĠ Ġmessage Content . assert Message Length () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġassert Creator Say ( ĊĠĠĠĠĠĠĠ Ġv illage : ĠV illage , ĊĠĠĠĠĠĠĠ Ġmessage Content : ĠMessage Content ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ äºĭ åīį ãĥģ ãĤ§ ãĥĥãĤ¯ ĊĠĠĠĠĠĠĠ Ġif Ġ(! v illage . is Available Say ()) Ġthrow ĠLast w olf Business Exception (" çĻº è¨Ģ ãģ§ãģį ãģ¾ãģĽãĤĵ ") ĊĠĠĠĠĠĠĠ Ġ// Ġ éķ· ãģķ ãĢģ è¡Į æķ° ãĥģ ãĤ§ ãĥĥãĤ¯ ĊĠĠĠĠĠĠĠ Ġmessage Content . assert Message Length () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġassert Part icip ate Say ( ĊĠĠĠĠĠĠĠ Ġv illage : ĠV illage , ĊĠĠĠĠĠĠĠ Ġchar a : ĠChar a ?, ĊĠĠĠĠĠĠĠ Ġmessage Content : ĠMessage Content ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ äºĭ åīį ãĥģ ãĤ§ ãĥĥãĤ¯ ĊĠĠĠĠĠĠĠ Ġif Ġ(! v illage . is Available Say ()) Ġthrow ĠLast w olf Business Exception (" åħ¥ æĿ ĳ çĻº è¨Ģ ãģ§ãģį ãģ¾ãģĽãĤĵ ") ĊĠĠĠĠĠĠĠ Ġ// Ġ çĻº è¨Ģ éķ· ãģķ ãĢģ è¡Į æķ° ãĥģ ãĤ§ ãĥĥãĤ¯ ĊĠĠĠĠĠĠĠ Ġmessage Content . assert Message Length () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ================================================================= ================== ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAss ist ĠLogic ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ============ ĊĠĠĠ Ġprivate Ġfun Ġis Available Say ( v illage : ĠV illage , Ġparticipant : ĠV illage Participant ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ åıĤ åĬł èĢħ ãģ¨ãģĹãģ¦ åı¯èĥ½ ãģĭ ĊĠĠĠĠĠĠĠ Ġparticipant Ġ?: Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ(! participant . is Available Say ( v illage . status . isSet tled ())) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ// Ġ æĿ ĳ ãģ¨ãģĹãģ¦ åı¯èĥ½ ãģĭ ĊĠĠĠĠĠĠĠ Ġif Ġ(! v illage . is Available Say ()) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Selectable MessageType List ( ĊĠĠĠĠĠĠĠ Ġv illage : ĠV illage , ĊĠĠĠĠĠĠĠ Ġparticipant : ĠV illage Participant ? ĊĠĠĠ Ġ): ĠList < MessageType > Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Available Say ( v illage , Ġparticipant )) Ġreturn ĠlistOf () ĊĊĠĠĠĠĠĠĠ Ġval Ġlist : ĠMutable List < MessageType > Ġ= Ġmutable ListOf () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( normal Say Domain Service . is Say able ( v illage , Ġparticipant !! )) Ġlist . add ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMessageType ( C Def . MessageType . éĢļå¸¸ çĻº è¨Ģ ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġif Ġ( wer ew olf Say Domain Service . is Say able ( v illage , Ġparticipant )) Ġlist . add ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMessageType ( C Def . MessageType . äºº çĭ ¼ ãģ® åĽ ģ ãģį ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġif Ġ( m ason Say Domain Service . is Say able ( v illage , Ġparticipant )) Ġlist . add ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMessageType ( C Def . MessageType . åħ± æľī çĻº è¨Ģ ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġif Ġ( grave Say Domain Service . is Say able ( v illage , Ġparticipant )) Ġlist . add ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMessageType ( C Def . MessageType . æŃ» èĢħ ãģ® åĳ » ãģį ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġif Ġ( mono logue Say Domain Service . is Say able ( v illage , Ġparticipant )) Ġlist . add ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMessageType ( C Def . MessageType . çĭ¬ ãĤĬ è¨Ģ ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġlist ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdetect Default MessageType ( ĊĠĠĠĠĠĠĠ Ġavailable Say : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġselect able MessageType List : ĠList < MessageType > ĊĠĠĠ Ġ): ĠMessageType ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! available Say Ġ|| Ġselect able MessageType List . isEmpty ()) Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġselect able MessageType C def List Ġ= Ġselect able MessageType List . map Ġ{ Ġit . to C def () Ġ} ĊĊĠĠĠĠĠĠĠ Ġdefault MessageType Order . forEach Ġ{ Ġc def MessageType Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( selectable MessageType C def List . contains ( c def MessageType )) Ġreturn ĠMessageType ( c def MessageType ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} Ċ }