Skip to content

Instantly share code, notes, and snippets.

@shajra-cs
Created November 5, 2015 16:23
Show Gist options
  • Save shajra-cs/adbb1a6e0ef100dd9f6d to your computer and use it in GitHub Desktop.
Save shajra-cs/adbb1a6e0ef100dd9f6d to your computer and use it in GitHub Desktop.
a refactoring of some work Steve is looking at
import scalaz.syntax.either._
import scalaz.syntax.optional._
def executeUpsertEntity(request: UpsertEntityRequest)
: ErrResponse \/ UpsertEntityResponse =
for {
cleanRequest <- validateUpsertRequestValues(request)
validKey <- validateCompositeKey(cleanRequest.keyValues)
result <- executeUpsert(validKey, cleanRequst)
} yield result
def executeUpsert
(subjectKey: (String, String), request: ValidatedUpsertParams) =
queryInvoker
.performUpsert(
request.entityType,
subjectKey,
request.need,
request.agent,
request.text,
request.score)
.run.run
.leftMap { x => BadRequest(x.message) }
.flatMap { b =>
val err =
InvalidReferences("No projections contained the referenced entities")
b either UpsertEntityResponse or err
}
private def validateUpsertRequestValues(request: UpsertEntityRequest)
: ErrResponse \/ ValidatedUpsertParams =
request match {
case
UpsertNeedAEntityRequest(
Need_A(
Some(GraphReference(Some(subjectType), Some(subjectKeyValues))),
Some(need),
Some(agent),
Some(text),
Some(score))) =>
ValidatedUpsertParams(
subjectType, subjectKeyValues, need, agent, text, score).right
case UpsertNeedAEntityRequest(_) =>
InvalidReferences(
"At least one of graph reference, need, model or score was omitted")
.left
case _ =>
BadRequest("Unknown entity type").left
}
private def validateCompositeKey(keys: Map[String,String])
: ErrResponse \/ (String,String) =
canonicalCompositeKey(keys) \/> InvalidReferences("Invalid graph reference")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment