Commit a10fba1d authored by rheafernandes's avatar rheafernandes
Browse files

Removed QueryStringBinder implementation

parent 8b339be9
schema-updates 3.9.0-prod-fix 4.1.0_fixes AmiableAnil-patch-1 Gcloud_copy Gcloud_fix Remove_unwantedCode_Gcloud_fix actors-test bulk-upload-comptenecy-mapping bulk-upload-excelsheet bulk-upload-test_excel bulk_upload code-cleanup csp-migration dependabot/maven/platform-core/platform-telemetry/ch.qos.logback-logback-core-1.2.9 dependabot/maven/search-api/search-core/org.apache.httpcomponents-httpclient-4.5.13 ft-spike knowlg-friday knowlg-oneclick local-setup-fix local-setup-kube m-4.2.0 master master-data new_objecttype org-target-enhancement patch-1 patch-2 patch-3 poc_bulk_upload qs-schema rahul_bulk_upload_postgres release-3.0.0 release-3.1.0 release-3.2.0 release-3.3.0 release-3.4.0 release-3.5.0 release-3.6.0 release-3.6.0.1 release-3.7.0 release-3.8.0 release-3.9.0 release-4.0.0 release-4.1.0 release-4.10.0 release-4.10.1 release-4.2.0 release-4.3.0 release-4.4.0 release-4.5.0 release-4.6.0 release-4.7.0 release-4.7.0-debug release-4.8.0 release-4.8.0-debug release-4.9.0 release-4.9.1 release-5.0.0 release-5.0.1 release-5.1.0 release-5.1.0-content release-5.2.0 release-5.3.0 revert-718-visiblity-private-api revert-719-assessment-private-read-api revert-720-visiblity-public-search-api revert-721-visiblity-private-search-api review-4.1.0 s-debug schema-update-4.0 release-5.2.0_RC2 release-5.2.0_RC1 release-5.1.0_RC1 release-5.0.0_RC2 release-5.0.0_RC1 release-4.10.0_RC2 release-4.10.0_RC1 release-4.9.1_RC1 release-4.9.0_RC8 release-4.9.0_RC7 release-4.9.0_RC6 release-4.9.0_RC5 release-4.9.0_RC4 release-4.9.0_RC3 release-4.9.0_RC2 release-4.9.0_RC1 release-4.8.0_RC5 release-4.8.0_RC4 release-4.8.0_RC3 release-4.8.0_RC2 release-4.8.0_RC1 release-4.7.0_RC6 release-4.7.0_RC5 release-4.7.0_RC4 release-4.7.0_RC3 release-4.7.0_RC2 release-4.7.0_RC1 release-4.6.0_RC2 release-4.6.0_RC1 release-4.5.0_RC2 release-4.5.0_RC1 release-4.4.0_RC6 release-4.4.0_RC5 release-4.4.0_RC4 release-4.4.0_RC3 release-4.4.0_RC2 release-4.4.0_RC1 release-4.3.0_RC10 release-4.3.0_RC9 release-4.3.0_RC8 release-4.3.0_RC7 release-4.3.0_RC6 release-4.3.0_RC5 release-4.3.0_RC4 release-4.3.0_RC3 release-4.3.0_RC2 release-4.3.0_RC1 release-4.2.0_RC13 release-4.2.0_RC12 release-4.2.0_RC11 release-4.2.0_RC10 release-4.2.0_RC9 release-4.2.0_RC8 release-4.2.0_RC7 release-4.2.0_RC6 release-4.2.0_RC5 release-4.2.0_RC4 release-4.2.0_RC3 release-4.2.0_RC2 release-4.2.0_RC1 release-4.1.0_RC13 release-4.1.0_RC12 release-4.1.0_RC11 release-4.1.0_RC10 release-4.1.0_RC9 release-4.1.0_RC8 release-4.1.0_RC7 release-4.1.0_RC6 release-4.1.0_RC5 release-4.1.0_RC4 release-4.1.0_RC3 release-4.1.0_RC2 release-4.1.0_RC1 release-4.0.0_RC9 release-4.0.0_RC8 release-4.0.0_RC7 release-4.0.0_RC6 release-4.0.0_RC5 release-4.0.0_RC4 release-4.0.0_RC3 release-4.0.0_RC2 release-4.0.0_RC1 release-3.9.0_RC12 release-3.9.0_RC11 release-3.9.0_RC10 release-3.9.0_RC9 release-3.9.0_RC8 release-3.9.0_RC7 release-3.9.0_RC6 release-3.9.0_RC5 release-3.9.0_RC4 release-3.9.0_RC3 release-3.9.0_RC2 release-3.9.0_RC1 release-3.8.0_RC9 release-3.8.0_RC8 release-3.8.0_RC7 release-3.8.0_RC6 release-3.8.0_RC5 release-3.8.0_RC4 release-3.8.0_RC3 release-3.8.0_RC2 release-3.8.0_RC1 release-3.7.0_RC1 release-3.6.0_RC5 release-3.6.0_RC4 release-3.6.0_RC3 release-3.6.0_RC2 release-3.6.0_RC1 release-3.5.0 release-3.5.0_RC2 release-3.5.0_RC1 release-3.4.0 release-3.4.0_RC2 release-3.4.0_RC1 release-3.3.0_RC10 release-3.3.0_RC9 release-3.3.0_RC8 release-3.3.0_RC7 release-3.3.0_RC6 release-3.3.0_RC5 release-3.3.0_RC4 release-3.3.0_RC3 release-3.3.0_RC2 release-3.3.0_RC1 release-3.2.0_RC9 release-3.2.0_RC8 release-3.2.0_RC7 release-3.2.0_RC6 release-3.2.0_RC5 release-3.2.0_RC4 release-3.2.0_RC3 release-3.2.0_RC2 release-3.1.0 release-3.1.0_RC8 release-3.1.0_RC7 release-3.1.0_RC6 release-3.1.0_RC5 release-3.0.0_RC11 release-3.0.0_RC10 release-3.0.0_RC9
No related merge requests found
Showing with 6 additions and 98 deletions
+6 -98
......@@ -223,13 +223,13 @@ class ContentController @Inject()(@Named(ActorNames.CONTENT_ACTOR) contentActor:
Future(Ok(response).as("application/json"))
}
def upload(identifier: String, params: UploadParams = UploadParams()) = Action.async { implicit request =>
def upload(identifier: String, fileFormat: Option[String], validation: Option[String]) = Action.async { implicit request =>
val headers = commonHeaders()
val content = requestFormData()
content.putAll(headers)
val contentRequest = getRequest(content, headers, "uploadContent")
setRequestContext(contentRequest, version, objectType, schemaName)
contentRequest.getContext.putAll(Map("identifier" -> identifier, "params" -> params))
contentRequest.getContext.putAll(Map("identifier" -> identifier, "params" -> UploadParams(fileFormat, validation.map(_.toBoolean))))
getResult(ApiId.UPLOAD_CONTENT, contentActor, contentRequest)
}
......
......@@ -9,7 +9,7 @@ POST /content/v3/create controllers.v3.ContentController.cre
PATCH /content/v3/update/:identifier controllers.v3.ContentController.update(identifier:String)
GET /content/v3/read/:identifier controllers.v3.ContentController.read(identifier:String, mode:Option[String], fields:Option[String])
POST /content/v3/upload/url/:identifier controllers.v3.ContentController.uploadPreSigned(identifier:String, type: Option[String])
POST /content/v3/upload/:identifier controllers.v3.ContentController.upload(identifier:String, params: org.sunbird.models.UploadParams)
POST /content/v3/upload/:identifier controllers.v3.ContentController.upload(identifier:String, fileFormat: Option[String], validation: Option[String])
POST /content/v3/copy/:identifier controllers.v3.ContentController.copy(identifier:String, mode:Option[String], type:String ?= "deep")
POST /content/v3/dialcode/link controllers.v3.ContentController.linkDialCode()
......
......@@ -158,7 +158,7 @@ class ContentSpec extends BaseSpec {
val files = Seq[FilePart[TemporaryFile]](FilePart("file", "sample.pdf", None, SingletonTemporaryFileCreator.create(file.toPath)))
val multipartBody = MultipartFormData(Map[String, Seq[String]](), files, Seq[BadPart]())
val fakeRequest = FakeRequest().withMultipartFormDataBody(multipartBody)
val result = controller.upload("01234", UploadParams())(fakeRequest)
val result = controller.upload("01234", None, None)(fakeRequest)
isOK(result)
status(result) must equalTo(OK)
}
......@@ -169,7 +169,7 @@ class ContentSpec extends BaseSpec {
val files = Seq[FilePart[TemporaryFile]](FilePart("file", "sample.pdf", None, SingletonTemporaryFileCreator.create(file.toPath)))
val multipartBody = MultipartFormData(Map[String, Seq[String]]("fileUrl" -> Seq("https://abc.com/content/sample.pdf"), "filePath" -> Seq("/program/id")), files, Seq[BadPart]())
val fakeRequest = FakeRequest().withMultipartFormDataBody(multipartBody)
val result = controller.upload("01234", UploadParams())(fakeRequest)
val result = controller.upload("01234", None, None)(fakeRequest)
isOK(result)
status(result) must equalTo(OK)
}
......@@ -180,7 +180,7 @@ class ContentSpec extends BaseSpec {
val files = Seq[FilePart[TemporaryFile]](FilePart("file", "sample.pdf", None, SingletonTemporaryFileCreator.create(file.toPath)))
val multipartBody = MultipartFormData(Map[String, Seq[String]](), files, Seq[BadPart]())
val fakeRequest = FakeRequest().withMultipartFormDataBody(multipartBody)
val result = controller.upload("01234", UploadParams(Some("composed-h5p-zip")))(fakeRequest)
val result = controller.upload("01234", Some("composed-h5p-zip"), None)(fakeRequest)
isOK(result)
status(result) must equalTo(OK)
}
......
package org.sunbird.models
import org.specs2.mutable.Specification
import play.api.mvc.QueryStringBindable
object UploadParamsSpec extends Specification {
"UploadParams query string binder" should {
val subject = implicitly[QueryStringBindable[UploadParams]]
"Unbind UploadParams as string" in {
subject.unbind("key", UploadParams(Some("composed-h5p-zip"), Some(true))) must be_==("fileFormat=composed-h5p-zip&validation=true")
}
"Unbind UploadParams as string" in {
subject.unbind("key", UploadParams(Some(""), Some(true))) must be_==("fileFormat=&validation=true")
}
"Unbind UploadParams as string" in {
subject.unbind("key", UploadParams(Some("composed-h5p-zip"), Some(false))) must be_==("fileFormat=composed-h5p-zip&validation=false")
}
"Bind fileFormat to UploadParams" in {
subject.bind("key", Map("fileFormat" -> Seq("composed-h5p-zip"))) must be_==(Some(Right(UploadParams(Some("composed-h5p-zip"),None))))
}
"Bind validation to UploadParams" in {
subject.bind("key", Map("validation" -> Seq("true"))) must be_==(Some(Right(UploadParams(None, Some(true)))))
}
"Fail on un parsable UploadParams" in {
subject.bind("key", Map("key" -> Seq(""))) must be_==(Some(Right(UploadParams(None,None))))
}
}
"QueryStringBindable.bindableString" should {
"unbind with null values" in {
import QueryStringBindable._
val boundValue = bindableString.unbind("key", null)
boundValue must beEqualTo("key=")
}
}
"QueryStringBindable.bindableBoolean" should {
"unbind with false values" in {
import QueryStringBindable._
val boundValue = bindableBoolean.unbind("key", false)
boundValue must beEqualTo("key=false")
}
}
}
\ No newline at end of file
......@@ -84,17 +84,6 @@
<version>4.4.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.typesafe.play</groupId>
<artifactId>play_${scala.major.version}</artifactId>
<version>${play2.version}</version>
<exclusions>
<exclusion>
<artifactId>guava</artifactId>
<groupId>com.google.guava</groupId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
......
package org.sunbird.models
import play.api.mvc.QueryStringBindable
case class UploadParams(fileFormat: Option[String] = Some(""), validation: Option[Boolean] = Some(true))
object UploadParams {
implicit def queryStringBinder(implicit stringBinder: QueryStringBindable[String],
booleanBinder: QueryStringBindable[Boolean]) = new QueryStringBindable[UploadParams] {
private def subBind[T](key: String, subKey: String, params: Map[String, Seq[String]])(implicit b: QueryStringBindable[T]): Either.RightProjection[String, Option[T]] = {
b.bind(subKey, params).map(_.right.map(r => Option(r))).getOrElse(Right(None)).right
}
override def bind(key: String, params: Map[String, Seq[String]]): Option[Either[String, UploadParams]] = Some {
def bnd[T](s: String)(implicit b: QueryStringBindable[T]) = subBind[T](key, s, params)
for {
fileFormat <- bnd[String]("fileFormat")
validation <- bnd[Boolean]("validation")
} yield UploadParams(fileFormat, validation)
}
override def unbind(key: String, params: UploadParams): String = {
def ubnd[T](key: String, s: Option[T])(implicit b: QueryStringBindable[T]) = s.map(f => b.unbind(key, f))
val keys = Seq(
ubnd("fileFormat", params.fileFormat),
ubnd("validation", params.validation)
).flatten
keys.mkString("&")
}
}
}
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment