Filtrer une query sur Vapor

Bonjour à tous,
Je travaille sur un webservice construit avec le cours sur Vapor et je souhaite filtrer les retours de ma requête avec un paramètre. Mais j’ai du mal à savoir quel composant de ma requête correspond à ma saisie pour le remettre dans le filtrer.
Un peu de code pour vous aider à comprendre :

struct MatchController: RouteCollection {
    func boot(routes: RoutesBuilder) throws {
        let matches = routes.grouped("matches")
        matches.get(use: index)
        matches.post(use: create)
        matches.group(":matchID") { match in
            match.delete(use: delete)
        }
        matches.group(":teamName") { match in
            match.get(use: indexTeam)
        }

    }

    // Je souhaite filtrer les résulats avec le paramètre du group ajouté plus haut
    // -> (matches.group(":teamName") { match in match.get(use: indexTeam) }
    func indexTeam(req: Request) throws -> EventLoopFuture<[Match]> {
        return Match.query(on: req.db)
            .sort(\.$date, .ascending)
            .filter(\.$teamName, .equal, "teamName") // <- le "teamName est à changer mais par quoi ??
            .all()
    }
    ...
}

Ma requête est par exemple : http://127.0.0.1:8080/matches/SeniorM/
SeniorM correspond à mon teamName et je voudrais utiliser « SeniorM » pour filtrer mes résultats.
Si quelqu’un a une idée.
Merci d’avance.
Bonne journée

Arnaud

Bonjour,

Je n’utilise plus les EventLoopFuture sous Vapor.
De ce que je vois, il faut remplacer « teamName » par une variable qui aura été au préalable remplie par la requête.
un truc genre :

let teamName = req.parameters.get("teamName")!

et on peut l’appeler avec

\(teamName)

https://docs.vapor.codes/4.0/routing/#parameters

Merci Mrt1,
ça a l’air de marcher :+1:

J’avais trouvé avec

let paramAdd = req.description.pathComponents[2]

mais ça me plaisait moyen car si un composant se rajoute, sa place risque de ne plus être la même.
Merci encore.

1 « J'aime »

Effectivement, c’est moins bien que la solution du req.parameters.get, qui est fait pour ça.

Bon courage pour la suite du code :wink: