69 lines
1.4 KiB
Swift
69 lines
1.4 KiB
Swift
//
|
|||
// Request.swift
|
|||
// NotificationService
|
|||
//
|
|||
// Created by Djorkaeff Alexandre Vilela Pereira on 9/16/20.
|
|||
// Copyright © 2020 Rocket.Chat. All rights reserved.
|
|||
//
|
|||
|
|||
import Foundation
|
|||
|
|||
protocol Request {
|
|||
associatedtype ResponseType: Response
|
|||
|
|||
var path: String { get }
|
|||
var method: HTTPMethod { get }
|
|||
var contentType: String { get }
|
|||
|
|||
var query: String? { get }
|
|||
|
|||
func body() -> Data?
|
|||
func request(for api: API) -> URLRequest?
|
|||
}
|
|||
|
|||
extension Request {
|
|||
var method: HTTPMethod {
|
|||
return .get
|
|||
}
|
|||
|
|||
var contentType: String {
|
|||
return "application/json"
|
|||
}
|
|||
|
|||
var path: String {
|
|||
return ""
|
|||
}
|
|||
|
|||
var query: String? {
|
|||
return nil
|
|||
}
|
|||
|
|||
func body() -> Data? {
|
|||
return nil
|
|||
}
|
|||
|
|||
func request(for api: API) -> URLRequest? {
|
|||
var components = URLComponents(url: api.server, resolvingAgainstBaseURL: false)
|
|||
components?.path += path
|
|||
components?.query = query
|
|||
|
|||
guard let url = components?.url else {
|
|||
return nil
|
|||
}
|
|||
|
|||
var request = URLRequest(url: url)
|
|||
request.httpMethod = method.rawValue
|
|||
request.httpBody = body()
|
|||
request.addValue(contentType, forHTTPHeaderField: "Content-Type")
|
|||
|
|||
if let userId = api.credentials?.userId {
|
|||
request.addValue(userId, forHTTPHeaderField: "x-user-id")
|
|||
}
|
|||
if let userToken = api.credentials?.userToken {
|
|||
request.addValue(userToken, forHTTPHeaderField: "x-auth-token")
|
|||
}
|
|||
|
|||
return request
|
|||
}
|
|||
}
|