Итак, я решил свою проблему без транзакций:
func update(_ req: Request, todos: [CreateTodoRequest]) throws -> Future<HTTPStatus> {
let user = try req.requireAuthenticated(User.self)
// 1
return try todos.map { try Todo(todo: $0, userID: user.requireID()).create(on: req) }
// 2
.flatten(on: req)
// 3
.transform(to: .ok)
}
.create(on: req)
возвращает EventLoopFuture<Todo>
.Так что todos.map
вернет массив [EventLoopFuture<Todo>]
.Второй шаг - преобразовать его в EventLoopFuture<[Todo]>
.И третий шаг - преобразовать его в HttpStatus.ok
response