Skip to content

Instantly share code, notes, and snippets.

@Alinaprotsyuk
Last active October 20, 2017 18:33
Show Gist options
  • Save Alinaprotsyuk/1c980cf8de1b3843e922387aab91bb95 to your computer and use it in GitHub Desktop.
Save Alinaprotsyuk/1c980cf8de1b3843e922387aab91bb95 to your computer and use it in GitHub Desktop.
import UIKit
class AddNewRecordViewController: UIViewController {
@IBOutlet weak var subjectNameTextField: UITextField!
@IBOutlet weak var subjectDescriptionTextField: UITextView!
var updateDates = false
var subjectId: String = ""
var name: String = ""
var desc: String = ""
let queryService = QueryService()
var saveAction: ((Records?) -> ())?
var item: Records?
private func showMessage(message: String) {
let alert = UIAlertController(title: NSLocalizedString("Warning", comment: "Alert title"), message: message, preferredStyle: .alert)
alert.addAction(UIAlertAction(title: NSLocalizedString("Ok", comment: "Ok button"), style: .default, handler: nil))
self.present(alert, animated: true, completion: nil)
}
@IBAction func saveNewRecord(_ sender: UIButton) {
guard let name = subjectNameTextField.text?.capitalized else { return }
guard let description = subjectDescriptionTextField.text?.capitalized else { return }
if !name.isEmpty && !description.isEmpty {
if !updateDates {
queryService.postRequests(parameters : ["subject_name" : name, "subject_description" : description], sufix : "subject/InsertData", completion: {(item: [Records]?, code:Int, error: String) in
print(item!)
print(code)
print(error)
if let data = item {
DispatchQueue.main.async {
if code == 200 {
self.item = data[0]
self.saveAction!(self.item)
self.navigationController?.popViewController(animated: true)
} else {
self.showMessage(message: NSLocalizedString("Duplicate data! Please, write another information", comment: "Message for user"))
}
}
}
})
} else {
queryService.postRequests(parameters : ["subject_name" : name, "subject_description" : description], sufix : "subject/update/\(subjectId)", completion: {(item: [Records]?, code:Int, errror: String) in
if let data = item {
DispatchQueue.main.async {
if code == 200 {
self.item = data[0]
self.saveAction!(self.item)
self.navigationController?.popViewController(animated: true)
} else {
self.showMessage(message: NSLocalizedString("Duplicate data! Please, write another information", comment: "Message for user"))
}
}
}
})
}
} else {
showMessage(message: NSLocalizedString("Please, enter all fields!", comment: "Message for user") )
}
}
override func viewDidLoad() {
super.viewDidLoad()
if !updateDates {
navigationItem.title = "Add new item"
} else {
navigationItem.title = "Update record"
subjectNameTextField.text = name
subjectDescriptionTextField.text = desc
}
subjectDescriptionTextField.layer.cornerRadius = 5
subjectDescriptionTextField.layer.borderWidth = 1
subjectDescriptionTextField.layer.borderColor = UIColor.lightGray.withAlphaComponent(0.6).cgColor
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
import UIKit
class AddNewRecordViewController: UIViewController {
@IBOutlet weak var subjectNameTextField: UITextField!
@IBOutlet weak var subjectDescriptionTextField: UITextView!
var updateDates = false
var subjectId: String = ""
var name: String = ""
var desc: String = ""
let queryService = QueryService()
private func showMessage(message: String) {
let alert = UIAlertController(title: NSLocalizedString("Warning", comment: "Alert title"), message: message, preferredStyle: .alert)
alert.addAction(UIAlertAction(title: NSLocalizedString("Ok", comment: "Ok button"), style: .default, handler: nil))
self.present(alert, animated: true, completion: nil)
}
@IBAction func saveNewRecord(_ sender: UIButton) {
guard let name = subjectNameTextField.text?.capitalized else { return }
guard let description = subjectDescriptionTextField.text?.capitalized else { return }
if !name.isEmpty && !description.isEmpty {
if !updateDates {
queryService.postRequests(parameters : ["subject_name" : name, "subject_description" : description], sufix : "subject/InsertData", completion: {(results:Int?) in
if let code = results {
DispatchQueue.main.async {
let successfullHTTPResponce = 200
if code == successfullHTTPResponce {
self.navigationController?.popViewController(animated: true)
} else {
self.showMessage(message: NSLocalizedString("Duplicate data! Please, write another information", comment: "Message for user"))
}
}
}
})
} else {
queryService.postRequests(parameters : ["subject_name" : name, "subject_description" : description], sufix : "subject/update/\(subjectId)", completion: {(results:Int?) in
if let code = results {
DispatchQueue.main.async {
let successfullHTTPResponce = 200
if code == successfullHTTPResponce {
self.navigationController?.popViewController(animated: true)
} else {
self.showMessage(message: NSLocalizedString("Duplicate data! Please, write another information", comment: "Message for user"))
}
}
}
})
}
} else {
showMessage(message: NSLocalizedString("Please, enter all fields!", comment: "Message for user") )
}
}
override func viewDidLoad() {
super.viewDidLoad()
if !updateDates {
navigationItem.title = "Add new item"
} else {
navigationItem.title = "Update record"
subjectNameTextField.text = name
subjectDescriptionTextField.text = desc
}
subjectDescriptionTextField.layer.cornerRadius = 5
subjectDescriptionTextField.layer.borderWidth = 1
subjectDescriptionTextField.layer.borderColor = UIColor.lightGray.withAlphaComponent(0.6).cgColor
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
import Foundation
class QueryService {
let basePath = "http://vps9615.hyperhost.name/"
func postRequests(parameters: [String : String], sufix: String, completion: @escaping (Int?) -> ()) {
guard let url = URL(string: basePath + sufix) else { return }
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
guard let httpBody = try? JSONSerialization.data(withJSONObject: parameters, options: []) else { return }
request.httpBody = httpBody
let session = URLSession.shared
session.dataTask(with: request) { (data, response, error) in
guard let data = data, error == nil else {
print("error=\(String(describing: error))")
return
}
guard let httpStatus = response as? HTTPURLResponse else { return }
if httpStatus.statusCode != 200 {
print("statusCode should be 200, but is \(httpStatus.statusCode)")
print("response = \(String(describing: response))")
}
let responseString = String(data: data, encoding: .utf8)
print("responseString = \(String(describing: responseString))")
completion(httpStatus.statusCode)
}.resume()
}
func deleteReguest(sufix: String) {
guard let url = URL(string: basePath + sufix) else { return }
var request = URLRequest(url: url)
request.httpMethod = "DELETE"
let task = URLSession.shared.dataTask(with: request) { (data:Data?, response:URLResponse?, error:Error?) in
guard let _ = data, error == nil else {
print("error=\(String(describing: error))")
return
}
guard let httpStatus = response as? HTTPURLResponse else {return}
if httpStatus.statusCode != 200 {
print("statusCode should be 200, but is \(httpStatus.statusCode)")
}
}
task.resume()
}
}
import Foundation
class QueryService {
typealias QueryResult = ([Records]?, Int, String) -> ()
var records: [Records] = []
var statusCode: Int = 0
var errorMessage = ""
let basePath = "http://vps9615.hyperhost.name/"
func postRequests(parameters: [String : String], sufix: String, completion: @escaping QueryResult) {
guard let url = URL(string: basePath + sufix) else { return }
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
guard let httpBody = try? JSONSerialization.data(withJSONObject: parameters, options: []) else { return }
request.httpBody = httpBody
let task = URLSession.shared.dataTask(with: request) { (data:Data?, response:URLResponse?, error:Error?) in
if let error = error {
self.errorMessage += "DataTask error: " + error.localizedDescription + "\n"
} else if let data = data,
let response = response as? HTTPURLResponse,
response.statusCode == 200 {
self.updateSearchResults(data)
self.statusCode = response.statusCode
DispatchQueue.main.async {
completion(self.records, self.statusCode, self.errorMessage)
}
}
}
task.resume()
}
func getRecords (sufix: String, completion: @escaping QueryResult) {
guard let url = URL(string: basePath + sufix) else { return }
let request = URLRequest(url: url)
let task = URLSession.shared.dataTask(with: request) { (data:Data?, response:URLResponse?, error:Error?) in
if let error = error {
self.errorMessage += "DataTask error: " + error.localizedDescription + "\n"
} else if let data = data,
let response = response as? HTTPURLResponse,
response.statusCode == 200 {
self.updateSearchResults(data)
self.statusCode = response.statusCode
DispatchQueue.main.async {
completion(self.records, self.statusCode, self.errorMessage)
}
}
}
task.resume()
}
func deleteReguest(sufix: String) {
guard let url = URL(string: basePath + sufix) else { return }
var request = URLRequest(url: url)
request.httpMethod = "DELETE"
let task = URLSession.shared.dataTask(with: request) { (data:Data?, response:URLResponse?, error:Error?) in
guard let _ = data, error == nil else {
print("error=\(String(describing: error))")
return
}
guard let httpStatus = response as? HTTPURLResponse else {return}
if httpStatus.statusCode != 200 {
print("statusCode should be 200, but is \(httpStatus.statusCode)")
}
}
task.resume()
}
fileprivate func updateSearchResults(_ data: Data?) {
if let data = data {
do {
if let json = try JSONSerialization.jsonObject(with: data, options: []) as? [Any] {
for trackDictionary in json {
if let trackDictionary = trackDictionary as? [String: Any],
let desc = trackDictionary["subject_description"] as? String ,
let id = trackDictionary["subject_id"] as? String,
let name = trackDictionary["subject_name"] as? String {
records.append(Records(id : id, name : name, description: desc))
}
}
}
}
catch {
print(error.localizedDescription)
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment