in formstack-baton-requests/src/main/scala/com/gu/identity/formstackbatonrequests/services/FormstackService.scala [125:161]
protected def getSubmissions(
requestEmail: String,
submissionIdEmails: List[SubmissionIdEmail],
accountToken: FormstackAccountToken,
encryptionPassword: String): Either[Throwable, FormstackResponses] = {
val submissionResults: Either[Throwable, List[Either[SubmissionIdEmail, Submission]]] = submissionIdEmails.traverse { submissionIdEmail =>
val response =
http(s"https://www.formstack.com/api/v2/submission/${submissionIdEmail.submissionId}.json")
.header("Authorization", accountToken.secret)
.param("encryption_password", encryptionPassword)
.asString
if(!response.is2xx) {
logger.error(response.body)
}
decodeIfNotSkippableError[Submission](response).map{
case None => Left(submissionIdEmail)
case Some(submission) =>
//validate the submission we found in formstack actually contains references to the email we were looking for
if (validateEmail(requestEmail, submission))
Right(submission)
else {
logger.warn(s"found submission by id = ${submissionIdEmail.submissionId} but the requested email was not found, skipping")
Left(submissionIdEmail)
}
}
}
submissionResults.map{ subResults =>
FormstackResponses(
found = subResults.collect{ case Right(submission) => submission},
notFound = subResults.collect{ case Left(skippedSubmissionIdEmail) => skippedSubmissionIdEmail}
)
}
}