парос JSON ответ с отношением один ко многим - PullRequest
0 голосов
/ 27 ноября 2018

Я разработчик iOS и новичок для Vapor3 и Fluent-ORM Framework.

Я хотел бы получить ответ JSON с 3 различными дочерними классами.

на самом деле я это сделал, но яЯ уверен, что это не очень хороший способ, он только использует функцию карты несколько раз.

кто-нибудь знает лучший способ получить JSON?

Что я ожидал и получил ответ JSON ниже,

    "id": 2,
    "friends": [
        {
            "id": 2,
            "name": "h1ah",
            "userID": 2
        }
    ],
    "enemys": [
        {
            "id": 1,
            "name": "dragon",
            "userID": 2
        }
    ],
    "name": "HI",
    "pokemons": [
        {
            "id": 11,
            "level": 1,
            "name": "pokemon",
            "userID": 2
        },
        {
            "id": 12,
            "level": 1,
            "name": "pokem1on",
            "userID": 2
        },
        {
            "id": 14,
            "level": 1,
            "name": "pokem1on",
            "userID": 2
        }
    ],
    "items": []

Ниже мой код.

func getA(_ req:Request) throws -> Future<[UserWithPokomon]> {

    return User.query(on: req).sort(\.id, .ascending).all().flatMap({ users in

        let futures = try users.map({ user in
            try user.pokemons.query(on: req).all().map({ pokemons in
                try user.friends.query(on: req).all().map({ friend in
                    try user.enemys.query(on: req).all().map({ enemies in
                        try user.items.query(on: req).all().map({ items in                         
                            return  UserWithPokomon.init(id: user.id!, name: user.username, pokemons: pokemons, friends:friend, enemys:enemies, items:items)
                        })
                    })
                })
            })
        })

        let aaaa = futures.compactMap({ oo in    
            return oo.flatMap({ pp in      
                return pp.flatMap({                        
                    return $0.flatMap( { aa in
                        return aa
                    })
                })

            })

        })

        return aaaa.flatten(on: req)            
    })
}
...