/ / Як обробити запит POST для відносин один до багатьох у Vapor 3.0? - стрімкий, відпочинок, пара, пара3

Як обробити запит POST на одне чи багато відносин у Vapor 3.0? - швидкі, спокійні, пароподібні, пароподібні3

Спроба написати обробник запиту для наступного запиту:

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 - це модель, і наступний параметр того ж типу, що ідентифікатор цієї моделі, він спробує знайти вашу модель з цим ідентифікатором і видасть помилку, якщо її не знайдено