Search code examples
swiftvapor

Vapor How to find user by email


How to properly find user by email in vapor in login method and return that user or return error, I've tried:

    func login(_ req: Request) throws -> Future<User> {
    return try req.content.decode(User.self).map { loginUser in
        let query = User.query(on: req)
        return query
            .filter(\.email == loginUser.email)
            .first()
            .flatMap { user in
                return user!.save(on: req)
            }

        }
}

but I'm getting

Cannot convert return expression of type 'EventLoopFuture' to return type 'User'


Solution

  • func login(_ req: Request) throws -> Future<User> {
        return try req.content.decode(User.self).flatMap { loginUser in
            return User.query(on: req)
                .filter(\.email == loginUser.email)
                .first()
                .unwrap(or: Abort(.notFound, reason: "User not found"))
        }
    }