Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def httpUpdate(pname: String) = (for {
- u <- liftK(signed(_:JReq))
- meId <- pathParam[BSONObjectID](pname)
- ume <- jsonFromReq[UpdateMetricEvent]
- me1 <- constK(liftFO(findOne[MetricEvent](cname)(mkFindByIdQry(u, meId)), E404("Inexistent MetricEvent")).run)
- me2 = me1.copy(value = ume.value getOrElse me1.value, date = ume.date getOrElse me1.date)
- m <- constK(liftFO(findOneById[Metric](metrics.cname)(me2.metricId), E400("Metric not found")).run)
- doT = !((me1.value == me2.value) && (me1.date == me2.date))
- pme <- constK(findFirst[MetricEvent](cname)(mkPrevQry(u, me2.metricId, me2.date)))
- qry <- constK(mkUpdateQry(u, meId)(ume))
- upd <- constK(update(cname)(qry))
- meta <- constK(aggregate[List[MetricEventMeta]](cname)(mkMetaP(u, me2.metricId)))
- _ <- constK(update(mname)(mkMetaUpdate(me2)(meta.headOption)))
- _ <- constK(eventFeeds.doMetricFeed("metricEventUpdate", 4.some)
- (owner = u.some, itemId = me2.metricId.some, itemName = m.name.some,
- value = me2.value.some, category = me2.category.some, unit = me2.unit.some))
- _ <- constK(if (doT) doNextTargetReached(u, pme, me2, m) else ().right.point[Future])
- utr <- constK(if (doT) doUserTargetReached(u, pme, me2, m) else none.right.point[Future])
- _ <- constK(users.doRetireTarget(u, me2.metricId, utr))
- } yield upd) >>> toJsonResult
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement