Доступ к базе данных в команде
Я хочу создать команду, в которой вы можете создать пользователя (например, семена базы данных).
Тем не менее, я не могу получить доступ к базе данных в команде, мой код выглядит следующим образом:
import Command
import Crypto
struct CreateUserCommand: Command {
var arguments: [CommandArgument] {
return [.argument(name: "email")]
}
var options: [CommandOption] {
return [
.value(name: "password", short: "p", default: "", help: ["Password of a user"]),
]
}
var help: [String] {
return ["Create a user with provided identities."]
}
func run(using context: CommandContext) throws -> Future<Void> {
let email = try context.argument("email")
let password = try context.requireOption("password")
let passwordHash = try BCrypt.hash(password)
let user = User(email: email, password: password)
return user.save(on: context.container).map(to: Future<Void>) { user in
return .done(on: context.container)
}
}
}
Как и выше, я хочу сохранить пользователей, выполнив запрос на context.container
, но я получил argument type 'Container' does not conform to expected type 'DatabaseConnectable'
Ошибка.
Как получить доступ к базе данных в команде?
1 ответ
Решение
Кажется, что это может быть путь:
func run(using context: CommandContext) throws -> EventLoopFuture<Void> {
let email = try context.argument("email")
let password = try context.requireOption("password")
let passwordHash = try BCrypt.hash(password)
let user = User(email: email, password: password)
return context.container.withNewConnection(to: .psql) { db in
return user.save(on: db).transform(to: ())
}
}