package Ġjp . ac . k cg . service Ċ Ċ import Ġjp . ac . k cg . domain . User Ċ import Ġjp . ac . k cg . domain . User PK Ċ import Ġjp . ac . k cg . repository . UserRepository Ċ import Ġorg . springframework . beans . factory . annotation . Autowired Ċ import Ġorg . springframework . stereotype . Service Ċ import Ġorg . springframework . transaction . annotation . Transactional Ċ Ċ /** Ċ Ġ* Ġãĥ ¦ãĥ¼ãĤ¶ãĥ¼ ãģ® æĵįä½ľ ãģ«éĸ¢ãģĻãĤĭ ãĤµãĥ¼ãĥĵãĤ¹ Ċ Ġ*/ Ċ @ Service Ċ interface Ġ ĠUserService Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠclientId ãģ¨ name ãģ« ä¸Ģèĩ´ ãģĻãĤĭ ãĥ¦ãĥ¼ãĤ¶ãĥ¼ ãĤĴ DB ãģĭãĤī åıĸå¾Ĺ ãģĻãĤĭ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġfind User ( clientId : ĠString , Ġname : ĠString ): ĠUser ? ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġãĥ ¦ãĥ¼ãĤ¶ãĥ¼ ãĤĴ æĸ° è¦ı ãģ« ä½ľæĪĲ ãģĹãģ¾ãģĻ ĊĠĠĠĠ Ġ* Ġ@ throws ĠUser AlreadyExists Exception Ġ ãģĻ ãģ§ ãģ« ãĥ¦ãĥ¼ãĤ¶ãĥ¼ ãģĮ åŃĺåľ¨ ãģĹãģŁ æĻĤ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( User AlreadyExists Exception :: class ) ĊĠĠĠ Ġfun Ġcreate User ( clientId : ĠString , Ġname : ĠString ): ĠUser ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġãĥ ¦ãĥ¼ãĤ¶ãĥ¼ ãģĮ åŃĺåľ¨ ãģĹãģª ãģĳ ãĤĮãģ° ä½ľæĪĲ ãģĻãĤĭ ĊĠĠĠĠ Ġ* Ġãĥ ¦ãĥ¼ãĤ¶ãĥ¼ ãģĮ åŃĺåľ¨ ãģĹãģ¦ãģĦãĤĭ åł´åĲĪãģ¯ ä¾ĭ å¤ĸ ãĤĴ ãĤ¹ ãĥŃ ãĥ¼ ãģĽ ãģļ ä½ķ ãĤĤ ãģĹãģ¾ ãģĽãĤĵ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcreate If NotExist ( clientId : ĠString , Ġname : ĠString ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠclientId ãģ¨ name ãģ« ä¸Ģèĩ´ ãģĻãĤĭ ãĥ¦ãĥ¼ãĤ¶ãĥ¼ ãĤĴ DB ãģĭãĤī åıĸå¾Ĺ ãĢĤ åŃĺåľ¨ ãģĹãģª ãģĳ ãĤĮãģ° æĸ° è¦ı ä½ľæĪĲ ãģĻãĤĭ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġfind User OrCreate ( clientId : ĠString , Ġname : ĠString ): ĠUser ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġname ãĤĴ screen Name ãģ§ LIKE æ¤ ľç´¢ ãģĹãģ¦ ãĥ Ĵ ãĥĥãĥĪ ãģĹãģŁ ãĤĤãģ® ãĤĴ è¿Ķ ãģĻ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġsearch Users By Screen Name ( name : ĠString ): ĠList < User > ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ãĤ¹ãĤ¯ãĥª ãĥ¼ãĥ³ ãĥį ãĥ¼ãĥł ãĤĴ æĽ´æĸ° ãģĻãĤĭ ĊĠĠĠĠ Ġ* Ġ@ throws ĠUser NotFoundException Ġãĥ ¦ãĥ¼ãĤ¶ãĥ¼ ãģĮ è¦ĭ ãģ¤ ãģĭãĤī ãģª ãģĭ ãģ£ãģŁ æĻĤ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( User NotFoundException :: class ) ĊĠĠĠ Ġfun Ġupdate Screen Name ( clientId : ĠString , Ġname : ĠString , Ġnew Screen Name : ĠString ): ĠUser Ċ Ċ } Ċ Ċ @ Transactional ( readOnly Ġ= Ġtrue ) Ċ open Ġclass ĠUser ServiceImpl : ĠUserService Ġ{ ĊĊĠĠĠ Ġ@ Autowired ĊĠĠĠ Ġlateinit Ġvar Ġuser Repo : ĠUser Repository ĊĊĠĠĠ Ġ@ Transactional ( readOnly Ġ= Ġfalse ) ĊĠĠĠ Ġoverride Ġfun Ġcreate User ( clientId : ĠString , Ġname : ĠString ): ĠUser Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( user Repo . exists ( User PK ( clientId , Ġname ))) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠUser AlreadyExists Exception () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġuser Repo . save ( User ( User PK ( clientId , Ġname ), Ġname )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfind User ( clientId : ĠString , Ġname : ĠString ): ĠUser ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġuser Repo . findOne ( User PK ( clientId , Ġname )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Transactional ( readOnly Ġ= Ġfalse ) ĊĠĠĠ Ġoverride Ġfun Ġcreate If NotExist ( clientId : ĠString , Ġname : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpk Ġ= ĠUser PK ( clientId , Ġname ) ĊĠĠĠĠĠĠĠ Ġif (! user Repo . exists ( pk )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Repo . save ( User ( pk , Ġname )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Transactional ( readOnly Ġ= Ġfalse ) ĊĠĠĠ Ġoverride Ġfun Ġfind User OrCreate ( clientId : ĠString , Ġname : ĠString ): ĠUser Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( user Repo . exists ( User PK ( clientId , Ġname ))) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Repo . findOne ( User PK ( clientId , Ġname )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġuser Repo . save ( User ( User PK ( clientId , Ġname ), Ġname )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsearch Users By Screen Name ( name : ĠString ) Ġ= Ġuser Repo . findBy Screen Name Containing ( name ) ĊĊĠĠĠ Ġ@ Transactional ( readOnly Ġ= Ġfalse ) ĊĠĠĠ Ġoverride Ġfun Ġupdate Screen Name ( clientId : ĠString , Ġname : ĠString , Ġnew Screen Name : ĠString ): ĠUser Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġuser Repo . findOne ( User PK ( clientId , Ġname )) Ġ?: Ġthrow ĠUser NotFoundException () ĊĠĠĠĠĠĠĠ Ġuser . screen Name Ġ= Ġnew Screen Name ĊĠĠĠĠĠĠĠ Ġreturn Ġuser Repo . save ( user ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġ ãģĻ ãģ§ ãģ« ãĥ¦ãĥ¼ãĤ¶ãĥ¼ ãģĮ åŃĺåľ¨ ãģĹãģ¦ãģĦãĤĭ ãģ® ãģ« ä½ľæĪĲ ãģĹãģŁ æĻĤ ãģ« throw ãģķãĤĮãĤĭ ä¾ĭ å¤ĸ Ċ Ġ*/ Ċ class ĠUser AlreadyExists Exception : ĠRuntimeException () Ċ Ċ /** Ċ Ġ* Ġãĥ ¦ãĥ¼ãĤ¶ãĥ¼ ãģĮ è¦ĭ ãģ¤ ãģĭãĤī ãģª ãģĭ ãģ£ãģŁ æĻĤ ãģ® ä¾ĭ å¤ĸ Ċ Ġ*/ Ċ class ĠUser NotFoundException : ĠRuntimeException () Ċ