Спроба написати обробник запиту для наступного запиту:
POST -> /properties/{:propertyId}/issues
Обробник повинен створити новий випуск для ресурсу за допомогою propertyId
.
Я зареєстрував маршрут так:
router.post(Issue.self, at: "properties", Int.parameter, "issues", use: createIssueHandler)
Як би я написав обробник, щоб взяти propertyId
від параметрів запиту, а не вимагати його в тілі 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)
}
Відповіді:
0 для відповіді № 1кредит на @AxelCB з чату розбрату Vapor
якщо властивість відповідає параметру, ви можете зробити:
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)
}
}
Якщо те, що ви надсилаєте parameters.next
- це модель, і наступний параметр того ж типу, що ідентифікатор цієї моделі, він спробує знайти вашу модель з цим ідентифікатором і видасть помилку, якщо її не знайдено