package Ġbr . com . project . key . model Ċ Ċ import Ġbr . com . project . account . Account Ċ import Ġbr . com . project . bcb . pix . B CB Pix Ċ import Ġbr . com . project . bcb . pix . Delete Pix Key Request Ċ import Ġio . grpc . Status Ċ import Ġio . mic ronaut . http . HttpStatus Ċ import Ġjava . time . Instant Ċ import Ġjava . util .* Ċ import Ġjavax . persistence .* Ċ import Ġjavax . validation . constraints . NotNull Ċ Ċ @ Entity Ċ class ĠKey Ġprivate Ġconstructor ( builder : ĠBuilder ){ ĊĊĠĠĠ Ġcompanion Ġobject { ĊĊĠĠĠĠĠĠĠ Ġfun Ġbuilder () Ġ: ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠBuilder () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġalready Exist Key ( Ġkey Ġ: ĠString , Ġkey Repository : ĠKey Repository Ġ) Ġ: ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġkey Repository . findBy KeyValue ( Ġkey Ġ). isPresent ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġfind ById And ClientId ( ĠclientId : ĠString , Ġpix Key : ĠString , Ġkey Repository : ĠKey Repository Ġ) Ġ: ĠOptional < Key >{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġkey Repository . findById And ClientId ( UUID . fromString ( pix Key ), ĠclientId ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġdelete ( Ġkey : ĠOptional < Key >, Ġkey Repository : ĠKey Repository , Ġb cb Pix : ĠB CB Pix Ġ): ĠKey ResponseData Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( Ġkey . isEmpty Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠKey ResponseData ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Ġ= ĠStatus ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. NOT _ FOUND ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Description (" Pix Ġkey Ġnot Ġfound .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. as RuntimeException () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdelete Key Ġ= Ġb cb Pix . delete Key ( key . get (). key Value , ĠDelete Pix Key Request ( key . get (). key Value , Ġkey . get (). account . is pb )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( Ġdelete Key . status Ġ!= ĠHttpStatus . OK Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠKey ResponseData ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Ġ= ĠStatus ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. INTERNAL ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Description (" Key Ġdelete Ġoperation Ġerror Ġin ĠB CB Ġ- Ġkey Ġnot Ġdeleted ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. as RuntimeException () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey Repository . delete ( Ġkey . get () Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠKey ResponseData ( Ġkey Ġ= Ġkey . get () Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġsearch By ClientId And Pix Id ( key Repository : ĠKey Repository , ĠclientId : ĠString , Ġpix Id : ĠString ): ĠKey ResponseData Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġkey Repository . findById And ClientId ( UUID . fromString ( pix Id ), ĠclientId ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( Ġkey . isEmpty Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠKey ResponseData ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Ġ= ĠStatus ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. NOT _ FOUND ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Description (" Pix Ġkey Ġwith Ġid Ġ{ Ġ$ pix Id Ġ} Ġnot Ġfound .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. as RuntimeException () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠKey ResponseData ( Ġkey Ġ= Ġkey . get () Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġsearch ByKey OrElse ( key : ĠString , Ġkey Repository : ĠKey Repository , Ġotherwise : Ġ() Ġ-> ĠKey ResponseData Ġ): ĠKey ResponseData Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Optional Ġ= Ġkey Repository . findBy KeyValue ( Ġkey Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( Ġkey Optional . isPresent Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠKey ResponseData ( Ġkey Ġ= Ġkey Optional . get () Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġotherwise () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġlist All Key By ClientId ( clientId : ĠString , Ġkey Repository : ĠKey Repository ): ĠList < Key > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġkey Repository . findBy ClientId ( clientId ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ field : Id ĊĠĠĠ Ġ@ field : GeneratedValue ( Ġstrategy Ġ= ĠGeneration Type . AUTO Ġ) ĊĠĠĠ Ġval Ġid Ġ: ĠUUID ? Ġ= Ġnull ĊĊĠĠĠ Ġ@ field : NotNull ĊĠĠĠ Ġval ĠclientId Ġ: ĠString ĊĊĠĠĠ Ġ@ field : NotNull ĊĠĠĠ Ġval Ġclient Name Ġ: ĠString ĊĊĠĠĠ Ġ@ field : NotNull ĊĠĠĠ Ġval Ġc pf Ġ: ĠString ĊĊĠĠĠ Ġ@ field : NotNull ĊĠĠĠ Ġ@ field : Enumer ated ( ĠEnum Type . STRING Ġ) ĊĠĠĠ Ġval Ġkey Type Ġ: ĠKey Type ĊĊĠĠĠ Ġ@ field : NotNull ĊĠĠĠ Ġval Ġkey Value Ġ: ĠString ĊĊĠĠĠ Ġ@ field : NotNull ĊĠĠĠ Ġ@ field : ManyToOne ( Ġcascade Ġ= Ġ[ Cascade Type . MERGE ] Ġ) ĊĠĠĠ Ġval Ġaccount Ġ: ĠAccount ĊĊĠĠĠ Ġ@ field : NotNull ĊĠĠĠ Ġval ĠcreatedAt Ġ: ĠInstant ĊĊĠĠĠ Ġinit { ĊĠĠĠĠĠĠĠ ĠclientId Ġ= Ġbuilder . clientId ĊĠĠĠĠĠĠĠ Ġclient Name Ġ= Ġbuilder . client Name ĊĠĠĠĠĠĠĠ Ġkey Type Ġ= Ġbuilder . key Type ĊĠĠĠĠĠĠĠ Ġkey Value Ġ= Ġbuilder . key Value ĊĠĠĠĠĠĠĠ Ġaccount Ġ= Ġbuilder . account ĊĠĠĠĠĠĠĠ Ġc pf Ġ= Ġbuilder . cpf ĊĠĠĠĠĠĠĠ ĠcreatedAt Ġ= Ġbuilder . createdAt Ġ?: ĠInstant . now () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġregister ( Ġkey Repository : ĠKey Repository ) Ġ: ĠKey Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġkey Repository . save ( Ġthis Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠBuilder { ĊĊĠĠĠĠĠĠĠ Ġlateinit Ġvar ĠclientId Ġ: ĠString ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġclient Name Ġ: ĠString ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġkey Type Ġ: ĠKey Type ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġkey Value Ġ: ĠString ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġaccount Ġ: ĠAccount ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġc pf Ġ: ĠString ĊĠĠĠĠĠĠĠ Ġvar ĠcreatedAt Ġ: ĠInstant ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġfun Ġwith ClientId ( ĠclientId Ġ: ĠString Ġ) Ġ: ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . clientId Ġ= ĠclientId ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġwith C pf ( Ġc pf Ġ: ĠString Ġ) Ġ: ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . cpf Ġ= Ġc pf ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġwith Client Name ( Ġclient Name Ġ: ĠString Ġ) Ġ: ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . client Name Ġ= Ġclient Name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġwith KeyType ( Ġkey Type Ġ: ĠKey Type ) Ġ: ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . key Type Ġ= Ġkey Type ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġwith KeyValue ( Ġkey Value Ġ: ĠString ) Ġ: ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . key Value Ġ= Ġkey Value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġwith Account ( Ġaccount Ġ: ĠAccount Ġ) Ġ: ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . account Ġ= Ġaccount ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġwith Creation Date ( Ġinstant : ĠInstant Ġ) Ġ: ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . createdAt Ġ= Ġinstant ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġbuild () Ġ: ĠKey Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠKey ( Ġthis Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ Ċ }