package Ġcom . k il ch ich ak ov . five letters . service . job Ċ Ċ import Ġcom . k il ch ich ak ov . five letters . LOG Ċ import Ġcom . k il ch ich ak ov . five letters . model . Email Ċ import Ġcom . k il ch ich ak ov . five letters . model . Letter Ċ import Ġcom . k il ch ich ak ov . five letters . model . UserData Ċ import Ġcom . k il ch ich ak ov . five letters . model . job . Daily Mail ing Job Payload Ċ import Ġcom . k il ch ich ak ov . five letters . service . Letter Service Ċ import Ġcom . k il ch ich ak ov . five letters . service . Mail Sender Service Ċ import Ġcom . k il ch ich ak ov . five letters . service . UserService Ċ import Ġorg . springframework . beans . factory . annotation . Autowired Ċ import Ġorg . springframework . beans . factory . annotation . Value Ċ import Ġorg . springframework . stereotype . Component Ċ import Ġjava . lang . Exception Ċ Ċ @ Component Ċ class ĠDaily Mail ing Job Processor ( ĊĠĠĠĠĠĠĠ Ġ@ Value ("\ ${ UI _ URL }") ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠbaseUrl : ĠString , ĊĠĠĠĠĠĠĠ Ġ@ Autowired ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġmail Sender Service : ĠMail Sender Service , ĊĠĠĠĠĠĠĠ Ġ@ Autowired ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġletter Service : ĠLetter Service , ĊĠĠĠĠĠĠĠ Ġ@ Autowired ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠuserService : ĠUserService Ċ ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠSUB JECT Ġ= Ġ" Your ĠDaily ĠTime ĠC aps ules " ĊĊĊĠĠĠ Ġfun Ġprocess ( payload : ĠDaily Mail ing Job Payload ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġletters Ġ= Ġletter Service . get Letters For Mail ing () ĊĠĠĠĠĠĠĠ Ġval Ġby Users Ġ= Ġletters . groupBy Ġ{ Ġit . login Ġ} ĊĠĠĠĠĠĠĠ ĠLOG . info Ġ{ Ġ" grouped Ġletters : Ġ$ by Users " Ġ} ĊĠĠĠĠĠĠĠ Ġby Users . forEach Ġ{ Ġ( login , Ġletters ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOG . info Ġ{ Ġ" for Ġuser Ġ$ login " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠuserData Ġ= ĠuserService . load UserData ( login ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( userData . email Confirmed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġemail Ġ= Ġbuild Email ( userData , Ġletters . sorted By Descending Ġ{ Ġit . send Date Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmail Sender Service . send Email ( email ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġletter Service . mark Letters As M ailed ( letters . map Ġ{ Ġit ._ id !!. toString () Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOG . info Ġ{ Ġ" user Ġ$ login Ġemail Ġis Ġun confirmed " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOG . error Ġ{ Ġ" caught Ġ$ e Ġfor Ġuser Ġ$ login " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbuild Email ( userData : ĠUser Data , Ġletters : ĠList < Letter >): ĠEmail Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġif Ġ( userData . nickname . isNull Or Blank ()) ĠuserData . login Ġelse ĠuserData . nickname ĊĠĠĠĠĠĠĠ Ġreturn ĠEmail ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserData . email !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSUB JECT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhtml Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< html > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< body > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHi Ġ$ name , Ġhere Ġare Ġyour Ġtime Ġcaps ules : ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ${ letters . join ToString ("") Ġ{ Ġformat Letter ( it ) Ġ}} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDon 't Ġforget Ġto Ġcreate Ġnew Ġ< a Ġhref ="$ baseUrl "> Time ĠC aps ules </ a > Ġtoday . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ</ body > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ</ html > ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġformat Letter ( letter : ĠLetter ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ< p > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDate : Ġ${ letter . send Date } < br > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ${ letter . message } ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ</ p > ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠ Ġ} Ċ }