Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //
- // PerfectHandler.swift
- // WebServiceProject
- //
- // Created by Marco Cruz on 20/07/16.
- // Copyright © 2016 Marco Cruz. All rights reserved.
- //
- import AVFoundation
- import PerfectLib
- import AVKit
- import MySQL
- let HOST = "localhost"
- let USER = "root"
- let PASSWORD = "1234"
- let DB_NAME = "OpinionShare"
- typealias TrimCompletion = (NSError?) -> ()
- typealias TrimPoints = [(CMTime, CMTime)]
- var videoStatus: String?
- var videoStartTime: NSDate?
- var pushNotificationsHandler = PushNotificationsHandler()
- //////////////////////// MYSQL CONNECTION ////////////////////////
- func createDatabase() {
- let mysql = MySQL()
- let connected = mysql.connect(HOST, user: USER, password: PASSWORD)
- guard connected else { print(mysql.errorMessage()); return }
- defer { mysql.close() }
- var isDatabase = mysql.selectDatabase(DB_NAME)
- if !isDatabase {
- isDatabase = mysql.query("CREATE DATABASE \(DB_NAME);")
- }
- //Users
- let isTableUsers = mysql.query("CREATE TABLE IF NOT EXISTS Users (user_id INT(8) UNSIGNED AUTO_INCREMENT PRIMARY KEY, first_name TEXT NOT NULL, last_name TEXT NOT NULL);")
- //Matches
- let isTableMatches = mysql.query("CREATE TABLE IF NOT EXISTS Matches (match_id INT(8) UNSIGNED AUTO_INCREMENT PRIMARY KEY, home TEXT NOT NULL, visitor TEXT NOT NULL, home_score INT(8) UNSIGNED, visitor_score INT(8) UNSIGNED, status TEXT NOT NULL);")
- //Moments
- let isTableMoments = mysql.query("CREATE TABLE IF NOT EXISTS Moments (moment_id INT(8) UNSIGNED AUTO_INCREMENT PRIMARY KEY, user_id INT(8) UNSIGNED, match_id INT(8) UNSIGNED, time TEXT NOT NULL, FOREIGN KEY (user_id) REFERENCES Users(user_id), FOREIGN KEY (match_id) REFERENCES Matches(match_id));")
- //Responses
- let isTableResponses = mysql.query("CREATE TABLE IF NOT EXISTS Responses (response_id INT(8) UNSIGNED AUTO_INCREMENT PRIMARY KEY, moment_id INT(8) UNSIGNED, user_id INT(8) UNSIGNED, opinion TEXT NOT NULL, emotion TEXT NOT NULL, FOREIGN KEY (moment_id) REFERENCES Moments(moment_id), FOREIGN KEY (user_id) REFERENCES Users(user_id));")
- guard isDatabase && isTableUsers && isTableMatches && isTableMoments && isTableResponses else {
- print(mysql.errorMessage()); return
- }
- }
- public func PerfectServerModuleInit(){
- Routing.Handler.registerGlobally()
- Routing.Routes["GET", "/startvideo"] = { _ in return StartVideo() }
- Routing.Routes["GET", "/videotimer"] = { _ in return GetVideoTimer() }
- Routing.Routes["GET", "/videostatus"] = { _ in return GetVideoStatus() }
- Routing.Routes["GET", "/video.mp4"] = { _ in return GetVideo() }
- Routing.Routes["GET", "/test"] = { _ in return GetTest() }
- Routing.Routes["POST", "/postuser"] = { _ in return PostUser() }
- Routing.Routes["POST", "/postmoment"] = { _ in return PostMoment() }
- Routing.Routes["POST", "/postresponse"] = { _ in return PostResponse() }
- Routing.Routes["GET", "/matches"] = { _ in return GetMatches() }
- Routing.Routes["GET", "/moments"] = { _ in return GetMoments() }
- Routing.Routes["GET", "/responses"] = { _ in return GetResponses() }
- Routing.Routes["GET", "/opinions"] = { _ in return GetOpinions() }
- Routing.Routes["GET", "/emotions"] = { _ in return GetEmotions() }
- Routing.Routes["GET", "/friendsreactions"] = { _ in return GetFriendsReactions() }
- Routing.Routes["GET", "/thumbnail"] = { _ in return GetThumbnail() }
- createDatabase()
- pushNotificationsHandler.start()
- pushNotificationsHandler.sendNotification()
- videoStatus = "offline"
- }
- func resultsToJSON(results results: MySQL.Results, _ fields: [String]) -> String? {
- if results.numFields() != fields.count { return nil }
- let encoder = JSONEncoder()
- var rowValues = [[String: JSONValue]]()
- results.forEachRow{ row in
- var rowValue = [String: JSONValue]()
- for c in 0 ..< fields.count {
- rowValue[fields[c]] = row[c]
- }
- rowValues.append(rowValue)
- }
- var responseString = "["
- do {
- for c in 0 ..< rowValues.count {
- let rowJSON = try encoder.encode(rowValues[c])
- responseString += rowJSON
- if c != rowValues.count - 1 { responseString += "," }
- else { responseString += "]" }
- }
- return responseString
- } catch {
- return nil
- }
- }
- class GetVideo: RequestHandler {
- func handleRequest(request: WebRequest, response: WebResponse) {
- let milliseconds = request.param("milliseconds")
- let docRoot = "/Users/marcocruz/Desktop/XCode 7/Server"
- do {
- let trimmedVideo = File("\(docRoot)/Video\(milliseconds!).mp4")
- let videoSize = trimmedVideo.size()
- let videoBytes = try trimmedVideo.readSomeBytes(videoSize)
- response.addHeader("Accept-Ranges", value: "bytes")
- response.addHeader("Content-Length", value: "\(videoSize)")
- response.addHeader("Content-Type", value: "video/mp4")
- response.addHeader("Age", value: "100000")
- response.addHeader("Connection", value: "close")
- response.addHeader("Strict-Transport-Security", value: "max-age=15552000")
- response.addHeader("X-Cache", value: "HIT")
- response.addHeader("Cache-Control", value: "max-age=604800")
- response.appendBodyBytes(videoBytes)
- } catch {
- response.appendBodyString("Error handling request: \(error)")
- }
- response.requestCompletedCallback()
- }
- }
- class GetThumbnail: RequestHandler {
- func handleRequest(request: WebRequest, response: WebResponse) {
- let milliseconds : Int!
- milliseconds = Int(request.param("milliseconds")!)
- let docRoot = "/Users/marcocruz/Desktop/XCode 7/Server/Thumbnails"
- do {
- let img = File("\(docRoot)/\(milliseconds).jpeg")
- let imageSize = img.size()
- let imageBytes = try img.readSomeBytes(imageSize)
- response.replaceHeader("contentType", value: "image/jpeg")
- response.appendBodyBytes(imageBytes)
- } catch {
- response.appendBodyString("Error handling request: \(error)")
- }
- response.requestCompletedCallback()
- }
- }
- func verifyPresetForAsset(preset: String, asset: AVAsset) -> Bool
- {
- let compatiblePresets = AVAssetExportSession.exportPresetsCompatibleWithAsset(asset)
- let filteredPresets = compatiblePresets.filter { $0 == preset }
- return filteredPresets.count > 0 || preset == AVAssetExportPresetPassthrough
- }
- func removeFileAtURLIfExists(url: NSURL)
- {
- if let filePath = url.path {
- let fileManager = NSFileManager.defaultManager()
- if fileManager.fileExistsAtPath(filePath) {
- do {
- try fileManager.removeItemAtPath(filePath)
- } catch {
- NSLog("Couldn't remove existing destination file")
- }
- }
- }
- }
- func trimVideo(sourceURL: NSURL, destinationURL: NSURL, trimPoints: TrimPoints, completion: TrimCompletion?)
- {
- assert(sourceURL.fileURL)
- assert(destinationURL.fileURL)
- let options = [ AVURLAssetPreferPreciseDurationAndTimingKey: true ]
- let asset = AVURLAsset(URL: sourceURL, options: options)
- let preferredPreset = AVAssetExportPresetPassthrough
- if verifyPresetForAsset(preferredPreset, asset: asset)
- {
- let composition = AVMutableComposition()
- let videoCompTrack = composition.addMutableTrackWithMediaType(AVMediaTypeVideo, preferredTrackID: CMPersistentTrackID())
- let audioCompTrack = composition.addMutableTrackWithMediaType(AVMediaTypeAudio, preferredTrackID: CMPersistentTrackID())
- let assetVideoTrack: AVAssetTrack = asset.tracksWithMediaType(AVMediaTypeVideo).first as AVAssetTrack!
- let assetAudioTrack: AVAssetTrack = asset.tracksWithMediaType(AVMediaTypeAudio).first as AVAssetTrack!
- var compError: NSError?
- var accumulatedTime = kCMTimeZero
- for (startTimeForCurrentSlice, endTimeForCurrentSlice) in trimPoints {
- let durationOfCurrentSlice = CMTimeSubtract(endTimeForCurrentSlice, startTimeForCurrentSlice)
- let timeRangeForCurrentSlice = CMTimeRangeMake(startTimeForCurrentSlice, durationOfCurrentSlice)
- do {
- try videoCompTrack.insertTimeRange(timeRangeForCurrentSlice, ofTrack: assetVideoTrack, atTime: accumulatedTime)
- } catch {}
- do {
- try audioCompTrack.insertTimeRange(timeRangeForCurrentSlice, ofTrack: assetAudioTrack, atTime: accumulatedTime)
- } catch {}
- if compError != nil {
- NSLog("error during composition: \(compError)")
- if let completion = completion {
- completion(compError)
- }
- }
- accumulatedTime = CMTimeAdd(accumulatedTime, durationOfCurrentSlice)
- }
- let exportSession = AVAssetExportSession(asset: composition, presetName: preferredPreset)
- exportSession!.outputURL = destinationURL
- exportSession!.outputFileType = AVFileTypeAppleM4V
- exportSession!.shouldOptimizeForNetworkUse = true
- removeFileAtURLIfExists(destinationURL)
- exportSession!.exportAsynchronouslyWithCompletionHandler({ () -> Void in
- if let completion = completion {
- completion(exportSession!.error)
- }
- })
- } else {
- NSLog("Could not find a suitable export preset for the input video")
- let error = NSError(domain: "", code: -1, userInfo: nil)
- if let completion = completion {
- completion(error)
- }
- }
- }
- class GetTest: RequestHandler {
- func handleRequest(request: WebRequest, response: WebResponse) {
- response.appendBodyString("TESTE")
- response.setStatus(200, message: "Success!")
- response.requestCompletedCallback()
- }
- }
- class StartVideo: RequestHandler {
- func handleRequest(request: WebRequest, response: WebResponse) {
- videoStartTime = NSDate();
- videoStatus = "online";
- response.setStatus(200, message: "Success!")
- response.requestCompletedCallback()
- }
- }
- class GetVideoTimer: RequestHandler {
- func handleRequest(request: WebRequest, response: WebResponse) {
- var timer: Int!
- timer = getMiliseconds(NSDate()) - getMiliseconds(videoStartTime!)
- response.setStatus(200, message: "Success!")
- response.requestCompletedCallback()
- }
- }
- class GetVideoStatus: RequestHandler {
- func handleRequest(request: WebRequest, response: WebResponse) {
- response.appendBodyString(videoStatus!)
- response.setStatus(200, message: "Success!")
- response.requestCompletedCallback()
- }
- }
- class PostUser: RequestHandler {
- func handleRequest(request: WebRequest, response: WebResponse) {
- let params = request.postParams
- guard params.count == 3 else {
- response.setStatus(400, message: "Wrong params!")
- response.requestCompletedCallback(); return
- }
- let first_name : String!
- first_name = String(request.param("firstname")!)
- let last_name : String!
- last_name = String(request.param("lastname")!)
- let device_token : String!
- device_token = String(request.param("device_token")!)
- let mysql = MySQL()
- let connected = mysql.connect(HOST, user: USER, password: PASSWORD)
- guard connected else {
- print(mysql.errorMessage())
- response.setStatus(500, message: "Couldn't connect to database")
- response.requestCompletedCallback(); return
- }
- mysql.selectDatabase(DB_NAME)
- let querySuccess = mysql.query("SELECT * FROM Users WHERE first_name = '\(first_name)' AND last_name = '\(last_name)';")
- guard querySuccess else {
- print(mysql.errorMessage())
- response.setStatus(500, message: "Something went wrong")
- response.requestCompletedCallback(); return
- }
- var results: MySQL.Results!
- results = mysql.storeResults()
- if(results.numRows() == 0){
- let querySuccess2 = mysql.query("INSERT INTO Users (first_name, last_name, device_token) VALUES ('\(first_name)', '\(last_name)', '\(device_token)');")
- guard querySuccess2 else {
- print(mysql.errorMessage())
- response.setStatus(500, message: "Something went wrong")
- response.requestCompletedCallback(); return
- }
- }else{
- let querySuccess2 = mysql.query("UPDATE Users SET device_token = '\(device_token)' WHERE first_name = '\(first_name)' AND last_name = '\(last_name)';")
- guard querySuccess2 else {
- print(mysql.errorMessage())
- response.setStatus(500, message: "Something went wrong")
- response.requestCompletedCallback(); return
- }
- }
- let querySuccess3 = mysql.query("SELECT user_id, first_name, last_name FROM Users WHERE first_name = '\(first_name)' AND last_name = '\(last_name)';")
- guard querySuccess3 else {
- print(mysql.errorMessage())
- response.setStatus(500, message: "Something went wrong")
- response.requestCompletedCallback(); return
- }
- var results2: MySQL.Results!
- results2 = mysql.storeResults()
- guard results2.numRows() != 0 else {
- response.setStatus(500, message: "User wansn't saved in the database.")
- response.appendBodyString("User wansn't saved in the database.")
- response.requestCompletedCallback(); return
- }
- let result = resultsToJSON(results: results2!, ["user_id", "first_name", "last_name"])
- guard result != nil else {
- print("json encoding did not work very well... or at all")
- response.setStatus(500, message: "no goo json encoding oops")
- response.requestCompletedCallback(); return
- }
- response.appendBodyString(result!)
- print("User: \(first_name), \(last_name), \(device_token)");
- response.setStatus(201, message: "post success")
- response.requestCompletedCallback()
- }
- }
- class PostMoment: RequestHandler {
- func handleRequest(request: WebRequest, response: WebResponse) {
- let params = request.postParams
- guard params.count == 5 else {
- response.setStatus(400, message: "Wrong params!")
- response.requestCompletedCallback(); return
- }
- let user_id : Int!
- user_id = Int(request.param("userid")!)
- let match_id : Int!
- match_id = Int(request.param("matchid")!)
- let compensation : Int!
- compensation = Int(request.param("compensation")!)
- let opinion : String!
- opinion = request.param("opinion")!
- let emotion : String!
- emotion = request.param("emotion")!
- let timer = (getMiliseconds(NSDate()) - getMiliseconds(videoStartTime!) - compensation)
- let time: String!
- time = timer.msToSeconds.minuteSecondMS
- let mysql = MySQL()
- let connected = mysql.connect(HOST, user: USER, password: PASSWORD)
- guard connected else {
- print(mysql.errorMessage())
- response.setStatus(500, message: "Couldn't connect to database")
- response.requestCompletedCallback(); return
- }
- mysql.selectDatabase(DB_NAME)
- let querySuccess = mysql.query("INSERT INTO Moments (user_id, match_id, time) VALUES ('\(user_id)', '\(match_id)', '\(time)');")
- guard querySuccess else {
- print(mysql.errorMessage())
- response.setStatus(500, message: "Something went wrong")
- response.requestCompletedCallback(); return
- }
- mysql.query("SET @last_id_in_Moments = LAST_INSERT_ID();")
- let querySuccess3 = mysql.query("INSERT INTO Responses (moment_id, user_id, opinion, emotion) VALUES (@last_id_in_Moments, '\(user_id)', '\(opinion)', '\(emotion)');")
- guard querySuccess3 else {
- print(mysql.errorMessage())
- response.setStatus(500, message: "Something went wrong")
- response.requestCompletedCallback(); return
- }
- dispatch_async(dispatch_get_main_queue(),{
- self.saveVideo(timer)
- })
- //pushNotificationsHandler.sendNotification()
- print("New moment: \(user_id), \(match_id), \(opinion), \(emotion), \(time)");
- response.setStatus(200, message: "post success")
- response.requestCompletedCallback()
- }
- func saveVideo(milliseconds: Int)
- {
- typealias TrimCompletion = (NSError?) -> ()
- typealias TrimPoints = [(CMTime, CMTime)]
- let sourceURL = NSURL(fileURLWithPath: "/Users/marcocruz/Desktop/XCode/TV/ArgentinaChile.mp4")
- let destinationURL = NSURL(fileURLWithPath: "/Users/marcocruz/Desktop/XCode 7/Server/Video\(milliseconds).mp4")
- let timeScale: Int32 = 1000
- var startTime = 0
- let endTime = Int(milliseconds)
- if((endTime - 10000) >= 0){
- startTime = endTime - 10000
- }
- let trimPoints = [(CMTimeMake(Int64(startTime), timeScale), CMTimeMake(Int64(endTime), timeScale))]
- trimVideo(sourceURL, destinationURL: destinationURL, trimPoints: trimPoints) { error in
- if let error = error {
- NSLog("Failure: \(error)")
- } else {
- NSLog("Success")
- }
- }
- }
- }
- class PostResponse: RequestHandler {
- func handleRequest(request: WebRequest, response: WebResponse) {
- let params = request.postParams
- guard params.count == 4 else {
- response.setStatus(400, message: "Wrong params!")
- response.requestCompletedCallback(); return
- }
- let user_id : Int!
- user_id = Int(request.param("userid")!)
- let moment_id : Int!
- moment_id = Int(request.param("momentid")!)
- let opinion : String!
- opinion = request.param("opinion")!
- let emotion : String!
- emotion = request.param("emotion")!
- let mysql = MySQL()
- let connected = mysql.connect(HOST, user: USER, password: PASSWORD)
- guard connected else {
- print(mysql.errorMessage())
- response.setStatus(500, message: "Couldn't connect to database")
- response.requestCompletedCallback(); return
- }
- mysql.selectDatabase(DB_NAME)
- let querySuccess = mysql.query("INSERT INTO Responses (moment_id, user_id, opinion, emotion) VALUES ('\(moment_id)', '\(user_id)', '\(opinion)', '\(emotion)');")
- guard querySuccess else {
- print(mysql.errorMessage())
- response.setStatus(500, message: "Something went wrong")
- response.requestCompletedCallback(); return
- }
- //pushNotificationsHandler.sendNotification()
- print("New response: \(user_id), \(moment_id), \(opinion), \(emotion)");
- response.setStatus(200, message: "response success")
- response.requestCompletedCallback()
- }
- }
- class GetMatches: RequestHandler {
- func handleRequest(request: WebRequest, response: WebResponse) {
- let mysql = MySQL()
- let connected = mysql.connect(HOST, user: USER, password: PASSWORD)
- guard connected else {
- print(mysql.errorMessage())
- response.setStatus(500, message: "Couldn't connect to MySQL")
- response.requestCompletedCallback(); return
- }
- mysql.selectDatabase(DB_NAME)
- defer { mysql.close() }
- let querySuccess = mysql.query("SELECT match_id, home, visitor, home_score, visitor_score, status, (SELECT count(moment_id) FROM Moments WHERE match_id = m.match_id) AS moment_count, home_abbr, visitor_abbr FROM Matches m;")
- guard querySuccess else {
- print(mysql.errorMessage())
- response.setStatus(500, message: "Things went wrong querying the table")
- response.requestCompletedCallback(); return
- }
- var results: MySQL.Results!
- results = mysql.storeResults()
- guard results.numRows() != 0 else {
- print("no matches were found")
- response.setStatus(500, message: "No data.")
- response.appendBodyString("Empty table.")
- response.requestCompletedCallback(); return
- }
- let result = resultsToJSON(results: results!, ["match_id", "home", "visitor", "home_score", "visitor_score", "status", "moment_count", "home_abbr", "visitor_abbr"])
- guard result != nil else {
- print("json encoding did not work very well... or at all")
- response.setStatus(500, message: "no goo json encoding oops")
- response.requestCompletedCallback(); return
- }
- response.appendBodyString(result!)
- response.setStatus(201, message: "Mission Success Here is all the matches")
- response.requestCompletedCallback()
- }
- }
- class GetMoments: RequestHandler {
- func handleRequest(request: WebRequest, response: WebResponse) {
- let user_id : Int!
- user_id = Int(request.param("userid")!)
- let match_id : Int!
- match_id = Int(request.param("matchid")!)
- let mysql = MySQL()
- let connected = mysql.connect(HOST, user: USER, password: PASSWORD)
- guard connected else {
- print(mysql.errorMessage())
- response.setStatus(500, message: "Couldn't connect to MySQL")
- response.requestCompletedCallback(); return
- }
- mysql.selectDatabase(DB_NAME)
- defer { mysql.close() }
- let querySuccess = mysql.query("SELECT moment_id, first_name, last_name, time, IF(EXISTS(SELECT 1 FROM Responses r WHERE r.moment_id = mo.moment_id AND r.user_id = '\(user_id)'),'yes', 'no')AS resp, (SELECT count(*) FROM Responses WHERE Responses.moment_id = mo.moment_id) AS reactions FROM Matches ma NATURAL JOIN Moments mo NATURAL JOIN Users u WHERE match_id = '\(match_id)' ORDER BY time DESC;")
- guard querySuccess else {
- print(mysql.errorMessage())
- response.setStatus(500, message: "Things went wrong querying the table")
- response.requestCompletedCallback(); return
- }
- var results: MySQL.Results!
- results = mysql.storeResults()
- guard results.numRows() != 0 else {
- print("no moments were found")
- response.setStatus(501, message: "No data.")
- response.appendBodyString("Empty table.")
- response.requestCompletedCallback(); return
- }
- let result = resultsToJSON(results: results!, ["moment_id", "first_name", "last_name", "time", "resp", "reactions"])
- guard result != nil else {
- print("json encoding did not work very well... or at all")
- response.setStatus(500, message: "no goo json encoding oops")
- response.requestCompletedCallback(); return
- }
- response.appendBodyString(result!)
- response.setStatus(201, message: "Mission Success Here is all the moments")
- response.requestCompletedCallback()
- }
- }
- class GetResponses: RequestHandler {
- func handleRequest(request: WebRequest, response: WebResponse) {
- let moment_id : Int!
- moment_id = Int(request.param("momentid")!)
- let mysql = MySQL()
- let connected = mysql.connect(HOST, user: USER, password: PASSWORD)
- guard connected else {
- print(mysql.errorMessage())
- response.setStatus(500, message: "Couldn't connect to MySQL")
- response.requestCompletedCallback(); return
- }
- mysql.selectDatabase(DB_NAME)
- defer { mysql.close() }
- let querySuccess = mysql.query("SELECT first_name, last_name, opinion, emotion FROM Responses NATURAL JOIN Users WHERE moment_id = \(moment_id);")
- guard querySuccess else {
- print(mysql.errorMessage())
- response.setStatus(500, message: "Things went wrong querying the table")
- response.requestCompletedCallback(); return
- }
- var results: MySQL.Results!
- results = mysql.storeResults()
- guard results.numRows() != 0 else {
- print("no moments were found")
- response.setStatus(500, message: "No data.")
- response.appendBodyString("Empty table.")
- response.requestCompletedCallback(); return
- }
- let result = resultsToJSON(results: results!, ["first_name", "last_name", "opinion", "emotion"])
- guard result != nil else {
- print("json encoding did not work very well... or at all")
- response.setStatus(500, message: "no goo json encoding oops")
- response.requestCompletedCallback(); return
- }
- response.appendBodyString(result!)
- response.setStatus(201, message: "Mission Success Here is all the responses")
- response.requestCompletedCallback()
- }
- }
- class GetOpinions: RequestHandler {
- func handleRequest(request: WebRequest, response: WebResponse) {
- let moment_id : Int!
- moment_id = Int(request.param("momentid")!)
- let mysql = MySQL()
- let connected = mysql.connect(HOST, user: USER, password: PASSWORD)
- guard connected else {
- print(mysql.errorMessage())
- response.setStatus(500, message: "Couldn't connect to MySQL")
- response.requestCompletedCallback(); return
- }
- mysql.selectDatabase(DB_NAME)
- defer { mysql.close() }
- let querySuccess = mysql.query("SELECT opinion, count(*) as number FROM Responses WHERE moment_id = \(moment_id) GROUP BY opinion;")
- guard querySuccess else {
- print(mysql.errorMessage())
- response.setStatus(500, message: "Things went wrong querying the table")
- response.requestCompletedCallback(); return
- }
- var results: MySQL.Results!
- results = mysql.storeResults()
- guard results.numRows() != 0 else {
- print("no opinions were found")
- response.setStatus(500, message: "No data.")
- response.appendBodyString("Empty table.")
- response.requestCompletedCallback(); return
- }
- let result = resultsToJSON(results: results!, ["opinion", "number"])
- guard result != nil else {
- print("json encoding did not work very well... or at all")
- response.setStatus(500, message: "no goo json encoding oops")
- response.requestCompletedCallback(); return
- }
- response.appendBodyString(result!)
- response.setStatus(201, message: "Mission Success Here is all the opinions")
- response.requestCompletedCallback()
- }
- }
- class GetEmotions: RequestHandler {
- func handleRequest(request: WebRequest, response: WebResponse) {
- let moment_id : Int!
- moment_id = Int(request.param("momentid")!)
- let mysql = MySQL()
- let connected = mysql.connect(HOST, user: USER, password: PASSWORD)
- guard connected else {
- print(mysql.errorMessage())
- response.setStatus(500, message: "Couldn't connect to MySQL")
- response.requestCompletedCallback(); return
- }
- mysql.selectDatabase(DB_NAME)
- defer { mysql.close() }
- let querySuccess = mysql.query("SELECT emotion, count(*) as number FROM Responses WHERE moment_id = \(moment_id) GROUP BY emotion;")
- guard querySuccess else {
- print(mysql.errorMessage())
- response.setStatus(500, message: "Things went wrong querying the table")
- response.requestCompletedCallback(); return
- }
- var results: MySQL.Results!
- results = mysql.storeResults()
- guard results.numRows() != 0 else {
- print("no emotions were found")
- response.setStatus(500, message: "No data.")
- response.appendBodyString("Empty table.")
- response.requestCompletedCallback(); return
- }
- let result = resultsToJSON(results: results!, ["emotion", "number"])
- guard result != nil else {
- print("json encoding did not work very well... or at all")
- response.setStatus(500, message: "no goo json encoding oops")
- response.requestCompletedCallback(); return
- }
- response.appendBodyString(result!)
- response.setStatus(201, message: "Mission Success Here is all the emotions")
- response.requestCompletedCallback()
- }
- }
- class GetFriendsReactions: RequestHandler {
- func handleRequest(request: WebRequest, response: WebResponse) {
- let moment_id : Int!
- moment_id = Int(request.param("momentid")!)
- let mysql = MySQL()
- let connected = mysql.connect(HOST, user: USER, password: PASSWORD)
- guard connected else {
- print(mysql.errorMessage())
- response.setStatus(500, message: "Couldn't connect to MySQL")
- response.requestCompletedCallback(); return
- }
- mysql.selectDatabase(DB_NAME)
- defer { mysql.close() }
- let querySuccess = mysql.query("SELECT first_name, last_name, opinion, emotion FROM Responses NATURAL JOIN Users WHERE moment_id = \(moment_id);")
- guard querySuccess else {
- print(mysql.errorMessage())
- response.setStatus(500, message: "Things went wrong querying the table")
- response.requestCompletedCallback(); return
- }
- var results: MySQL.Results!
- results = mysql.storeResults()
- guard results.numRows() != 0 else {
- print("no friends were found")
- response.setStatus(500, message: "No data.")
- response.appendBodyString("Empty table.")
- response.requestCompletedCallback(); return
- }
- let result = resultsToJSON(results: results!, ["first_name", "last_name", "opinion", "emotion"])
- guard result != nil else {
- print("json encoding did not work very well... or at all")
- response.setStatus(500, message: "no goo json encoding oops")
- response.requestCompletedCallback(); return
- }
- response.appendBodyString(result!)
- response.setStatus(201, message: "Mission Success Here are all the friends reactions")
- response.requestCompletedCallback()
- }
- }
- extension NSTimeInterval {
- var minuteSecondMS: String {
- return String(format:"%d:%02d", minute, second)
- }
- var minute: Int {
- return Int(self/60.0 % 60)
- }
- var second: Int {
- return Int(self % 60)
- }
- }
- extension Int {
- var msToSeconds: Double {
- return Double(self) / 1000
- }
- }
- private func getMiliseconds(date: NSDate) -> Int
- {
- let calendar = NSCalendar.currentCalendar()
- let components = calendar.components([ .Hour, .Minute, .Second], fromDate: date)
- let hour = components.hour
- let minutes = components.minute
- let seconds = components.second
- return (((3600*hour) + (60*minutes) + seconds) * 1000)
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement