Skip to content

Instantly share code, notes, and snippets.

@mczachurski
Created February 13, 2018 19:01
Show Gist options
  • Save mczachurski/e9f397dee2d2c4f24f14a9aefbc23bb1 to your computer and use it in GitHub Desktop.
Save mczachurski/e9f397dee2d2c4f24f14a9aefbc23bb1 to your computer and use it in GitHub Desktop.
import Foundation
import PerfectHTTP
class TasksController : Controller {
private let tasksRepository: TasksRepositoryProtocol!
init(tasksRepository: TasksRepositoryProtocol) {
self.tasksRepository = tasksRepository
}
override func initRoutes() {
routes.add(method: .get, uri: "/tasks", handler: getTasks)
routes.add(method: .get, uri: "/tasks/{id}", handler: getTask)
routes.add(method: .post, uri: "/tasks", handler: postTask)
routes.add(method: .put, uri: "/tasks/{id}", handler: putTask)
routes.add(method: .delete, uri: "/tasks/{id}", handler: deleteTask)
}
private func getTasks(request: HTTPRequest, response: HTTPResponse) {
let tasks = self.tasksRepository.getTasks()
response.sendJson(tasks)
}
private func getTask(request: HTTPRequest, response: HTTPResponse) {
if let stringId = request.urlVariables["id"], let id = Int(stringId) {
if let task = self.tasksRepository.getTask(id: id) {
return response.sendJson(task)
}
}
response.sendNotFound()
}
private func postTask(request: HTTPRequest, response: HTTPResponse) {
do {
let task = try request.getObjectFromRequest(Task.self)
self.tasksRepository.addTask(task: task)
return response.sendJson(task)
}
catch {
response.sendBadRequest()
}
}
private func putTask(request: HTTPRequest, response: HTTPResponse) {
do {
let task = try request.getObjectFromRequest(Task.self)
self.tasksRepository.updateTask(task: task)
return response.sendJson(task)
}
catch {
response.sendBadRequest()
}
}
private func deleteTask(request: HTTPRequest, response: HTTPResponse) {
if let stringId = request.urlVariables["id"], let id = Int(stringId) {
self.tasksRepository.deleteTask(id: id)
return response.sendOk();
}
response.sendNotFound()
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment