我正在尝试编写一个控制器函数,以同时插入带有子模型的模型,并获得相同的JSON响应作为回报,但填充了从数据库添加的数据(即,自动生成的ID)。] >
在下面的简化示例中,JSON请求主体看起来像这样:
{
"field1": "blabla",
"subContent": {
"field2": "lalala"
}
}
我期待以下答复:
{
"id": 5,
"field1": "blabla",
"subContent": {
"id": 44,
"field2": "lalala"
}
}
不幸的是,下面的代码无法编译,错误消息显示“无法将类型'EventLoopFuture'的表达式转换为类型'Response'。此操作在线发生>]
return subModel.create(on: req).flatMap { savedSubModel ->
这里是代码:
struct MainContent: Content {
var id: UUID?
var field1: String
var subContent: SubContent
}
struct SubContent: Content {
var id: UUID?
var field2: String
}
final class Controller {
func create(_ req: Request) throws -> EventLoopFuture<Response> {
return try req.content.decode(MainContent.self).map { request in
let subModel = SubModel(
field2: request.subContent.field2
)
return subModel.create(on: req).flatMap { savedSubModel -> EventLoopFuture<Response> in
let mainModel = mainModel(
subModelId: savedSubModel.id!,
field1: request.field1
)
return mainModel.create(on: req).flatMap { savedMainModel -> EventLoopFuture<Response> in
let content = MainContent(
id: savedMainModel.id,
field1: savedMainModel.field1,
subContent: SubContent(
id: savedSubContent.id,
field2: savedSubContent.field2
)
)
return content.encode(status: .created, for: req)
}
}
}
}
}
我正在尝试编写一个控制器函数,以同时插入带有子模型的模型,并获得相同的JSON响应作为回报,但是填充了从数据库添加的数据(即...
] >
struct MainContent: Content {
var id: UUID?
var field1: String
var subContent: SubContent
}
struct SubContent: Content {
var id: UUID?
var field2: String
}
final class Controller {
func create(_ req: Request) throws -> EventLoopFuture<Response> {
return try req.content.decode(MainContent.self).flatMap { request in
let subModel = SubModel(
field2: payload.subContent.field2
)
return subModel.create(on: req)
}.flatMap { savedSubModel in
let mainModel = mainModel(
subModelId: try savedSubModel.requireID(),
field1: request.field1
)
return mainModel.create(on: req).flatMap { savedMainModel in
let content = MainContent(
id: try savedMainModel.requireID(),
field1: savedMainModel.field1,
subContent: SubContent(
id: try savedSubModel.requireID(),
field2: savedSubModel.field2
)
)
return content.encode(status: .created, for: req)
}
}
}
}