Guest User

Untitled

a guest
Oct 15th, 2017
153
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.54 KB | None | 0 0
  1. // Author: Darshit Shah
  2. // API List
  3. // *\tables - To list available all tables -- TYPE : GET
  4. // *\version - To get database version -- TYPE : GET
  5. // *\allUser - To get all users from userTbl -- TYPE : GET
  6. // *\addUser - Add user with name, age, profilePic, username, password -- TYPE : POST
  7. // *\login - Login with username, password -- TYPE : POST
  8.  
  9.  
  10. import App
  11. import Vapor
  12. import SQLite
  13. import Foundation
  14.  
  15. let config = try Config()
  16. try config.setup()
  17.  
  18. let drop = try Droplet(config)
  19. try drop.setup()
  20.  
  21.  
  22. /**
  23. Create user table with name, age, profilePic, username, password
  24. */
  25. try drop.database?.driver.raw("CREATE TABLE `userTbl` ( `id` INTEGER PRIMARY KEY AUTOINCREMENT, `name` TEXT, `age` TEXT, `profilePic` TEXT, `username` TEXT, `password` TEXT )")
  26. //-----------------------
  27.  
  28.  
  29. /**
  30. To list available all tables
  31. TYPE : GET
  32. */
  33. drop.get("tables") { request in
  34. let tables = try drop.assertDatabase().raw("SELECT * FROM sqlite_master WHERE type='table';")
  35. return JSON(node: tables)
  36. }
  37. //-----------------------
  38.  
  39.  
  40. /**
  41. To get database version
  42. TYPE : GET
  43. */
  44. drop.get("version") { request in
  45. let result = try drop.database?.driver.raw("Select sqlite_version()")
  46. return try JSON(node: result)
  47. }
  48. //-----------------------
  49.  
  50.  
  51. /**
  52. To get all users from userTbl
  53. TYPE : GET
  54. */
  55. drop.get("allUser") { request in
  56.  
  57. let tables = try drop.assertDatabase().raw("SELECT * FROM userTbl")
  58. return JSON(node: tables)
  59. }
  60. //-----------------------
  61.  
  62.  
  63. /**
  64. Add user with name, age, profilePic, username, password
  65. TYPE : POST
  66.  
  67. - Parameter name : User's full name.
  68. - Parameter age : User's age
  69. - Parameter profilePic : User's profile picture file - Database entry - Picture URL
  70. - Parameter username : User's Username to login
  71. - Parameter password : User's Password - Not encryption/decription applied
  72.  
  73. */
  74. drop.post("addUser") { request in
  75.  
  76. guard let name = request.data["name"]?.string! else {
  77. return try JSON(node :["error":"Please include name."])
  78. }
  79. if name.isEmpty {
  80. return try JSON(node :["error":"Please enter name."])
  81. }
  82.  
  83. guard let age = request.data["age"]?.string!.int else {
  84. return try JSON(node :["error": "Please enter age."])
  85. }
  86. if !(18...100 ~= age) {
  87. return try JSON(node :["error": "Please enter valid age."])
  88. }
  89.  
  90. guard let username = request.data["username"]?.string! else {
  91. return try JSON(node :["error": "Please include username."])
  92. }
  93. if username.isEmpty {
  94. return try JSON(node :["error": "Please enter username."])
  95. }
  96.  
  97. guard let password = request.data["password"]?.string! else {
  98. return try JSON(node :["error": "Please include password."])
  99. }
  100. if password.isEmpty {
  101. return try JSON(node :["error": "Please enter password."])
  102. }
  103.  
  104. guard let image = request.data["profilePic"]?.bytes else {
  105. throw Abort(.badRequest, reason: "Fields 'filename' and/or 'file' is invalid")
  106. }
  107. let data = Data(bytes: (image))
  108. try data.write(to: URL(fileURLWithPath: "/Volumes/DATA/Darshit/Vapor/\(Int(NSDate().timeIntervalSince1970)).png"))
  109. //-------
  110. //Check file write success and add dynamic url in 'profilePic' in database
  111. //-------
  112. print("Name : \(name)\n age: \(age)\n username: \(username)\n password: \(password)")
  113.  
  114. let queryString = "Insert into userTbl(name,age,username,password) values ('\(name)', \(age), '\(username)', '\(password)')"
  115. try drop.database?.driver.raw(queryString)
  116.  
  117. let tables = try drop.assertDatabase().raw("SELECT * FROM userTbl")
  118.  
  119. return try JSON(node :["success":true, "data":tables])
  120. }
  121. //-----------------------
  122.  
  123.  
  124. /**
  125. Login with username, password
  126. TYPE : POST
  127.  
  128. - Parameter username : User's Username to login
  129. - Parameter password : User's Password - Not encryption/decription applied
  130.  
  131. */
  132. drop.post("login") { request in
  133.  
  134. guard let username = request.data["username"]?.string,
  135. let password = request.data["password"]?.string else {
  136. return try JSON(node :["error": "Missing username or password"])
  137. }
  138.  
  139. let queryString = "Select * from userTbl where username = '\(username)' and password = '\(password)'"
  140.  
  141. let userData = try drop.assertDatabase().raw(queryString)
  142.  
  143. if userData.wrapped.array?.count == 0{
  144. return try JSON(node :["success":false, "message":"Please check your username and password."])
  145. }
  146. else{
  147. return try JSON(node :["success":true, "data":userData.wrapped.array![0]])
  148. }
  149. }
  150. //-----------------------
  151.  
  152.  
  153. try drop.run()
Add Comment
Please, Sign In to add comment