Доступ к базе данных в команде

Я хочу создать команду, в которой вы можете создать пользователя (например, семена базы данных).

Тем не менее, я не могу получить доступ к базе данных в команде, мой код выглядит следующим образом:

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: ())
    }
}
Другие вопросы по тегам