蒸气:在所有修改完成之前返回路线

时间:2019-12-24 19:15:01

标签: future vapor

我有以下路线:

router.post([Page].self, at: "/fetchStatusOfManagedReleases") { (req, pages) -> Future<[Page]> in
    let eventIds = pages.map { $0.events }.flatMap { $0 }.map { $0.id }
    return Release.query(on: req).filter(\.fbId ~~ eventIds).all().map { releases in
        var result: [Page] = []
        for p in pages {
            let page = p
            var pageEvents: [Event] = []
            for e in p.events {
                let event = e
                if let release = releases.first(where: { $0.fbId == e.id }) {
                    event.inProgress = release.inProgress
                    event.purpose = release.purpose
                    _ = try release.testPrices.query(on:req).all().map { testP in
                        event.testPrices = testP // <--- this line is not applied
                    }
                } else {
                    event.inProgress = false
                }
                pageEvents.append(event)
            }
            page.events = pageEvents
            result.append(page)
        }
        return result
    }
}

不幸的是,event.testPrices = testP未被应用,它不会成为响应的一部分。我能做什么?在某些情况下,我不需要推迟“返回”。如何解决计划问题?

1 个答案:

答案 0 :(得分:0)

我也像之前的~~一样在TestPrice上进行了Release操作。

router.post([Page].self, at: "/fetchStatusOfManagedReleases") { (req, pages) -> Future<[Page]> in
    let eventIds = pages.map { $0.events }.flatMap { $0 }.map { $0.id }
    return Release.query(on: req).filter(\.fbId ~~ eventIds).all().flatMap { releases in
        let releaseInnerIds = releases.map {$0.id}
        return TestPrice.query(on: req).filter(\.id ~~ releaseInnerIds).all().map { testPrices in
            var result: [Page] = []
            for p in pages {
                let page = p
                var pageEvents: [Event] = []
                for e in p.events {
                    let event = e
                    if let release = releases.first(where: { $0.fbId == e.id }) {
                        event.inProgress = release.inProgress
                        event.purpose = release.purpose
                        event.testPrices = testPrices.compactMap({testPrice in
                            if testPrice.release.parentID == release.id {
                                return testPrice
                            } else {
                                return nil
                            }
                        })
                    } else {
                        event.inProgress = false
                    }
                    pageEvents.append(event)
                }
                page.events = pageEvents
                result.append(page)
            }
            return result
        }
    }
}