Last active
August 30, 2018 08:31
-
-
Save bennibau/5f688597f69c3c427bc69eea1163e9a1 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// RESTController.swift | |
// App | |
// | |
// Created by Benjamin Baumann on 06.07.18. | |
// | |
import Foundation | |
import Vapor | |
import Authentication | |
import Crypto | |
import FluentSQLite | |
struct UserMessageRequest: Content { | |
let senderId: UUID | |
} | |
struct UserDto: Content { | |
let id: UUID? | |
let name: String | |
} | |
class RESTController: RouteCollection { | |
func boot(router: Router) throws { | |
let group = router.grouped("api", "protected") | |
let guardAuthMiddleware = User.guardAuthMiddleware() | |
let tokenAuthMiddleware = User.tokenAuthMiddleware() | |
let tokenAuthGroup = group.grouped([tokenAuthMiddleware, guardAuthMiddleware]) | |
tokenAuthGroup.get("getMyMessages", use: getMessagesByUserHandler) | |
tokenAuthGroup.get("usersList", use: getAllUsersHandler) | |
} | |
} | |
//MARK: Helper | |
private extension RESTController { | |
/// GET returns a list of all users exept for the currently logged in user | |
/// | |
/// - Parameter request: Request | |
/// - Returns: A list of users | |
func getAllUsersHandler(_ request: Request) throws -> EventLoopFuture<[UserDto]> { | |
//get all users except me | |
let allUsers = try User.query(on: request).filter(\.id != request.getUser().id).all() | |
let mappedUsers = allUsers.map { users -> [UserDto] in | |
var userContainer = [UserDto]() | |
users.forEach({ user in | |
userContainer.append(UserDto(id: user.id, name: user.email)) | |
}) | |
return userContainer | |
} | |
return mappedUsers | |
} | |
/// GET Returns all messages between the logged in user and a given user provided in the request | |
/// | |
/// - Parameter request: the request, | |
/// - Query: senderId, The UUID of the sender of the messages | |
/// - Returns: array of messages | |
func getMessagesByUserHandler(_ request: Request) throws -> EventLoopFuture<[Message]> { | |
let userMessageRequest = try request.query.decode(UserMessageRequest.self) | |
let user = try request.requireAuthenticated(User.self) | |
let messagesFromUser = try user.messagesReceived.query(on: request).filter(\Message.senderId == userMessageRequest.senderId).all() | |
return messagesFromUser | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment