package Ġcom . f ory ou and me . domain . use case . auth Ċ Ċ import Ġcom . f ory ou and me . data . datasource . Study Settings Ċ import Ġcom . f ory ou and me . domain . use case . analytics . Set Analytics UserId UseCase Ċ import Ġcom . f ory ou and me . domain . use case . push . Get Push Token UseCase Ċ import Ġcom . f ory ou and me . domain . use case . user . GetUser UseCase Ċ import Ġcom . f ory ou and me . domain . use case . user . Save User UseCase Ċ import Ġcom . f ory ou and me . domain . use case . user . Update User Firebase Token UseCase Ċ import Ġcom . f ory ou and me . domain . use case . user . Update User TimeZone UseCase Ċ import Ġcom . f ory ou and me . entity . user . User Ċ import Ġorg . th reet en . bp . Zone Id Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠPin Login UseCase Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġrepository : ĠAuth Repository , ĊĠĠĠ Ġprivate Ġval Ġsettings : ĠStudy Settings , ĊĠĠĠ Ġprivate Ġval Ġupdate User TimeZone UseCase : ĠUpdate User TimeZone UseCase , ĊĠĠĠ Ġprivate Ġval Ġget Push Token UseCase : ĠGet Push Token UseCase , ĊĠĠĠ Ġprivate Ġval Ġupdate User Firebase Token UseCase : ĠUpdate User Firebase Token UseCase , ĊĠĠĠ Ġprivate Ġval Ġsave User UseCase : ĠSave User UseCase , ĊĠĠĠ Ġprivate Ġval ĠgetUser UseCase : ĠGetUser UseCase , ĊĠĠĠ Ġprivate Ġval Ġset Analytics UserId UseCase : ĠSet Analytics UserId UseCase , ĊĠĠĠ Ġprivate Ġval Ġlog Out UseCase : ĠLog Out UseCase Ċ ) Ġ{ ĊĊĠĠĠ Ġsuspend Ġoperator Ġfun Ġinvoke ( pin : ĠString ): ĠUser Ġ= ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġrepository . pin Login ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsettings . study Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ pin ${ settings . pin Code Suffix }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate User TimeZone UseCase ( user . token , ĠZone Id . system Default ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfirebase Token Ġ= Ġget Push Token UseCase () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate User Firebase Token UseCase ( user . token , Ġfirebase Token ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsave User UseCase ( user ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġupdated User Ġ= ĠgetUser UseCase () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Analytics UserId UseCase ( updated User . id ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdated User ĊĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( throwable : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog Out UseCase () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġthrowable ĊĠĠĠĠĠĠĠ Ġ} Ċ Ċ }