Skip to content

Instantly share code, notes, and snippets.

@cdsap
cdsap / build.gradle
Created April 16, 2018 10:55
Root BuildGradle. Hello World example
dependencies {
classpath libraries.appengineGradle
classpath libraries.kotlinGradle
}
@cdsap
cdsap / build.gradle
Last active April 19, 2018 10:57
Server BuildGradle. Hello World example
apply plugin: 'war'
apply plugin: 'kotlin'
apply plugin: 'com.google.cloud.tools.appengine'
dependencies {
implementation libraries.kotlin
implementation libraries.javaxServlet
}
@cdsap
cdsap / AppModule.kt
Last active April 16, 2018 10:59
Partial impl AppMpdule Client
@Provides
@Singleton
fun providesSyncTrades(@Named("remote") getTradesRepositoryRemote: GetTradesRepository,
@Named("local") getTradesRepositoryLocal: GetTradesRepository): SyncTrades {
return SyncTradesImpl(getTradesRepositoryRemote, getTradesRepositoryLocal)
}
@Provides
@Singleton
fun providesGetTrades(@Named("remote") getTradesRepositoryRemote: GetTradesRepository,
@cdsap
cdsap / synctradesimpl.kt
Last active April 16, 2018 11:29
SyncTradesImpl. Client
class SyncTradesImpl @Inject constructor(@Named("remote") private val remoteRepository: GetTradesRepository,
@Named("local") private val localRepository: GetTradesRepository)
: SyncTrades {
override fun syncTrades(id: Long) {
remoteRepository.getTrades(id).trades
.map { TradeDb(it.trade_id, it.rate, it.amount, it.trade_date, it.trade_type) }
.map { localRepository.save(it) }
}
}
@cdsap
cdsap / differences.csv
Last active April 17, 2018 11:28
differences.csv
Server Client
Main Entity Domain Model Trade Trade
Entity Local Storage TradeObjectify TradeRoom
UseCase 1 GetTrades GetTrades
UseCase 2 SyncTrades SyncTrades
class CallWrapper(private val request: Request, private var executed: Boolean = false,
private var cancelled: Boolean = false) : Call {
override fun enqueue(responseCallback: Callback?) {}
override fun isExecuted() = executed
override fun clone() = CallWrapper(request)
override fun isCanceled() = cancelled
@cdsap
cdsap / AppModule.kt
Created April 18, 2018 12:57
Module Server
@Provides
fun providesGetTrades(
@Named("local") localRepository: GetTradesRepository,
@Named("remote") remoteRepository: GetTradesRepository): GetTrades =
GetTradesImpl(localRepository, remoteRepository)
@Provides
fun providesSyncTrades(
@Named("local") localRepository: GetTradesRepository,
@Named("remote") remoteRepository: GetTradesRepository): SyncTrades =
@cdsap
cdsap / GetTradesRemoteRepository.kt
Created April 18, 2018 13:06
GetTradesRemoteRepositoryServer
class GetTradesRemoteRepository @Inject constructor(private val api: Api) : GetTradesRepository {
override fun getTrades(id: Long): Trades {
return api.getTrades(id)
}
@cdsap
cdsap / ApiServer.kt
Created April 18, 2018 13:08
Api Endpoints
@Api(name = "api", version = "v1")
class ApiServer {
@ApiMethod(name = "sync",
httpMethod = ApiMethod.HttpMethod.GET,
path = "sync/{pair}")
fun sync(@Named("pair") id: String) = syncService.sync(id)
@ApiMethod(name = "trades",
httpMethod = ApiMethod.HttpMethod.GET,
path = "trades/{pair}")
@cdsap
cdsap / build.gradle
Created May 14, 2018 14:00
TestImplementation JunitRunner
testImplementation 'com.android.support.test:rules:1.0.2'
testImplementation 'com.android.support.test:runner:1.0.2'
testImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
testImplementation "org.robolectric:robolectric:4.0-alpha-1"