/** Ċ Ġ* ĠCopyright Ġ 2 0 1 7 - 2 0 1 8 Ġthe Ġoriginal Ġauthor Ġor Ġauthors Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġio . zh udy . du ic . service Ċ Ċ import Ġio . zh udy . du ic . Biz Code Exception Ċ import Ġio . zh udy . du ic . Biz Codes Ċ import Ġio . zh udy . du ic . Config Ċ import Ġio . zh udy . du ic . domain . Page able Ċ import Ġio . zh udy . du ic . domain . User Ċ import Ġio . zh udy . du ic . dto . Reset Password Dto Ċ import Ġio . zh udy . du ic . repository . UserRepository Ċ import Ġorg . springframework . boot . context . event . Application Ready Event Ċ import Ġorg . springframework . context . event . EventListener Ċ import Ġorg . springframework . security . crypto . password . Password Encoder Ċ import Ġorg . springframework . stereotype . Service Ċ import Ġreactor . core . publisher . Mono Ċ Ċ /** Ċ Ġ* ĠçĶ¨æĪ· ç®¡çĲĨ ãĢĤ Ċ Ġ* Ċ Ġ* Ġ@ author ĠKevin ĠZ ou Ġ( ke vin z @ we gh st . com ) Ċ Ġ*/ Ċ @ Service Ċ class ĠUserService ( val Ġuser Repository : ĠUser Repository , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpassword Encoder : ĠPassword Encoder ) Ġ{ ĊĊĠĠĠ Ġ@ EventListener ĊĠĠĠ Ġfun Ġlisten Context Started ( event : ĠApplication Ready Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġuser Repository . findBy Email ( Config . root Email ). has Element (). subscribe Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinsert ( User ( email Ġ= ĠConfig . root Email , Ġpassword Ġ= ĠConfig . root Password )). subscribe () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠçĶ¨æĪ· çĻ»å½ķ ãĢĤ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ éĶĻè¯¯ è¿ĶåĽŀ ĊĠĠĠĠ Ġ* Ġ- Ġ[ Biz Codes . C _ 2 0 0 0 ] ĊĠĠĠĠ Ġ* Ġ- Ġ[ Biz Codes . C _ 2 0 0 1 ] ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ throws ĠB iz Code Exception ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġlogin ( email : ĠString , Ġpassword : ĠString ): ĠMono < User > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġuser Repository . findBy Email ( email ). single (). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! password Encoder . matches ( password , Ġit !!. password )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠB iz Code Exception ( Biz Codes . C _ 2 0 0 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit ĊĠĠĠĠĠĠĠ Ġ}. onError Resume ( NoSuch ElementException :: class . java ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠB iz Code Exception ( Biz Codes . C _ 2 0 0 0 ) ĊĠĠĠĠĠĠĠ Ġ}. cast ( User :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ä¿ĿåŃĺ çĶ¨æĪ· ãĢĤ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġinsert ( user : ĠUser ): ĠMono < *> Ġ{ ĊĠĠĠĠĠĠĠ Ġuser . password Ġ= Ġpassword Encoder . encode ( user . password ) ĊĠĠĠĠĠĠĠ Ġreturn Ġuser Repository . insert ( user ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠæĽ´æĸ° çĶ¨æĪ· å¯Ĩçłģ ãĢĤ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġemail Ġ éĤ®ç®± ĊĠĠĠĠ Ġ* Ġ@ param Ġold Password Ġ åİŁ å¯Ĩçłģ ĊĠĠĠĠ Ġ* Ġ@ param Ġnew Password Ġ æĸ° å¯Ĩçłģ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġupdate Password ( email : ĠString , Ġold Password : ĠString , Ġnew Password : ĠString ): ĠMono < Int > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġuser Repository . findBy Email ( email ). single (). flatMap Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( password Encoder . matches ( old Password , Ġit ?. password )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ flatMap Ġuser Repository . update Password ( email , Ġpassword Encoder . encode ( new Password )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠB iz Code Exception ( Biz Codes . C _ 2 0 0 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠåĪłéĻ¤ çĶ¨æĪ· ãĢĤ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġdelete ( email : ĠString ): ĠMono < *> Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( email Ġ== ĠConfig . root Email ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠB iz Code Exception ( Biz Codes . C _ 2 0 0 2 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġuser Repository . delete ( email ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ éĩį ç½® å¯Ĩçłģ ãĢĤ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġreset Password ( dto : ĠReset Password Dto ): ĠMono < *> Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( dto . email Ġ== ĠConfig . root Email ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠB iz Code Exception ( Biz Codes . C _ 2 0 0 3 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġuser Repository . update Password ( dto . email , Ġpassword Encoder . encode ( dto . password )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠåĪĨ é¡µ æŁ¥è¯¢ çĶ¨æĪ· åĪĹè¡¨ ãĢĤ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġfind Page ( page : ĠPage able ) Ġ= Ġuser Repository . find Page ( page ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġè¿ĶåĽŀ æīĢæľī çĶ¨æĪ· çļĦ éĤ®ç®± ãĢĤ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠfindAll Email () Ġ= Ġuser Repository . findAll Email () Ċ }