Возможно, это не самый красивый код, но я думаю, что это решает проблему. Мне понравился подход @ Nick к представлению новой модели данных в виде коллекции, поэтому я буду делать то же самое. Вы можете объединить два фьючерса и получить один. Это происходит от SwiftNIO
let futureThingOne: Future<ThingOne> = ...
let futureThingTwo: Future<ThingTwo> = ...
let futureBothThings: Future<(ThingOne, ThingTwo)> = futureThingOne.and(futureThingTwo)
Таким образом, объединяя фьючерсы, поступающие из запросов, вы можете построить уплощенную структуру.
struct Codes: Content {
let countries: [CodeCountry]
let floors: [CodeFloor]
let regions: [CodeRegion]
let objectTypes: [CodeObjectType]
let propertyTypes: [CodePropertyType]
let rooms: [CodeRooms]
static func codes(req: Request) -> Future<Codes> {
let futureCountries = CodeCountry.query(on: req).sort(\.name).all()
let futureFloors = CodeFloor.query(on: req).sort(\.name).all()
let futureRegions = CodeRegion.query(on: req).sort(\.name).all()
let futureObjectTypes = CodeObjectType.query(on: req).sort(\.name).all()
let futurePropertyTypes = CodePropertyType.query(on: req).sort(\.name).all()
let futureRooms = CodeRooms.query(on: req).sort(\.name).all()
let combined = futureCountries.and(futureFloors).and(futureRegions).and(futureObjectTypes).and(futurePropertyTypes).and(futureRooms)
return combined.map {
Codes.init(
countries: $0.0.0.0.0.0,
floors: $0.0.0.0.0.1,
regions: $0.0.0.0.1,
objectTypes: $0.0.0.1,
propertyTypes: $0.0.1,
rooms: $0.1
)
}
}
}