Skip to content

Instantly share code, notes, and snippets.

package kr.co.seoft.ca.ui.contact
import android.content.Context
import android.content.Intent
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import kr.co.seoft.ca.databinding.ActivityContactBinding
import kr.co.seoft.ca.util.toast
@seoft
seoft / kr.co.seoft.ca.data.ContactModel.kt
Created March 14, 2021 14:52
kr.co.seoft.ca.data.ContactModel.kt
package kr.co.seoft.ca.data
import kr.co.seoft.ca.domain.entity.CreateContactEntity
import java.util.*
import kotlin.random.Random
fun CreateContactEntity.Companion.generateContact(): CreateContactEntity {
return CreateContactEntity(
UUID.randomUUID().toString().replace("-", "").substring(0, 5),
UUID.randomUUID().toString().replace("-", "")
@seoft
seoft / kr.co.seoft.ca.data.repository.contact.ContactRepositoryImpl.kt
Created March 14, 2021 14:49
kr.co.seoft.ca.data.repository.contact.ContactRepositoryImpl.kt
package kr.co.seoft.ca.data.repository.contact
import io.reactivex.Completable
import io.reactivex.Single
import kr.co.seoft.ca.data.repository.contact.interfaces.ContactLocalDataSource
import kr.co.seoft.ca.data.repository.contact.interfaces.ContactRemoteDataSource
import kr.co.seoft.ca.data.util.zipToPair
import kr.co.seoft.ca.domain.entity.ContactEntity
import kr.co.seoft.ca.domain.entity.CreateContactEntity
import kr.co.seoft.ca.domain.repository.ContactRepository
@seoft
seoft / kr.co.seoft.ca.data.apiContactApi.kt
Created March 14, 2021 14:49
datasource (with db,api)
package kr.co.seoft.ca.data.api
import io.reactivex.Single
import kr.co.seoft.ca.data.api.model.ContactResponse
import kr.co.seoft.ca.data.api.model.ContactsResponse
import kr.co.seoft.ca.data.api.model.CreateContact
import retrofit2.http.*
interface ContactApi {
package kr.co.seoft.ca.data.api.model
data class CreateContact(val name: String, val email: String)
data class ContactResponse(val contact: Contact)
data class ContactsResponse(val contacts: List<Contact>)
data class Contact(val id: Long, val name: String, val email: String)
@seoft
seoft / kr.co.seoft.ca.domain.usecase.contact.AddContactUseCase.kt
Created March 14, 2021 14:40
kr.co.seoft.ca.domain.usecase.contact.AddContactUseCase.kt
package kr.co.seoft.ca.domain.usecase.contact
import io.reactivex.Single
import kr.co.seoft.ca.domain.entity.ContactEntity
import kr.co.seoft.ca.domain.entity.CreateContactEntity
import kr.co.seoft.ca.domain.repository.ContactRepository
import kr.co.seoft.ca.domain.usecase.common.RxScheduler
import kr.co.seoft.ca.domain.usecase.common.SUseCase
class AddContactUseCase(
@seoft
seoft / kr.co.seoft.ca.domain.entity.kt
Created March 14, 2021 14:40
kr.co.seoft.ca.domain.entity
package kr.co.seoft.ca.domain.entity
data class ContactEntity(val id: Long, val name: String, val email: String, val isBookmark: Boolean)
data class CreateContactEntity(val name: String, val email: String) {
companion object
}
@seoft
seoft / kr.co.seoft.ca.domain.usecase.common.SUseCase.kt
Created March 14, 2021 14:39
kr.co.seoft.ca.domain.usecase.common.SUseCase
package kr.co.seoft.ca.domain.usecase.common
import io.reactivex.Single
abstract class SUseCase<in Param, Result> {
abstract val scheduler: RxScheduler
internal abstract fun implement(param: Param): Single<Result>
// project 수준 gradle
allprojects {
repositories {
jcenter()
maven { url "https://jitpack.io" }
}
}
// app 수준 gradle
dependencies {
processRemoteConfig.requestRemoteConfig(object : OnRemoteConfigListener {
override fun onRun(message: String?, etc: String?) {
Log.d(TAG, "onRun $message $etc")
startActivity(Intent(baseContext, MainActivity::class.java))
finish()
}
override fun onBlock(message: String?, etc: String?) {
Log.d(TAG, "onBlock $message $etc")
Toast.makeText(baseContext, message, Toast.LENGTH_LONG).show()