Przeglądaj źródła

Added FlickrApi interfaces and models for search response

Ana Sekuloski 3 lat temu
rodzic
commit
ed8295a2d3

+ 5 - 0
flickersearchlibrary/build.gradle

@@ -27,6 +27,11 @@ android {
 
 dependencies {
 
+    // Networking libraries (Retrofit)
+    implementation "com.squareup.retrofit2:retrofit:2.9.0"
+    implementation "com.squareup.retrofit2:converter-moshi:2.9.0"
+    implementation "com.squareup.moshi:moshi-kotlin:1.13.0"
+
     androidTestImplementation 'androidx.test.ext:junit:1.1.3'
     androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
 }

+ 21 - 0
flickersearchlibrary/src/main/java/com/livelike/flickersearchlibrary/api/FlickrApi.kt

@@ -0,0 +1,21 @@
+package com.livelike.flickersearchlibrary.api
+
+import com.livelike.flickersearchlibrary.api.model.response.SearchResponse
+import com.livelike.flickersearchlibrary.api.utils.*
+import retrofit2.http.GET
+import retrofit2.http.Query
+
+/**
+ * API interface for Flickr services.
+ */
+internal interface FlickrApi {
+
+    @GET("services/rest")
+    suspend fun search(
+        @Query(QUERY_TEXT) searchQuery: String,
+        @Query(QUERY_METHOD) method: String = SEARCH_METHOD,
+        @Query(QUERY_API_KEY) apiKey: String = DEFAULT_API_KEY,
+        @Query(QUERY_FORMAT) format: String = JSON_FORMAT,
+        @Query(QUERY_NO_JSON_CALLBACK) noJsonCallback: Boolean = NO_JSON_CALLBACK,
+    ): SearchResponse
+}

+ 24 - 0
flickersearchlibrary/src/main/java/com/livelike/flickersearchlibrary/api/model/Photo.kt

@@ -0,0 +1,24 @@
+package com.livelike.flickersearchlibrary.api.model
+
+import com.squareup.moshi.Json
+
+data class Photo(
+    @Json(name = "id")
+    val id: String,
+    @Json(name = "owner")
+    val owner: String,
+    @Json(name = "secret")
+    val secret: String,
+    @Json(name = "server")
+    val server: String,
+    @Json(name = "farm")
+    val farm: Int,
+    @Json(name = "title")
+    val title: String,
+    @Json(name = "ispublic")
+    val isPublic: Int,
+    @Json(name = "isfriend")
+    val isFriend: Int,
+    @Json(name = "isfamily")
+    val isFamily: Int
+)

+ 16 - 0
flickersearchlibrary/src/main/java/com/livelike/flickersearchlibrary/api/model/PhotosPage.kt

@@ -0,0 +1,16 @@
+package com.livelike.flickersearchlibrary.api.model
+
+import com.squareup.moshi.Json
+
+data class PhotosPage(
+    @Json(name = "page")
+    val page: Int,
+    @Json(name = "pages")
+    val pages: Int,
+    @Json(name = "perpage")
+    val perpage: Int,
+    @Json(name = "total")
+    val total: Int,
+    @Json(name = "photo")
+    val photos: List<Photo>
+)

+ 9 - 0
flickersearchlibrary/src/main/java/com/livelike/flickersearchlibrary/api/model/response/SearchResponse.kt

@@ -0,0 +1,9 @@
+package com.livelike.flickersearchlibrary.api.model.response
+
+import com.livelike.flickersearchlibrary.api.model.PhotosPage
+import com.squareup.moshi.Json
+
+internal data class SearchResponse(
+    @Json(name = "photos")
+    val photos: PhotosPage
+)

+ 18 - 0
flickersearchlibrary/src/main/java/com/livelike/flickersearchlibrary/api/utils/Constants.kt

@@ -0,0 +1,18 @@
+package com.livelike.flickersearchlibrary.api.utils
+
+// Constant values for the FlickrApi interface
+internal const val DEFAULT_API_KEY = "3976fde3792b699fbcda31f52e1cb306"
+internal const val JSON_FORMAT = "json"
+internal const val NO_JSON_CALLBACK = true
+
+// Constant Query keys for the Flickr API interface
+internal const val QUERY_API_KEY = "api_key"
+internal const val QUERY_FORMAT = "format"
+internal const val QUERY_NO_JSON_CALLBACK = "nojsoncallback"
+internal const val QUERY_METHOD = "method"
+
+// Constant values for methods supported in the library
+internal const val SEARCH_METHOD = "flickr.photos.search"
+
+// Constant Query keys for methods supported in the library
+internal const val QUERY_TEXT = "text"