Forráskód Böngészése

Added methods for updating books

sirekanyan 8 éve
szülő
commit
69356c4c11

+ 8 - 5
app/src/main/java/me/vadik/knigopis/BookActivity.kt

@@ -14,7 +14,6 @@ import me.vadik.knigopis.api.BookCoverSearch
 import me.vadik.knigopis.api.BookCoverSearchImpl
 import me.vadik.knigopis.api.Endpoint
 import me.vadik.knigopis.api.ImageEndpoint
-import me.vadik.knigopis.auth.KAuth
 import me.vadik.knigopis.auth.KAuthImpl
 import me.vadik.knigopis.model.FinishedBookToSend
 import me.vadik.knigopis.model.PlannedBookToSend
@@ -33,7 +32,10 @@ fun Context.createEditBookIntent(bookId: String, finished: Boolean): Intent =
 class BookActivity : AppCompatActivity() {
 
   private val api by lazy { app().baseApi.create(Endpoint::class.java) }
-  private val auth by lazy { KAuthImpl(applicationContext, api) as KAuth }
+  private val repository by lazy {
+    val auth = KAuthImpl(applicationContext, api)
+    BookRepositoryImpl(api, auth) as BookRepository
+  }
   private val imageSearch: BookCoverSearch by lazy {
     BookCoverSearchImpl(
         app().imageApi.create(ImageEndpoint::class.java),
@@ -60,10 +62,12 @@ class BookActivity : AppCompatActivity() {
         findView(R.id.book_year_input)
     )
   }
+  private var bookId: String? = null
 
   override fun onCreate(savedInstanceState: Bundle?) {
     super.onCreate(savedInstanceState)
     setContentView(R.layout.book_edit)
+    bookId = intent.getStringExtra(EXTRA_BOOK_ID)
     toolbar.inflateMenu(R.menu.book_menu)
     toolbar.setNavigationIcon(R.drawable.ic_arrow_back)
     toolbar.setNavigationOnClickListener {
@@ -73,7 +77,7 @@ class BookActivity : AppCompatActivity() {
       when (it.itemId) {
         R.id.option_save_book -> {
           if (readCheckbox.isChecked) {
-            api.postFinishedBook(auth.getAccessToken(), FinishedBookToSend(
+            repository.saveBook(bookId, FinishedBookToSend(
                 titleEditText.text.toString(),
                 authorEditText.text.toString(),
                 dayEditText.text.toString(),
@@ -82,7 +86,7 @@ class BookActivity : AppCompatActivity() {
                 notesTextArea.text.toString()
             ))
           } else {
-            api.postPlannedBook(auth.getAccessToken(), PlannedBookToSend(
+            repository.saveBook(bookId, PlannedBookToSend(
                 titleEditText.text.toString(),
                 authorEditText.text.toString(),
                 notesTextArea.text.toString()
@@ -125,7 +129,6 @@ class BookActivity : AppCompatActivity() {
 
   override fun onStart() {
     super.onStart()
-    val bookId = intent.getStringExtra(EXTRA_BOOK_ID)
     val finished = intent.getBooleanExtra(EXTRA_BOOK_FINISHED, false)
     bookId?.let { id ->
       if (finished) {

+ 32 - 0
app/src/main/java/me/vadik/knigopis/BookRepository.kt

@@ -0,0 +1,32 @@
+package me.vadik.knigopis
+
+import io.reactivex.Completable
+import me.vadik.knigopis.api.Endpoint
+import me.vadik.knigopis.auth.KAuth
+import me.vadik.knigopis.model.FinishedBookToSend
+import me.vadik.knigopis.model.PlannedBookToSend
+
+interface BookRepository {
+  fun saveBook(bookId: String?, book: FinishedBookToSend): Completable
+  fun saveBook(bookId: String?, book: PlannedBookToSend): Completable
+}
+
+class BookRepositoryImpl(
+    private val api: Endpoint,
+    private val auth: KAuth
+) : BookRepository {
+
+  override fun saveBook(bookId: String?, book: FinishedBookToSend) =
+      if (bookId == null) {
+        api.postFinishedBook(auth.getAccessToken(), book)
+      } else {
+        api.putFinishedBook(bookId, auth.getAccessToken(), book)
+      }
+
+  override fun saveBook(bookId: String?, book: PlannedBookToSend) =
+      if (bookId == null) {
+        api.postPlannedBook(auth.getAccessToken(), book)
+      } else {
+        api.putPlannedBook(bookId, auth.getAccessToken(), book)
+      }
+}

+ 14 - 0
app/src/main/java/me/vadik/knigopis/api/Endpoint.kt

@@ -16,6 +16,13 @@ interface Endpoint {
   @GET("books/{id}")
   fun getFinishedBook(@Path("id") id: String): Single<FinishedBook>
 
+  @PUT("books/{id}")
+  fun putFinishedBook(
+      @Path("id") id: String,
+      @Query("access-token") accessToken: String,
+      @Body book: FinishedBookToSend
+  ): Completable
+
   @POST("books")
   fun postFinishedBook(
       @Query("access-token") accessToken: String,
@@ -34,6 +41,13 @@ interface Endpoint {
   @GET("wishes/{id}")
   fun getPlannedBook(@Path("id") id: String): Single<PlannedBook>
 
+  @PUT("wishes/{id}")
+  fun putPlannedBook(
+      @Path("id") id: String,
+      @Query("access-token") accessToken: String,
+      @Body book: PlannedBookToSend
+  ): Completable
+
   @POST("wishes")
   fun postPlannedBook(
       @Query("access-token") accessToken: String,