package Ġcom . mon day 8 am . tweet me ck . domain . auth Ċ Ċ import Ġandroid . net . Uri Ċ import Ġcom . mon day 8 am . tweet me ck . data . local . Twitter Database Ċ import Ġcom . mon day 8 am . tweet me ck . data . map pers . User To Twitter User Ċ import Ġcom . mon day 8 am . tweet me ck . data . map pers . as Lambda Ċ import Ġcom . mon day 8 am . tweet me ck . data . map pers . map To Session Ċ import Ġcom . mon day 8 am . tweet me ck . data . map pers . map With Ċ import Ġcom . mon day 8 am . tweet me ck . data . remote . Request Token Ċ import Ġcom . mon day 8 am . tweet me ck . data . remote . Twitter Client Ċ import Ġcom . mon day 8 am . tweet me ck . di . Io Dispatcher Ċ import Ġcom . mon day 8 am . tweet me ck . domain . Suspend UseCase Ċ import Ġcom . mon day 8 am . tweet me ck . domain . oauth Verifier Const Ċ import Ġkotlinx . coroutines . Coroutine Dispatcher Ċ import Ġjavax . inject . Inject Ċ Ċ open Ġclass ĠSign In UseCase Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġremote Client : ĠTwitter Client , ĊĠĠĠ Ġprivate Ġval Ġdb : ĠTwitter Database , ĊĠĠĠ Ġ@ Io Dispatcher Ġdefault Dispatcher : ĠCor outine Dispatcher Ċ ) Ġ: ĠS uspend UseCase < Pair < Uri , ĠRequest Token >, ĠUnit >( default Dispatcher ) Ġ{ ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġexecute ( parameters : ĠPair < Uri , ĠRequest Token >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġ( result Uri , Ġrequest Token ) Ġ= Ġparameters ĊĊĠĠĠĠĠĠĠ Ġval Ġverifier Ġ= Ġresult Uri . getQuery Parameter ( oauth Verifier Const ) Ġ?: Ġthrow ĠException (" Invalid Ġverifier Ġtoken !") ĊĠĠĠĠĠĠĠ Ġval Ġsession Ġ= Ġremote Client . get AccessToken ( request Token , Ġverifier ). map To Session () ĊĠĠĠĠĠĠĠ Ġval Ġuser Content Ġ= Ġremote Client . getUser ( session . userId ). map With ( User To Twitter User (). as Lambda ()) ĊĊĠĠĠĠĠĠĠ Ġdb . clear All Tables () ĊĊĠĠĠĠĠĠĠ Ġdb . twitter User Dao (). insert ( user Content ) ĊĠĠĠĠĠĠĠ Ġdb . session Dao (). insert ( session ) ĊĠĠĠ Ġ} Ċ } Ċ