diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..08d9b7f --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,12 @@ +# PULL REQUEST + +## Description + + +## ScreenShots +

+ +

+ +## Reference +- diff --git a/app/build.gradle b/app/build.gradle index b1247a5..d279760 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -26,7 +26,7 @@ android { versionCode versionMajor * 10000 + versionMinor * 1000 + versionPatch * 100 + versionBuild versionName "${versionMajor}.${versionMinor}.${versionPatch}" - buildConfigField "String", "BASE_URL", "\"\"" + buildConfigField "String", "BASE_URL", getBaseUrl("BASE_URL") project.archivesBaseName = "android-" + defaultConfig.versionCode testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" vectorDrawables.useSupportLibrary = true @@ -129,3 +129,15 @@ dependencies { testImplementation deps.test.archCore testImplementation deps.test.robolectric } + +String getBaseUrl(String name) { + try { + def properties = new Properties() + properties.load(new FileInputStream(rootProject.file("./local.properties"))) + def baseUrl = properties.getProperty(name) + if(baseUrl != null) baseUrl else "\"https://fake.api.com\"" + } catch(FileNotFoundException e) { + e.printStackTrace() + "\"https://fake.api.com\"" + } +} diff --git a/app/src/main/kotlin/kr/tooni/tooni/extensions/Activity.kt b/app/src/main/kotlin/kr/tooni/tooni/core/extensions/Activity.kt similarity index 90% rename from app/src/main/kotlin/kr/tooni/tooni/extensions/Activity.kt rename to app/src/main/kotlin/kr/tooni/tooni/core/extensions/Activity.kt index 5a10785..c0d9177 100644 --- a/app/src/main/kotlin/kr/tooni/tooni/extensions/Activity.kt +++ b/app/src/main/kotlin/kr/tooni/tooni/core/extensions/Activity.kt @@ -1,7 +1,7 @@ /* * Created by Leo on 2021. 05. 19 .. */ -package kr.tooni.tooni.extensions +package kr.tooni.tooni.core.extensions import androidx.appcompat.app.AppCompatActivity import androidx.lifecycle.LiveData diff --git a/app/src/main/kotlin/kr/tooni/tooni/extensions/Context.kt b/app/src/main/kotlin/kr/tooni/tooni/core/extensions/Context.kt similarity index 87% rename from app/src/main/kotlin/kr/tooni/tooni/extensions/Context.kt rename to app/src/main/kotlin/kr/tooni/tooni/core/extensions/Context.kt index 3b08826..d7f8d67 100644 --- a/app/src/main/kotlin/kr/tooni/tooni/extensions/Context.kt +++ b/app/src/main/kotlin/kr/tooni/tooni/core/extensions/Context.kt @@ -1,7 +1,7 @@ /* * Created by Leo on 2021. 05. 19 .. */ -package kr.tooni.tooni.extensions +package kr.tooni.tooni.core.extensions import android.content.Context import androidx.annotation.DrawableRes diff --git a/app/src/main/kotlin/kr/tooni/tooni/extensions/Fragment.kt b/app/src/main/kotlin/kr/tooni/tooni/core/extensions/Fragment.kt similarity index 95% rename from app/src/main/kotlin/kr/tooni/tooni/extensions/Fragment.kt rename to app/src/main/kotlin/kr/tooni/tooni/core/extensions/Fragment.kt index f82e37a..89aef62 100644 --- a/app/src/main/kotlin/kr/tooni/tooni/extensions/Fragment.kt +++ b/app/src/main/kotlin/kr/tooni/tooni/core/extensions/Fragment.kt @@ -1,7 +1,7 @@ /* * Created by Leo on 2021. 04. 17 .. */ -package kr.tooni.tooni.extensions +package kr.tooni.tooni.core.extensions import android.graphics.drawable.Drawable import androidx.annotation.ColorRes diff --git a/app/src/main/kotlin/kr/tooni/tooni/extensions/Glide.kt b/app/src/main/kotlin/kr/tooni/tooni/core/extensions/Glide.kt similarity index 96% rename from app/src/main/kotlin/kr/tooni/tooni/extensions/Glide.kt rename to app/src/main/kotlin/kr/tooni/tooni/core/extensions/Glide.kt index d42f8d3..ddbb477 100644 --- a/app/src/main/kotlin/kr/tooni/tooni/extensions/Glide.kt +++ b/app/src/main/kotlin/kr/tooni/tooni/core/extensions/Glide.kt @@ -1,7 +1,7 @@ /* * Created by Leo on 2021. 04. 17 .. */ -package kr.tooni.tooni.extensions +package kr.tooni.tooni.core.extensions import android.graphics.drawable.Drawable import android.widget.ImageView diff --git a/app/src/main/kotlin/kr/tooni/tooni/extensions/ImageView.kt b/app/src/main/kotlin/kr/tooni/tooni/core/extensions/ImageView.kt similarity index 94% rename from app/src/main/kotlin/kr/tooni/tooni/extensions/ImageView.kt rename to app/src/main/kotlin/kr/tooni/tooni/core/extensions/ImageView.kt index 31f0e4e..d5e5748 100644 --- a/app/src/main/kotlin/kr/tooni/tooni/extensions/ImageView.kt +++ b/app/src/main/kotlin/kr/tooni/tooni/core/extensions/ImageView.kt @@ -1,7 +1,7 @@ /* * Created by Leo on 2021. 04. 17 .. */ -package kr.tooni.tooni.extensions +package kr.tooni.tooni.core.extensions import android.graphics.drawable.Drawable import android.widget.ImageView diff --git a/app/src/main/kotlin/kr/tooni/tooni/extensions/Primitive.kt b/app/src/main/kotlin/kr/tooni/tooni/core/extensions/Primitive.kt similarity index 90% rename from app/src/main/kotlin/kr/tooni/tooni/extensions/Primitive.kt rename to app/src/main/kotlin/kr/tooni/tooni/core/extensions/Primitive.kt index ef4c866..7d1bf56 100644 --- a/app/src/main/kotlin/kr/tooni/tooni/extensions/Primitive.kt +++ b/app/src/main/kotlin/kr/tooni/tooni/core/extensions/Primitive.kt @@ -1,7 +1,7 @@ /* * Created by Leo on 2021. 04. 17 .. */ -package kr.tooni.tooni.extensions +package kr.tooni.tooni.core.extensions import android.content.Context import android.content.res.Resources diff --git a/app/src/main/kotlin/kr/tooni/tooni/extensions/RecyclerView.kt b/app/src/main/kotlin/kr/tooni/tooni/core/extensions/RecyclerView.kt similarity index 92% rename from app/src/main/kotlin/kr/tooni/tooni/extensions/RecyclerView.kt rename to app/src/main/kotlin/kr/tooni/tooni/core/extensions/RecyclerView.kt index e5d1417..3981ae0 100644 --- a/app/src/main/kotlin/kr/tooni/tooni/extensions/RecyclerView.kt +++ b/app/src/main/kotlin/kr/tooni/tooni/core/extensions/RecyclerView.kt @@ -1,7 +1,7 @@ /* * Created by Leo on 2021. 04. 17 .. */ -package kr.tooni.tooni.extensions +package kr.tooni.tooni.core.extensions import android.content.Context import androidx.recyclerview.widget.RecyclerView diff --git a/app/src/main/kotlin/kr/tooni/tooni/extensions/Toast.kt b/app/src/main/kotlin/kr/tooni/tooni/core/extensions/Toast.kt similarity index 95% rename from app/src/main/kotlin/kr/tooni/tooni/extensions/Toast.kt rename to app/src/main/kotlin/kr/tooni/tooni/core/extensions/Toast.kt index 5614f78..e61e449 100644 --- a/app/src/main/kotlin/kr/tooni/tooni/extensions/Toast.kt +++ b/app/src/main/kotlin/kr/tooni/tooni/core/extensions/Toast.kt @@ -1,7 +1,7 @@ /* * Created by Leo on 2021. 04. 17 .. */ -package kr.tooni.tooni.extensions +package kr.tooni.tooni.core.extensions import android.content.Context import android.widget.Toast diff --git a/app/src/main/kotlin/kr/tooni/tooni/core/model/Author.kt b/app/src/main/kotlin/kr/tooni/tooni/core/model/Author.kt new file mode 100644 index 0000000..869be36 --- /dev/null +++ b/app/src/main/kotlin/kr/tooni/tooni/core/model/Author.kt @@ -0,0 +1,18 @@ +/* + * Created by Leo on 2021. 05. 19 .. + */ +package kr.tooni.tooni.core.model + +data class Author( + val id: Long, + val name: String, +) { + + companion object { + + val EMPTY = Author( + id = 0, + name = "" + ) + } +} diff --git a/app/src/main/kotlin/kr/tooni/tooni/core/model/Site.kt b/app/src/main/kotlin/kr/tooni/tooni/core/model/Site.kt new file mode 100644 index 0000000..96bc90b --- /dev/null +++ b/app/src/main/kotlin/kr/tooni/tooni/core/model/Site.kt @@ -0,0 +1,29 @@ +/* + * Created by Leo on 2021. 05. 19 .. + */ +package kr.tooni.tooni.core.model + +import com.google.gson.annotations.SerializedName + +data class Site( + val site: Type?, + val thumbnail: String? +) { + + enum class Type { + @SerializedName("NAVER") + NAVER, + @SerializedName("DAUM") + DAUM, + @SerializedName("NONE") + NONE + } + + companion object { + + val EMPTY = Site( + site = Type.NONE, + thumbnail = null + ) + } +} diff --git a/app/src/main/kotlin/kr/tooni/tooni/core/model/Webtoon.kt b/app/src/main/kotlin/kr/tooni/tooni/core/model/Webtoon.kt new file mode 100644 index 0000000..c07f9d5 --- /dev/null +++ b/app/src/main/kotlin/kr/tooni/tooni/core/model/Webtoon.kt @@ -0,0 +1,27 @@ +/* + * Created by Leo on 2021. 05. 19 .. + */ +package kr.tooni.tooni.core.model + +data class Webtoon( + val id: Long, + val authors: List, + val site: Site, + val thumbnail: String, + val title: String +) { + + companion object { + + val EMPTY = Webtoon( + id = 0, + authors = listOf(), + site = Site( + site = null, + thumbnail = null + ), + thumbnail = "", + title = "" + ) + } +} diff --git a/app/src/main/kotlin/kr/tooni/tooni/core/model/WeekDay.kt b/app/src/main/kotlin/kr/tooni/tooni/core/model/WeekDay.kt new file mode 100644 index 0000000..e0be55d --- /dev/null +++ b/app/src/main/kotlin/kr/tooni/tooni/core/model/WeekDay.kt @@ -0,0 +1,14 @@ +/* + * Created by Leo on 2021. 05. 19 .. + */ +package kr.tooni.tooni.core.model + +enum class WeekDay(val value: String) { + MON("mon"), + TUE("thu"), + WED("wed"), + THU("thu"), + FRI("fri"), + SAT("sat"), + SUN("sun") +} diff --git a/app/src/main/kotlin/kr/tooni/tooni/data/api/ListApi.kt b/app/src/main/kotlin/kr/tooni/tooni/data/api/ListApi.kt new file mode 100644 index 0000000..c7f75b2 --- /dev/null +++ b/app/src/main/kotlin/kr/tooni/tooni/data/api/ListApi.kt @@ -0,0 +1,24 @@ +/* + * Created by Leo on 2021. 05. 19 .. + */ +package kr.tooni.tooni.data.api + +import io.reactivex.rxjava3.core.Single +import kr.tooni.tooni.data.response.WebtoonSearchResponse +import kr.tooni.tooni.data.response.WebtoonWeekDayResponse +import retrofit2.http.GET +import retrofit2.http.Path +import retrofit2.http.Query + +interface ListApi : Api { + + @GET("search") + fun search( + @Query("query") query: String + ): Single + + @GET("weekday/{weekday}") + fun getWebtoonsByDay( + @Path("weekday") weekday: String + ): Single +} diff --git a/app/src/main/kotlin/kr/tooni/tooni/data/response/BaseResponse.kt b/app/src/main/kotlin/kr/tooni/tooni/data/response/BaseResponse.kt new file mode 100644 index 0000000..f5ea872 --- /dev/null +++ b/app/src/main/kotlin/kr/tooni/tooni/data/response/BaseResponse.kt @@ -0,0 +1,22 @@ +/* + * Created by Leo on 2021. 05. 19 .. + */ +package kr.tooni.tooni.data.response + +import com.google.gson.annotations.SerializedName + +abstract class BaseResponse { + val status: Status? = null + val message: String? = null + + enum class Status { + @SerializedName("OK") + OK, + + @SerializedName("CLIENT_ERROR") + CLIENT_ERROR, + + @SerializedName("SERVER_ERROR") + SERVER_ERROR + } +} diff --git a/app/src/main/kotlin/kr/tooni/tooni/data/response/Response.kt b/app/src/main/kotlin/kr/tooni/tooni/data/response/Response.kt deleted file mode 100644 index 1c91599..0000000 --- a/app/src/main/kotlin/kr/tooni/tooni/data/response/Response.kt +++ /dev/null @@ -1,6 +0,0 @@ -/* - * Created by Leo on 2021. 04. 18 .. - */ -package kr.tooni.tooni.data.response - -interface Response diff --git a/app/src/main/kotlin/kr/tooni/tooni/data/response/WebtoonSearchResponse.kt b/app/src/main/kotlin/kr/tooni/tooni/data/response/WebtoonSearchResponse.kt new file mode 100644 index 0000000..858f80a --- /dev/null +++ b/app/src/main/kotlin/kr/tooni/tooni/data/response/WebtoonSearchResponse.kt @@ -0,0 +1,16 @@ +/* + * Created by Leo on 2021. 05. 19 .. + */ +package kr.tooni.tooni.data.response + +import kr.tooni.tooni.core.model.Webtoon + +data class WebtoonSearchResponse( + val data: WebtoonSearch? +) : BaseResponse() { + + data class WebtoonSearch( + val query: String, + val webtoons: List + ) +} diff --git a/app/src/main/kotlin/kr/tooni/tooni/data/response/WebtoonWeekDayResponse.kt b/app/src/main/kotlin/kr/tooni/tooni/data/response/WebtoonWeekDayResponse.kt new file mode 100644 index 0000000..1cdaf19 --- /dev/null +++ b/app/src/main/kotlin/kr/tooni/tooni/data/response/WebtoonWeekDayResponse.kt @@ -0,0 +1,17 @@ +/* + * Created by Leo on 2021. 05. 19 .. + */ +package kr.tooni.tooni.data.response + +import kr.tooni.tooni.core.model.Site +import kr.tooni.tooni.core.model.Webtoon + +data class WebtoonWeekDayResponse( + val data: WebtoonWeekDay +) : BaseResponse() { + + data class WebtoonWeekDay( + val sites: List, + val webtoons: List + ) +} diff --git a/app/src/main/kotlin/kr/tooni/tooni/features/day/DayWebtoonFragment.kt b/app/src/main/kotlin/kr/tooni/tooni/features/day/DayWebtoonFragment.kt index 44402cd..75d8e62 100644 --- a/app/src/main/kotlin/kr/tooni/tooni/features/day/DayWebtoonFragment.kt +++ b/app/src/main/kotlin/kr/tooni/tooni/features/day/DayWebtoonFragment.kt @@ -8,9 +8,15 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.fragment.app.viewModels +import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers +import io.reactivex.rxjava3.disposables.CompositeDisposable +import io.reactivex.rxjava3.schedulers.Schedulers import kr.tooni.tooni.R import kr.tooni.tooni.base.BaseFragment +import kr.tooni.tooni.data.ApiProvider +import kr.tooni.tooni.data.api.ListApi import kr.tooni.tooni.databinding.FragmentWebtoonByDayBinding +import timber.log.Timber class DayWebtoonFragment : BaseFragment(R.layout.fragment_webtoon_by_day) { @@ -30,8 +36,6 @@ class DayWebtoonFragment : override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - - // do LiveData observe } companion object { diff --git a/app/src/main/kotlin/kr/tooni/tooni/features/day/DayWebtoonViewModel.kt b/app/src/main/kotlin/kr/tooni/tooni/features/day/DayWebtoonViewModel.kt index 16e3757..2b20547 100644 --- a/app/src/main/kotlin/kr/tooni/tooni/features/day/DayWebtoonViewModel.kt +++ b/app/src/main/kotlin/kr/tooni/tooni/features/day/DayWebtoonViewModel.kt @@ -3,7 +3,22 @@ */ package kr.tooni.tooni.features.day +import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers +import io.reactivex.rxjava3.schedulers.Schedulers import kr.tooni.tooni.base.BaseViewModel +import kr.tooni.tooni.data.ApiProvider +import kr.tooni.tooni.data.api.ListApi +import timber.log.Timber class DayWebtoonViewModel : BaseViewModel() { + + init { + ApiProvider.create(ListApi::class.java).search("조석") + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe({ + // do something + }, Timber::e) + .addDisposable() + } }