/ / Ako vybaviť požiadavku POST pre jeden až veľa vzťahov vo Vapor 3.0? - rýchly, odpočinok, para, para3

Ako spracovať požiadavku POST na jeden vzťah k viacerým vo Vapor 3.0? - rýchlo, odpočívajte, pary, pary3

Pokúsim sa napísať obslužný program žiadosti pre túto žiadosť:

POST -> /properties/{:propertyId}/issues

Obsluha by mala vytvoriť nové vydanie pre vlastníctvo pomocou propertyId.

Trasu som zaregistroval takto:

router.post(Issue.self, at: "properties", Int.parameter, "issues", use: createIssueHandler)

Ako by som napísal psovodovi, aby vzal propertyId z parametrov žiadosti, namiesto toho, aby sa vyžadovala v tele JSON?

func createIssueHandler(_ req: Request, data: Issue) throws -> Future<Issue> {
let propertyId = try req.parameters.next(Int.self)
let issue = Issue(
title: data.title,
description: data.description,
propertyId: propertyId
)
return issue.save(on: req)
}

odpovede:

0 pre odpoveď č. 1

kredit na @AxelCB z chatu Discord Discord

ak vlastnosť vyhovuje parametru, môžete urobiť:

router.post(Issue.self, at: "properties", Property.parameter, "issues", use: createIssueHandler)

func createIssueHandler(_ req: Request, data: Issue) throws -> Future<Issue> {
try req.parameters.next(Property.self).flatMap(to: Issue.self) { property -> Future<Issue> in
data.propertyId = property.id
return issue.save(on: req)
}
}

Ak to, čo pošlete parameters.next je model a ďalší parameter je rovnaký typ ako ID tohto modelu, pokúsi sa nájsť model s týmto ID a vyhodiť nejaké chyby, ak sa nenájde