Created
November 5, 2015 16:23
-
-
Save shajra-cs/adbb1a6e0ef100dd9f6d to your computer and use it in GitHub Desktop.
a refactoring of some work Steve is looking at
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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