From 1a85b46204851168ecbf1aa5719efd0284e6105d Mon Sep 17 00:00:00 2001 From: Ronald Huston Jr Date: Tue, 5 May 2020 23:03:43 -0500 Subject: [PATCH 1/6] built post request --- gigs/gigs.xcodeproj/project.pbxproj | 365 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../UserInterfaceState.xcuserstate | Bin 0 -> 22376 bytes .../xcschemes/xcschememanagement.plist | 14 + gigs/gigs/AppDelegate.swift | 37 ++ .../AppIcon.appiconset/Contents.json | 98 +++++ gigs/gigs/Assets.xcassets/Contents.json | 6 + gigs/gigs/Base.lproj/LaunchScreen.storyboard | 25 ++ gigs/gigs/Base.lproj/Main.storyboard | 151 ++++++++ gigs/gigs/GigsTableViewController.swift | 79 ++++ gigs/gigs/Info.plist | 64 +++ gigs/gigs/LoginViewController.swift | 77 ++++ gigs/gigs/Model/Bearer.swift | 13 + gigs/gigs/Model/GigController.swift | 112 ++++++ gigs/gigs/Model/User.swift | 14 + gigs/gigs/SceneDelegate.swift | 53 +++ 17 files changed, 1123 insertions(+) create mode 100644 gigs/gigs.xcodeproj/project.pbxproj create mode 100644 gigs/gigs.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 gigs/gigs.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 gigs/gigs.xcodeproj/project.xcworkspace/xcuserdata/turing.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 gigs/gigs.xcodeproj/xcuserdata/turing.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 gigs/gigs/AppDelegate.swift create mode 100644 gigs/gigs/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 gigs/gigs/Assets.xcassets/Contents.json create mode 100644 gigs/gigs/Base.lproj/LaunchScreen.storyboard create mode 100644 gigs/gigs/Base.lproj/Main.storyboard create mode 100644 gigs/gigs/GigsTableViewController.swift create mode 100644 gigs/gigs/Info.plist create mode 100644 gigs/gigs/LoginViewController.swift create mode 100644 gigs/gigs/Model/Bearer.swift create mode 100644 gigs/gigs/Model/GigController.swift create mode 100644 gigs/gigs/Model/User.swift create mode 100644 gigs/gigs/SceneDelegate.swift diff --git a/gigs/gigs.xcodeproj/project.pbxproj b/gigs/gigs.xcodeproj/project.pbxproj new file mode 100644 index 00000000..3b5d6cc4 --- /dev/null +++ b/gigs/gigs.xcodeproj/project.pbxproj @@ -0,0 +1,365 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 50; + objects = { + +/* Begin PBXBuildFile section */ + 0DDFAF7C246219A3009BD222 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DDFAF7B246219A3009BD222 /* AppDelegate.swift */; }; + 0DDFAF7E246219A3009BD222 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DDFAF7D246219A3009BD222 /* SceneDelegate.swift */; }; + 0DDFAF83246219A3009BD222 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 0DDFAF81246219A3009BD222 /* Main.storyboard */; }; + 0DDFAF85246219A6009BD222 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 0DDFAF84246219A6009BD222 /* Assets.xcassets */; }; + 0DDFAF88246219A6009BD222 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 0DDFAF86246219A6009BD222 /* LaunchScreen.storyboard */; }; + 0DDFAF9024621ABD009BD222 /* GigsTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DDFAF8F24621ABD009BD222 /* GigsTableViewController.swift */; }; + 0DDFAF9224622293009BD222 /* LoginViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DDFAF9124622293009BD222 /* LoginViewController.swift */; }; + 0DDFAF9424622EEC009BD222 /* User.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DDFAF9324622EEC009BD222 /* User.swift */; }; + 0DDFAF9624622F4A009BD222 /* Bearer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DDFAF9524622F4A009BD222 /* Bearer.swift */; }; + 0DDFAF9924622FD5009BD222 /* GigController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DDFAF9824622FD5009BD222 /* GigController.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 0DDFAF78246219A3009BD222 /* gigs.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = gigs.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 0DDFAF7B246219A3009BD222 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 0DDFAF7D246219A3009BD222 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; + 0DDFAF82246219A3009BD222 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 0DDFAF84246219A6009BD222 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 0DDFAF87246219A6009BD222 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 0DDFAF89246219A6009BD222 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 0DDFAF8F24621ABD009BD222 /* GigsTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GigsTableViewController.swift; sourceTree = ""; }; + 0DDFAF9124622293009BD222 /* LoginViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginViewController.swift; sourceTree = ""; }; + 0DDFAF9324622EEC009BD222 /* User.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = User.swift; sourceTree = ""; }; + 0DDFAF9524622F4A009BD222 /* Bearer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Bearer.swift; sourceTree = ""; }; + 0DDFAF9824622FD5009BD222 /* GigController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GigController.swift; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 0DDFAF75246219A3009BD222 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 0DDFAF6F246219A3009BD222 = { + isa = PBXGroup; + children = ( + 0DDFAF7A246219A3009BD222 /* gigs */, + 0DDFAF79246219A3009BD222 /* Products */, + ); + sourceTree = ""; + }; + 0DDFAF79246219A3009BD222 /* Products */ = { + isa = PBXGroup; + children = ( + 0DDFAF78246219A3009BD222 /* gigs.app */, + ); + name = Products; + sourceTree = ""; + }; + 0DDFAF7A246219A3009BD222 /* gigs */ = { + isa = PBXGroup; + children = ( + 0DDFAF7B246219A3009BD222 /* AppDelegate.swift */, + 0DDFAF7D246219A3009BD222 /* SceneDelegate.swift */, + 0DDFAF81246219A3009BD222 /* Main.storyboard */, + 0DDFAF8F24621ABD009BD222 /* GigsTableViewController.swift */, + 0DDFAF9124622293009BD222 /* LoginViewController.swift */, + 0DDFAF9724622F69009BD222 /* Model */, + 0DDFAF84246219A6009BD222 /* Assets.xcassets */, + 0DDFAF86246219A6009BD222 /* LaunchScreen.storyboard */, + 0DDFAF89246219A6009BD222 /* Info.plist */, + ); + path = gigs; + sourceTree = ""; + }; + 0DDFAF9724622F69009BD222 /* Model */ = { + isa = PBXGroup; + children = ( + 0DDFAF9524622F4A009BD222 /* Bearer.swift */, + 0DDFAF9824622FD5009BD222 /* GigController.swift */, + 0DDFAF9324622EEC009BD222 /* User.swift */, + ); + path = Model; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 0DDFAF77246219A3009BD222 /* gigs */ = { + isa = PBXNativeTarget; + buildConfigurationList = 0DDFAF8C246219A6009BD222 /* Build configuration list for PBXNativeTarget "gigs" */; + buildPhases = ( + 0DDFAF74246219A3009BD222 /* Sources */, + 0DDFAF75246219A3009BD222 /* Frameworks */, + 0DDFAF76246219A3009BD222 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = gigs; + productName = gigs; + productReference = 0DDFAF78246219A3009BD222 /* gigs.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 0DDFAF70246219A3009BD222 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 1140; + LastUpgradeCheck = 1140; + ORGANIZATIONNAME = HenryQuante; + TargetAttributes = { + 0DDFAF77246219A3009BD222 = { + CreatedOnToolsVersion = 11.4.1; + }; + }; + }; + buildConfigurationList = 0DDFAF73246219A3009BD222 /* Build configuration list for PBXProject "gigs" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 0DDFAF6F246219A3009BD222; + productRefGroup = 0DDFAF79246219A3009BD222 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 0DDFAF77246219A3009BD222 /* gigs */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 0DDFAF76246219A3009BD222 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 0DDFAF88246219A6009BD222 /* LaunchScreen.storyboard in Resources */, + 0DDFAF85246219A6009BD222 /* Assets.xcassets in Resources */, + 0DDFAF83246219A3009BD222 /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 0DDFAF74246219A3009BD222 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 0DDFAF9224622293009BD222 /* LoginViewController.swift in Sources */, + 0DDFAF9924622FD5009BD222 /* GigController.swift in Sources */, + 0DDFAF7C246219A3009BD222 /* AppDelegate.swift in Sources */, + 0DDFAF9624622F4A009BD222 /* Bearer.swift in Sources */, + 0DDFAF7E246219A3009BD222 /* SceneDelegate.swift in Sources */, + 0DDFAF9424622EEC009BD222 /* User.swift in Sources */, + 0DDFAF9024621ABD009BD222 /* GigsTableViewController.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 0DDFAF81246219A3009BD222 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 0DDFAF82246219A3009BD222 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 0DDFAF86246219A6009BD222 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 0DDFAF87246219A6009BD222 /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 0DDFAF8A246219A6009BD222 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 13.4; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 0DDFAF8B246219A6009BD222 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 13.4; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 0DDFAF8D246219A6009BD222 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = gigs/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = rgh.gigs; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 0DDFAF8E246219A6009BD222 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = gigs/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = rgh.gigs; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 0DDFAF73246219A3009BD222 /* Build configuration list for PBXProject "gigs" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 0DDFAF8A246219A6009BD222 /* Debug */, + 0DDFAF8B246219A6009BD222 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 0DDFAF8C246219A6009BD222 /* Build configuration list for PBXNativeTarget "gigs" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 0DDFAF8D246219A6009BD222 /* Debug */, + 0DDFAF8E246219A6009BD222 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 0DDFAF70246219A3009BD222 /* Project object */; +} diff --git a/gigs/gigs.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/gigs/gigs.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..e731b7f9 --- /dev/null +++ b/gigs/gigs.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/gigs/gigs.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/gigs/gigs.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/gigs/gigs.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/gigs/gigs.xcodeproj/project.xcworkspace/xcuserdata/turing.xcuserdatad/UserInterfaceState.xcuserstate b/gigs/gigs.xcodeproj/project.xcworkspace/xcuserdata/turing.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..105108053db28e91f68e00df0a576ddf44f545cc GIT binary patch literal 22376 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 P|8uW(ID0z&m2CZgIu+;2 literal 0 HcmV?d00001 diff --git a/gigs/gigs.xcodeproj/xcuserdata/turing.xcuserdatad/xcschemes/xcschememanagement.plist b/gigs/gigs.xcodeproj/xcuserdata/turing.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 00000000..d5f8ccaf --- /dev/null +++ b/gigs/gigs.xcodeproj/xcuserdata/turing.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,14 @@ + + + + + SchemeUserState + + gigs.xcscheme_^#shared#^_ + + orderHint + 0 + + + + diff --git a/gigs/gigs/AppDelegate.swift b/gigs/gigs/AppDelegate.swift new file mode 100644 index 00000000..8eb7f9bc --- /dev/null +++ b/gigs/gigs/AppDelegate.swift @@ -0,0 +1,37 @@ +// +// AppDelegate.swift +// gigs +// +// Created by ronald huston jr on 5/5/20. +// Copyright © 2020 HenryQuante. All rights reserved. +// + +import UIKit + +@UIApplicationMain +class AppDelegate: UIResponder, UIApplicationDelegate { + + + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { + // Override point for customization after application launch. + return true + } + + // MARK: UISceneSession Lifecycle + + func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { + // Called when a new scene session is being created. + // Use this method to select a configuration to create the new scene with. + return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) + } + + func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set) { + // Called when the user discards a scene session. + // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions. + // Use this method to release any resources that were specific to the discarded scenes, as they will not return. + } + + +} + diff --git a/gigs/gigs/Assets.xcassets/AppIcon.appiconset/Contents.json b/gigs/gigs/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 00000000..9221b9bb --- /dev/null +++ b/gigs/gigs/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,98 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "20x20" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "20x20" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "29x29" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "29x29" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "60x60" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "60x60" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "20x20" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "20x20" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "29x29" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "29x29" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "40x40" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "40x40" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "76x76" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "76x76" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "83.5x83.5" + }, + { + "idiom" : "ios-marketing", + "scale" : "1x", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/gigs/gigs/Assets.xcassets/Contents.json b/gigs/gigs/Assets.xcassets/Contents.json new file mode 100644 index 00000000..73c00596 --- /dev/null +++ b/gigs/gigs/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/gigs/gigs/Base.lproj/LaunchScreen.storyboard b/gigs/gigs/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 00000000..865e9329 --- /dev/null +++ b/gigs/gigs/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/gigs/gigs/Base.lproj/Main.storyboard b/gigs/gigs/Base.lproj/Main.storyboard new file mode 100644 index 00000000..b262cd0e --- /dev/null +++ b/gigs/gigs/Base.lproj/Main.storyboard @@ -0,0 +1,151 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/gigs/gigs/GigsTableViewController.swift b/gigs/gigs/GigsTableViewController.swift new file mode 100644 index 00000000..fb156c98 --- /dev/null +++ b/gigs/gigs/GigsTableViewController.swift @@ -0,0 +1,79 @@ +// +// GigsTableViewController.swift +// gigs +// +// Created by ronald huston jr on 5/5/20. +// Copyright © 2020 HenryQuante. All rights reserved. +// + +import UIKit + +class GigsTableViewController: UITableViewController { + + // MARK: - property + let gigController = GigController() + + + override func viewDidLoad() { + super.viewDidLoad() + + } + + override func viewDidAppear(_ animated: Bool) { + super.viewDidAppear(animated) + + if gigController.bearer == nil { + performSegue(withIdentifier: "Gigs", sender: self) + } + } + + // MARK: - Table view data source + + override func numberOfSections(in tableView: UITableView) -> Int { + + return 0 + } + + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + + return 0 + } + + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "", for: indexPath) + + return cell + } + + override func performSegue(withIdentifier identifier: String, sender: Any?) { + + } + + + + /* + // Override to support rearranging the table view. + override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) { + + } + */ + + /* + // Override to support conditional rearranging of the table view. + override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { + // Return false if you do not want the item to be re-orderable. + return true + } + */ + + /* + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destination. + // Pass the selected object to the new view controller. + } + */ + +} diff --git a/gigs/gigs/Info.plist b/gigs/gigs/Info.plist new file mode 100644 index 00000000..2a3483c0 --- /dev/null +++ b/gigs/gigs/Info.plist @@ -0,0 +1,64 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + $(PRODUCT_BUNDLE_PACKAGE_TYPE) + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + LSRequiresIPhoneOS + + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + UISceneConfigurations + + UIWindowSceneSessionRoleApplication + + + UISceneConfigurationName + Default Configuration + UISceneDelegateClassName + $(PRODUCT_MODULE_NAME).SceneDelegate + UISceneStoryboardFile + Main + + + + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/gigs/gigs/LoginViewController.swift b/gigs/gigs/LoginViewController.swift new file mode 100644 index 00000000..2a452ead --- /dev/null +++ b/gigs/gigs/LoginViewController.swift @@ -0,0 +1,77 @@ +// +// LoginViewController.swift +// gigs +// +// Created by ronald huston jr on 5/5/20. +// Copyright © 2020 HenryQuante. All rights reserved. +// + +import UIKit + +class LoginViewController: UIViewController { + + var gigController: GigController? + + enum LoginType { + case signIn + case signUp + } + + var selectLoginType: LoginType = .signIn { + didSet { + switch selectLoginType { + case .signIn: + signUpButton.setTitle("log in", for: .normal) + case .signUp: + signUpButton.setTitle("sign up", for: .normal) + } + } + } + + // MARK: - UI connections + @IBOutlet weak var signUpSegment: UISegmentedControl! + @IBOutlet weak var usernameTextField: UITextField! + @IBOutlet weak var passwordTextField: UITextField! + @IBOutlet weak var signUpButton: UIButton! + + + override func viewDidLoad() { + super.viewDidLoad() + + // Do any additional setup after loading the view. + } + + // MARK: - IBAction + @IBAction func segmentedControlAction(_ sender: Any) { + + switch signUpSegment.selectedSegmentIndex { + case 0: + selectLoginType = .signUp + passwordTextField.textContentType = .password + case 1: + selectLoginType = .signIn + passwordTextField.textContentType = .newPassword + default: fatalError() + } + } + + @IBAction func buttonTapped(_ sender: Any) { + // create user from textfield + guard let username = usernameTextField.text, + let password = passwordTextField.text, + + // are the textfields empty ? + !username.isEmpty, + !password.isEmpty else { return } + + let user = User(username: username, password: password) + + // use enum to access function + if selectLoginType == .signUp { + + } + + } + + +} diff --git a/gigs/gigs/Model/Bearer.swift b/gigs/gigs/Model/Bearer.swift new file mode 100644 index 00000000..3d01579c --- /dev/null +++ b/gigs/gigs/Model/Bearer.swift @@ -0,0 +1,13 @@ +// +// Bearer.swift +// gigs +// +// Created by ronald huston jr on 5/5/20. +// Copyright © 2020 HenryQuante. All rights reserved. +// + +import Foundation + +struct Bearer: Codable { + let token: String +} diff --git a/gigs/gigs/Model/GigController.swift b/gigs/gigs/Model/GigController.swift new file mode 100644 index 00000000..bbdf7f67 --- /dev/null +++ b/gigs/gigs/Model/GigController.swift @@ -0,0 +1,112 @@ +// +// GigController.swift +// gigs +// +// Created by ronald huston jr on 5/5/20. +// Copyright © 2020 HenryQuante. All rights reserved. +// + +import Foundation + +final class GigController { + + // MARK: - properties + enum HTTPMethod: String { + case get = "GET" + case post = "POST" + } + + enum NetworkError: Error { + case failedSignUp, failedLogIn, noData, badData + } + + var bearer: Bearer? + + private var baseURL = URL(string: "https://lambdagigapi.herokuapp.com/api")! + private lazy var signUpURL: URL = baseURL.appendingPathComponent("/users/signup") + private lazy var logInURL: URL = baseURL.appendingPathComponent("/users/login") + + private lazy var jsonEncoder = JSONEncoder() + private lazy var jsonDecoder = JSONDecoder() + + private let contentValue = "application/json" + private let httpHeaderType = "Content-Type" + + // MARK: - sign up + func signUp(for user: User, completion: @escaping (Result) -> Void) { + var request = URLRequest(url: signUpURL) + request.httpMethod = HTTPMethod.post.rawValue + request.setValue("application/json", forHTTPHeaderField: "Content-Type") + + do { + let jsonData = try jsonEncoder.encode(user) + request.httpBody = jsonData + + URLSession.shared.dataTask(with: request) { _, response, error in + if let error = error { + print("sign up failed with error: /(error)") + completion(.failure(.failedSignUp)) + return + } + guard let response = response as? HTTPURLResponse, + response.statusCode == 200 else { + print("sign up was not successful.") + completion(.failure(.failedSignUp)) + return + } + completion(.success(true)) + } + .resume() + + } catch { + print("error encoding user: \(error)") + completion(.failure(.failedSignUp)) + } + } + + func logIn(with user: User, completion: @escaping (Result) -> Void) { + var request = URLRequest(url: logInURL) + request.httpMethod = HTTPMethod.post.rawValue + request.setValue("application/json", forHTTPHeaderField: "Content-Type") + + do { + let jsonData = try jsonEncoder.encode(user) + request.httpBody = jsonData + } catch { + print("catch error decoding the data into the error token") + completion(.failure(.badData)) + return + } + + URLSession.shared.dataTask(with: request) { data, response, error in + if let error = error { + print("log in failed with error: \(error)") + return + } + + guard let response = response as? HTTPURLResponse, response.statusCode == 200 + else { + print("log in was not successful."); + completion(.failure(.failedLogIn)) + return + } + + guard let data = data else { + print("no data was returned.") + completion(.failure(.noData)) + return + } + + do { + self.bearer = try self.jsonDecoder.decode(Bearer.self, from: data) + completion(.success(true)) + return + } catch { + print("error decoding bearer: \(error)") + completion(.failure(.failedLogIn)) + return + } + + }.resume() + } +} diff --git a/gigs/gigs/Model/User.swift b/gigs/gigs/Model/User.swift new file mode 100644 index 00000000..46114c16 --- /dev/null +++ b/gigs/gigs/Model/User.swift @@ -0,0 +1,14 @@ +// +// User.swift +// gigs +// +// Created by ronald huston jr on 5/5/20. +// Copyright © 2020 HenryQuante. All rights reserved. +// + +import Foundation + +struct User: Codable { + let username: String + let password: String +} diff --git a/gigs/gigs/SceneDelegate.swift b/gigs/gigs/SceneDelegate.swift new file mode 100644 index 00000000..40e7b6ec --- /dev/null +++ b/gigs/gigs/SceneDelegate.swift @@ -0,0 +1,53 @@ +// +// SceneDelegate.swift +// gigs +// +// Created by ronald huston jr on 5/5/20. +// Copyright © 2020 HenryQuante. All rights reserved. +// + +import UIKit + +class SceneDelegate: UIResponder, UIWindowSceneDelegate { + + var window: UIWindow? + + + func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { + // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`. + // If using a storyboard, the `window` property will automatically be initialized and attached to the scene. + // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead). + guard let _ = (scene as? UIWindowScene) else { return } + } + + func sceneDidDisconnect(_ scene: UIScene) { + // Called as the scene is being released by the system. + // This occurs shortly after the scene enters the background, or when its session is discarded. + // Release any resources associated with this scene that can be re-created the next time the scene connects. + // The scene may re-connect later, as its session was not neccessarily discarded (see `application:didDiscardSceneSessions` instead). + } + + func sceneDidBecomeActive(_ scene: UIScene) { + // Called when the scene has moved from an inactive state to an active state. + // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive. + } + + func sceneWillResignActive(_ scene: UIScene) { + // Called when the scene will move from an active state to an inactive state. + // This may occur due to temporary interruptions (ex. an incoming phone call). + } + + func sceneWillEnterForeground(_ scene: UIScene) { + // Called as the scene transitions from the background to the foreground. + // Use this method to undo the changes made on entering the background. + } + + func sceneDidEnterBackground(_ scene: UIScene) { + // Called as the scene transitions from the foreground to the background. + // Use this method to save data, release shared resources, and store enough scene-specific state information + // to restore the scene back to its current state. + } + + +} + From 3c04575b584114daaccad45655a6056e21072c08 Mon Sep 17 00:00:00 2001 From: Ronald Huston Jr Date: Wed, 6 May 2020 20:26:06 -0500 Subject: [PATCH 2/6] day 2 files --- gigs/gigs.xcodeproj/project.pbxproj | 8 ++ .../UserInterfaceState.xcuserstate | Bin 22376 -> 24275 bytes gigs/gigs/Base.lproj/Main.storyboard | 131 +++++++++++++++++- gigs/gigs/GigDetailViewController.swift | 36 +++++ gigs/gigs/Model/Gig.swift | 15 ++ gigs/gigs/Model/GigController.swift | 101 +++++++++++++- 6 files changed, 288 insertions(+), 3 deletions(-) create mode 100644 gigs/gigs/GigDetailViewController.swift create mode 100644 gigs/gigs/Model/Gig.swift diff --git a/gigs/gigs.xcodeproj/project.pbxproj b/gigs/gigs.xcodeproj/project.pbxproj index 3b5d6cc4..85e1fb82 100644 --- a/gigs/gigs.xcodeproj/project.pbxproj +++ b/gigs/gigs.xcodeproj/project.pbxproj @@ -17,6 +17,8 @@ 0DDFAF9424622EEC009BD222 /* User.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DDFAF9324622EEC009BD222 /* User.swift */; }; 0DDFAF9624622F4A009BD222 /* Bearer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DDFAF9524622F4A009BD222 /* Bearer.swift */; }; 0DDFAF9924622FD5009BD222 /* GigController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DDFAF9824622FD5009BD222 /* GigController.swift */; }; + 0DE46F11246373EF00EC2A30 /* GigDetailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DE46F10246373EF00EC2A30 /* GigDetailViewController.swift */; }; + 0DE46F132463783700EC2A30 /* Gig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DE46F122463783700EC2A30 /* Gig.swift */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -32,6 +34,8 @@ 0DDFAF9324622EEC009BD222 /* User.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = User.swift; sourceTree = ""; }; 0DDFAF9524622F4A009BD222 /* Bearer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Bearer.swift; sourceTree = ""; }; 0DDFAF9824622FD5009BD222 /* GigController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GigController.swift; sourceTree = ""; }; + 0DE46F10246373EF00EC2A30 /* GigDetailViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GigDetailViewController.swift; sourceTree = ""; }; + 0DE46F122463783700EC2A30 /* Gig.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Gig.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -67,6 +71,7 @@ 0DDFAF7B246219A3009BD222 /* AppDelegate.swift */, 0DDFAF7D246219A3009BD222 /* SceneDelegate.swift */, 0DDFAF81246219A3009BD222 /* Main.storyboard */, + 0DE46F10246373EF00EC2A30 /* GigDetailViewController.swift */, 0DDFAF8F24621ABD009BD222 /* GigsTableViewController.swift */, 0DDFAF9124622293009BD222 /* LoginViewController.swift */, 0DDFAF9724622F69009BD222 /* Model */, @@ -83,6 +88,7 @@ 0DDFAF9524622F4A009BD222 /* Bearer.swift */, 0DDFAF9824622FD5009BD222 /* GigController.swift */, 0DDFAF9324622EEC009BD222 /* User.swift */, + 0DE46F122463783700EC2A30 /* Gig.swift */, ); path = Model; sourceTree = ""; @@ -159,12 +165,14 @@ buildActionMask = 2147483647; files = ( 0DDFAF9224622293009BD222 /* LoginViewController.swift in Sources */, + 0DE46F11246373EF00EC2A30 /* GigDetailViewController.swift in Sources */, 0DDFAF9924622FD5009BD222 /* GigController.swift in Sources */, 0DDFAF7C246219A3009BD222 /* AppDelegate.swift in Sources */, 0DDFAF9624622F4A009BD222 /* Bearer.swift in Sources */, 0DDFAF7E246219A3009BD222 /* SceneDelegate.swift in Sources */, 0DDFAF9424622EEC009BD222 /* User.swift in Sources */, 0DDFAF9024621ABD009BD222 /* GigsTableViewController.swift in Sources */, + 0DE46F132463783700EC2A30 /* Gig.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/gigs/gigs.xcodeproj/project.xcworkspace/xcuserdata/turing.xcuserdatad/UserInterfaceState.xcuserstate b/gigs/gigs.xcodeproj/project.xcworkspace/xcuserdata/turing.xcuserdatad/UserInterfaceState.xcuserstate index 105108053db28e91f68e00df0a576ddf44f545cc..b71118bc60e694d34651c3d176929e412dbfc854 100644 GIT binary patch delta 11642 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 E0}~1>CIA2c delta 10665 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 diff --git a/gigs/gigs/Base.lproj/Main.storyboard b/gigs/gigs/Base.lproj/Main.storyboard index b262cd0e..e44a2dea 100644 --- a/gigs/gigs/Base.lproj/Main.storyboard +++ b/gigs/gigs/Base.lproj/Main.storyboard @@ -39,6 +39,9 @@ + + + @@ -46,7 +49,13 @@ - + + + + + + + @@ -127,7 +136,122 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Nam liber te conscient to factor tum poen legum odioque civiuda. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -148,4 +272,7 @@ + + + diff --git a/gigs/gigs/GigDetailViewController.swift b/gigs/gigs/GigDetailViewController.swift new file mode 100644 index 00000000..b8e76611 --- /dev/null +++ b/gigs/gigs/GigDetailViewController.swift @@ -0,0 +1,36 @@ +// +// GigDetailViewController.swift +// gigs +// +// Created by ronald huston jr on 5/6/20. +// Copyright © 2020 HenryQuante. All rights reserved. +// + +import UIKit + +class GigDetailViewController: UIViewController { + + @IBOutlet weak var gigNameTextField: UITextField! + @IBOutlet weak var dueDate: UIDatePicker! + @IBOutlet weak var descriptionTextView: UITextView! + + + override func viewDidLoad() { + super.viewDidLoad() + + // Do any additional setup after loading the view. + } + + @IBAction func save(_ sender: Any) { + guard let gigName = gigNameTextField.text, + gigName.isEmpty == false, + let description = descriptionTextView.text + else { + return + } + + // let gig = + } + + +} diff --git a/gigs/gigs/Model/Gig.swift b/gigs/gigs/Model/Gig.swift new file mode 100644 index 00000000..3fb03365 --- /dev/null +++ b/gigs/gigs/Model/Gig.swift @@ -0,0 +1,15 @@ +// +// Gig.swift +// gigs +// +// Created by ronald huston jr on 5/6/20. +// Copyright © 2020 HenryQuante. All rights reserved. +// + +import Foundation + +struct Gig: Codable { + let title: String + let description: String + let dueDate: Date +} diff --git a/gigs/gigs/Model/GigController.swift b/gigs/gigs/Model/GigController.swift index bbdf7f67..2916cc77 100644 --- a/gigs/gigs/Model/GigController.swift +++ b/gigs/gigs/Model/GigController.swift @@ -16,8 +16,16 @@ final class GigController { case post = "POST" } + var gigs: [Gig] = [] + enum NetworkError: Error { case failedSignUp, failedLogIn, noData, badData + case notSignedIn, failedFetch, failedPost + } + + enum LogInStatus { + case notLoggedIn + case loggedIn } var bearer: Bearer? @@ -25,6 +33,7 @@ final class GigController { private var baseURL = URL(string: "https://lambdagigapi.herokuapp.com/api")! private lazy var signUpURL: URL = baseURL.appendingPathComponent("/users/signup") private lazy var logInURL: URL = baseURL.appendingPathComponent("/users/login") + private lazy var allGigsURL: URL = baseURL.appendingPathComponent("/gigs/") private lazy var jsonEncoder = JSONEncoder() private lazy var jsonDecoder = JSONDecoder() @@ -90,7 +99,6 @@ final class GigController { completion(.failure(.failedLogIn)) return } - guard let data = data else { print("no data was returned.") completion(.failure(.noData)) @@ -109,4 +117,95 @@ final class GigController { }.resume() } + + func fetchGigs(completion: @escaping (Result) -> Void) { + guard let bearer = bearer else { + completion(.failure(.notSignedIn)) + return + } + + let request = getRequest(for: allGigsURL, bearer: bearer) + + URLSession.shared.dataTask(with: request) { data, response, error in + if let error = error { + print("failed to fetch gigs: \(error)") + completion(.failure(.failedFetch)) + return + } + + guard let response = response as? HTTPURLResponse, + response.statusCode == 200 + else { + print("Gig names received bad response") + completion(.failure(.failedFetch)) + return + } + + guard let data = data else { + completion(.failure(.badData)) + return + } + do { + let gigs = try self.jsonDecoder.decode([Gig].self, from: data) + self.gigs = gigs + completion(.success(true)) + } catch { + print("error decoding Gigs: \(error)") + completion(.failure(.badData)) + } + }.resume() + } + + func postGig(for gig: Gig, completion: @escaping (Result) -> Void) { + guard let bearer = bearer else { + completion(.failure(.notSignedIn)) + return + } + + let request = gigUrl(with: allGigsURL, with: bearer, requestType: .post) + + URLSession.shared.dataTask(with: request) { data, response, error in + if let error = error { + print("gig failed to post. error: \(error)") + completion(.failure(.failedFetch)) + return + } + + guard let response = response as? HTTPURLResponse, + response.statusCode == 200 + else { + print("gig received non-200 response") + completion(.failure(.failedFetch)) + return + } + + guard let data = data else { + return completion(.failure(.badData)) + } + + do { + let gig = try self.jsonDecoder.decode([Gig].self, from: data) + completion(.success(true)) + self.gigs.append(contentsOf: gig) + } catch { + print("error decoding gig: \(error)") + completion(.failure(.failedPost)) + } + }.resume() + + } + + private func getRequest(for url: URL, bearer: Bearer) -> URLRequest { + var request = URLRequest(url: url) + request.addValue("Bearer \(bearer.token)", forHTTPHeaderField: "Authorization") + return request + } + + private func gigUrl(with url: URL, with bearer: Bearer, requestType: HTTPMethod) -> URLRequest { + var request = URLRequest(url: url) + request.httpMethod = requestType.rawValue + request.setValue("application/json", forHTTPHeaderField: "Content-Type") + request.addValue("Bearer \(bearer.token)", forHTTPHeaderField: "Authorization") + return request + } } From 83bb1e57728210bdb001da8b92edc19dbcca4b2f Mon Sep 17 00:00:00 2001 From: Ronald Huston Jr Date: Sun, 14 Jun 2020 14:49:56 -0500 Subject: [PATCH 3/6] fixed login --- gigs/gigs.xcodeproj/project.pbxproj | 24 +++- .../UserInterfaceState.xcuserstate | Bin 24275 -> 36515 bytes gigs/gigs/Base.lproj/Main.storyboard | 14 +-- gigs/gigs/LoginViewController.swift | 77 ------------- .../{ => VCs}/GigDetailViewController.swift | 0 .../{ => VCs}/GigsTableViewController.swift | 32 ++---- gigs/gigs/VCs/LoginViewController.swift | 106 ++++++++++++++++++ .../GigController.swift | 23 ++-- 8 files changed, 153 insertions(+), 123 deletions(-) delete mode 100644 gigs/gigs/LoginViewController.swift rename gigs/gigs/{ => VCs}/GigDetailViewController.swift (100%) rename gigs/gigs/{ => VCs}/GigsTableViewController.swift (62%) create mode 100644 gigs/gigs/VCs/LoginViewController.swift rename gigs/gigs/{Model => model controller}/GigController.swift (93%) diff --git a/gigs/gigs.xcodeproj/project.pbxproj b/gigs/gigs.xcodeproj/project.pbxproj index 85e1fb82..04e964ad 100644 --- a/gigs/gigs.xcodeproj/project.pbxproj +++ b/gigs/gigs.xcodeproj/project.pbxproj @@ -49,6 +49,24 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 0D977A76247B161F00BCFADA /* VCs */ = { + isa = PBXGroup; + children = ( + 0DDFAF9124622293009BD222 /* LoginViewController.swift */, + 0DDFAF8F24621ABD009BD222 /* GigsTableViewController.swift */, + 0DE46F10246373EF00EC2A30 /* GigDetailViewController.swift */, + ); + path = VCs; + sourceTree = ""; + }; + 0D977A77247B163800BCFADA /* model controller */ = { + isa = PBXGroup; + children = ( + 0DDFAF9824622FD5009BD222 /* GigController.swift */, + ); + path = "model controller"; + sourceTree = ""; + }; 0DDFAF6F246219A3009BD222 = { isa = PBXGroup; children = ( @@ -71,9 +89,8 @@ 0DDFAF7B246219A3009BD222 /* AppDelegate.swift */, 0DDFAF7D246219A3009BD222 /* SceneDelegate.swift */, 0DDFAF81246219A3009BD222 /* Main.storyboard */, - 0DE46F10246373EF00EC2A30 /* GigDetailViewController.swift */, - 0DDFAF8F24621ABD009BD222 /* GigsTableViewController.swift */, - 0DDFAF9124622293009BD222 /* LoginViewController.swift */, + 0D977A77247B163800BCFADA /* model controller */, + 0D977A76247B161F00BCFADA /* VCs */, 0DDFAF9724622F69009BD222 /* Model */, 0DDFAF84246219A6009BD222 /* Assets.xcassets */, 0DDFAF86246219A6009BD222 /* LaunchScreen.storyboard */, @@ -86,7 +103,6 @@ isa = PBXGroup; children = ( 0DDFAF9524622F4A009BD222 /* Bearer.swift */, - 0DDFAF9824622FD5009BD222 /* GigController.swift */, 0DDFAF9324622EEC009BD222 /* User.swift */, 0DE46F122463783700EC2A30 /* Gig.swift */, ); diff --git a/gigs/gigs.xcodeproj/project.xcworkspace/xcuserdata/turing.xcuserdatad/UserInterfaceState.xcuserstate b/gigs/gigs.xcodeproj/project.xcworkspace/xcuserdata/turing.xcuserdatad/UserInterfaceState.xcuserstate index b71118bc60e694d34651c3d176929e412dbfc854..6c3c05071646b4cd8d4e0626a68225b5bfef8b20 100644 GIT binary patch literal 36515 zcmeEvcYIVu*Z-ZlckjKM#%?O<3jspPCYzp+!e&#JO;0wVLkP)|ETpkX=;*zGfPjFA zhyntkBZ8nv6)7ShiqcUKQAEUwB3JOwklW$tafMD7*gM#+WP(=DOMe-O4QGRc82B+^w;$zJIs6;Ui7ujSbEe zn!ch`(J9ZEZ5nT?NNtI9lHw_OiLtS)(IlWPO8g#WPdQK?RAT&7` zYC1KSnn%s2mQu^87pdjcT53JDnR<=dP3@=NrjAhWQ75TW)OXbP)J^IK>PPAp^%HfQ zxef&@}V}nvQ0mndnJ03(ZDz&{JqGnuq42r_pn0FdNI9} zUPiB?SJP|g?ey#P4tgiOi{4G|q4&~n&~MR)>9^@4^ild<`aSwIeV)ERe@0)WKc}zJ zH|X!_oAeL#uk>&9UHTq_7|gItFcZdvGf_-56VD_t$xI5PW6~Hs(}&4na+yM=i0RAp zV+JvUnPE&BV`4@yBbiZ59aGOVGEK}=%v@$3GoN{yS-?EQEM%T#7BSB;OPFS66|&kSszLDT|Ut%aUZtvJzQeSwC5S*#Ox<*&x|q z*$~-KS*fgCHc~c9)*x$?HOVH+9+NGSJttc%dtUZ}Y>8~CY?c$m*=pHKvR7rV z$@a?Lke!vClbx4ckbNloNOncV+ijSJsVnXFb@?tS9Tm zdb2*PFYCv4WrNrVHj?edCbCAhm@Q%Zvi;cp>;QHkJBS_34q?mKDz=(!WSiJ=tiX!w z^Xv=k5_T!OjD3+^&aPlrvd!!&b{)H!eVyIG?qv6~2iOnUkJyXsCH7}U*%up zxAU*_JNTXaLH-c`7Jrz3k3Y{};6LO);xF=-_>cMP{FnR<{ww|`{x*My|5=XYST2*h z$=&51^3HNkxvyL$?;`Ii?;#JBYvfUKtvp?xAvegg)B?eBW;6)nyG0&6JXI7O+4!Q?8VozzElch*Cwj zsHnJ@h^Uw-b-X4*qmE9~rK)wQQL*Z%xb*0>xYV?S$c)rdg{vVwqhFn6R6~7PxhcJ_ zys5@i+h{A;i|R@RucN#vAIg{Vqx>lq)kTmAtiTDpAQ$We`*l1&XG*Rlb z*oX{ubY^sdIzBxvLmibFof?xKm##^VhGz9>%@I=T$}IiL8v2?W%)_fq{mhM3Mssat zwFyE>6+PRRB-Nob&sbz?Xsol8L3Hanm|oUcR;uuasHx?Ru#mR)M8~QrJljgGtE(Pf zW--`GEmd@G3$xa!ebB^->d5F&Rb0&EP}RhUs8|iSW8)`Jwsmkcl}rV%r(&pBDvpY$ z5~yBOB9$aK37rImpcI@17r|9hma@q7X}GKz+Ek9N)-yI zhOw${Y+l(Ib7dJcQu1p3nrbmYQ%NjCZ9_e<33V39%O%%TQ)d~kx0KaarJIH~RaTlT zgZr9IV{Knb6``bwHjs4ansifxxw4jIWCV7lktA!YN=c&`{LH3?A&@?!!rW4%+}8R+ zs)Pz&MHNv-s#xeOcnV&tsJ>J`s=weZ^b!(Dt5p5V>ncoPkUrbo7}naDFk_>osl2ht z0+3P~P1VpGQ$=fNslxX^Br`NLG?^M~BT9I8{znP$t1g@D=<7e?cX5 z5xTCUDgoSP_;jbLsTv^wK;0ca-GoRXUV?WE`ih_mr3xRYs4*>qz=x9(IH!-VEvqq?lQ{!%^_IG( zdVqf#OrNs)22+J@d`Sb$BSj}tiIzT*3LxXx+B+R8pfioAvzS_olcKv$oCrYG5X?r# zMTDy2H8GPX^R`|aPfeuUS5gy%9xJIyLLi|vq{O~u)zG!6)+X7a3e*%TcqJtYJy%jw zg&;vwTxqUs?fx0mEGoE}nn^t=1PdX=F$Wx>f~KHDw5O>>RPbtQ0faB4o)y#(Crk)m z4PULl@KyTN82hF*0QhPEFx9H^R>D$}OFT|dE2x!JGqq}N53-kR&7vDMD{SE2IiKAx%gZGK5S)zlr*k`i!~?zum2$ zp41Ji>#ER4FbLW3+s*oM7jmtx>_^Nmw|3B$01YDs!>0uQ)_G7ozMlAbfS(QPRtQJ~ z2O)%FXILzCmR8)i&QKE6no-A8WDSsJ>BGsa^B#zAT3t=O#nb?k5lBG!DC?rvKo&tl znHzNDN!6sR!sy(-VC&TWW3!-C(yTvD&bYYP$&*i6`GkAa{S`u%gvSX>r0kW{{dLG0xgb~MhTM?{ z>MRrrMS@W%7D|M^LO&s^R1w=ktAVIlMgS9{Ycf|?m@I_ex2{yS62ej&8!hJHO^u`{ zqW>oe4HZB#&5h%MG3c;1JX}O!lev6UA5(RGsUop8sg%PZ%g~2PSp1_(w zmfo!iTb4>fr&{KsEm;(bA<3eJp(|0WP)d?1)B6^;@)Xv^Qi4=3>i#N}h>}pUFiaRB zn1w7`CR&tExvxU0NQcsdGGVw-z6xbfJ&|6hfSQfXEZR7q0PUP%9nud% zr4OYa2I+?jBO(1LvbK^+v@%jsCF->uGO0vORPf8F3YpPJGzwLt8dQtwP(2!rET{oB z3N=ElP$$$2qXmo5AT$b1!Wdz!Fisf%G8%)%qH$_%?cICBjknNZ6zi@Bk$mQdPK!o9RWq$Mlx9oXiCB5Z6;TbEjkF#tm~uAr>3igY)D zn-mV6N50tjSc%JqwTj#- zI;Mh|V+(F!g{_HU=D0wWT8gw*M5;y4KkW%~Lu(yuNLzpwk{R-hFmWY%R+#i>Gvs;d zelvOjEfFRQLfh?XW+WA@eOJRnzRK0=r4QdzGjNYWywD+*}+5vP>;%?5O!{}`&>F z4+^j`+&OjS*3lo@Mjr^CtTAfJ%(ZRaz-?LUnLomowk=F}L6|Kp6J`m|mnyZ8hwa9f>vBa zm(a%p+sZAm)<}3tm@CYKD#QBNSXWzIR$p(b=vmq;NZ};)+NbCu2O6MOB`Dzt^u+5Sa=!;1C;6V2oAI*B6ZLjF^)vEc`ZQSLt3@4P?)D+Y@SbA zxciQx6&2%4-V-!2coRx^iKO!bK4#ELEfk zl*@ybpHfB12w)U?g@=a|0@)A_yIv?U+=jk}aC5#fB0k()*Ptf5tMIlzupbJ4#JEU1 z18Y}eC3Xf*8J50c)40~%r)@HqtMF zac5Ex+2#JF_}1Biy{P*uvA3|imC9j1+!ZJl_QxvRMOY!M6q;Az0Nf3C7ghL5(0d%qq=s*Q_6qX3D2%vLK+zus*=B4e z@OxCyX*>!ts|GSsi+Li19bVR8g0&{hVyXrjFvcWM!Zu-vRKRF#fh`o!m}WfMnqhs@ z@M?3pG~?6_)=fmq+Ju|1Km~8aWAIo!4v)tZ@I*WbPsWeo$A#^}>%tCUr?5-dE$k8Y z3U3JeHez7P$S-~ZPscOxOmNK--h}0s{2mhC5{?P)fa^Hn47_ZckqVQ9#jpmeJP0-c zK-?b=1STohTnnrk(5fzv3{C@9EUgYSjb)W4*bO`~j-hspB#8yC=iywctvp~WlE|Lo zp&3FUeC>$2vZpNGN%fb=iC=ex5N$VnPY8YypbP^LJ6}AnXUm+}3I&KZn z_Ox0M;goP%I3t{0jZflJ)D3(_I44{LiP6V`raxgY$rf&amB%EmffDO!-CkIW zY2B~1^5V8)E@BXBt;Uz|$M`b-L^v;85Iz(>S`A$8IJ^n=vfY5Z905)lrk8hL*tHPu z33iXBvDWQvQQ25Y01A_@V`z&Y)>vLgL_ewyf!5@8mPU}Gms`yBuVzY#92MB|`NP#-1i$Q$aaTg14ev9`!R;-75$YJ6L`ENCP+{Q^4#{44%V z_(b@uZSA~Iqd#)_G^TpejBo|o{izVq+Q9)@L1OM(%Aw`7<3mZEAgMyQ3Q0eQ%|+{w z1Zc-1BYRlucBaGt60$MoI?x0Vb zE--Rf_gDcdwVecBE_7BVJkiH+0sF=Q1Km-HPxWN4XbMCHg)l1{T! z;Rh-)RYXLTis-{saZwr-`HhH<)~FIR8Wq%2ql$``JmMkhA40pO>!Nj0X_`!RY9uH( zqtkVch-i;! zR0Rjn-A1QrqBG;8Q`K=XvGMARglLUABRV!tof;RF5T%Qb(8Z=_4r-@RJe8f3oA)Tq z28?0*@|$z>TQwM@j)g^ftFn=l8JU(I8yy`Jr-t0q)Cp-B>1s_vYK&T!o)DjwnvfQ$ ziI0FXVVpwAKutc~uYa!r0|!AT+i)VavE6KfHNIn5`?^>sg{0(!JSI+ziUL(rL`?J_ zRHe{|6DP*El-W^>3au_3){0W8^ybohQnBIXg9JAqJua|$k&=VjwPR{nciQw^ZOxht zxmKAwD1Dl%@`q~1#f>P7i7AVSijIv1n%f1cOKRJK;@Ei5l3DR9p&Gu!X)7h=1={f- zI8PM^XQ?cd04l4c)Lu9Tb&>iCPCxw$XPw;OR8u0-!^x#_XeyjjS^{U2mZOzu6pG*AIu3g>`E!RenydJH{|UQWM6Z=+AZX`LVGpXfV` zGoxlAnN%j7$%ZpI`EV*{6f>2X38!rqGwUS&10(4_s6{*cFvo>2tm{7QNqYfpwQ1FW zzOMo=Z)yz?JhG3mEgimeAQilU_M`o272SpIN(a#0=Sx-w^SeBHmAyMOPh&Y)94CnQI#x ztm=JW8bJx`)gq0P*cB@)*^pUh0j9lSuyhK*SYBl!IvH2#E9huofd+Abb;}PD`<$|d zMk2ecHbI7MazrVa4z>ps)`XyKfE^bs@31qo(G+QN05SHGTtpQEye>I(VdY2+wIk{v zx=qg68ojfmdFsfmkt*A|F^SfKE}c%MQ|R8pkHRhCr&V++t)tU~+ad}SQ3B}^o8myy zrW^jCarq-JXe1lq;dNye=(LuUR@O19z*0xf85*1FN$dWYtV5jtDZ6QFj)Bew#)Zxj z?yRJ9gkM1W*|rU%3$0tOpGy@*e^)X>1}Ut%9@-I3)?C<6+nQ>tKrua#3SL8((0%EC zbboq)@T>5fa96k|++RZvq6gCh=%I9}@Vkhdh5I6M6_E$&U~)P|8YAn{584D^##)^1 z@CNkGHo|cD0%T8ZqCCPnNMW#9gN`0!1_l6jLIz#iaJ0${3IEu(N&)L=(502tjv+^4 z+6UO$R7sB_7^$Mo^hn`>h$s=ERdh97L)VH3i-;BxLzJ$%mKqz&%Lpgr*XlulpI28K zq0s>9$$5o=b#*nsYqUlHl$t^L8qoWuL=*yge;_%md?!5y_E7X#5y@cFFP&|oC(x5& z_d-vkCy9s^5!XyVMn5hhUPN*sqNJR#JwwXtYDbtWn=CE!&l6f%S6)|ET-Q`y)lyZd zU|Xh7(6cD_)%0|F20fF0QbcwlvKNtqh#Xhbv*|hXQ}kRBIftZca1;Pqowpq%|jZ$YmPdf7j5xEG92j*qx zt7{DEER9VWM!!g}AQNc0h}>4vD@A18xOkEQ%&x5)Tbtk1NcNlrC;iM7ja32K`YYCv zvUTBF`eiD3ExnFjPj8?%!uqgDM4d(CDIzZsd5g$LM80e3&GZ)f6?!YZjp{BUKN0zh zNF^e0_Ygo&G?2g}vy2=y8k7dz2r6SjjA2P8bHP+mTvwlC8e^(%nFHy7{ce(C(2!nS z*IHKz(gk%5aFz&EMMOy9K>}0B@fsk?rnX`Li_&1g$*>kxQb6x(ReiT*Ma%%{;>7rf zgs}L8SkRfrL`6r%Xc8hrRWXqfVX^ViG12jH@$oTmXf9e(r_=jjhflvr@23yY2SwCH zL|sJ`Afj&2-y?=ssfQ0#573nj9F^6iuGFiebPWT?MhsUsjaFC3=>}HDS=7bZ>YC^} zTZbN_-;q=it#iT_a)O2p?n?T75%pY2pA-=s>1a>w&Jk)SqM%Ym>fa=HVdIE2gHStL zkss0@6H4$AeUZK-q7V^=Zi72|6zC!_t zi4j5sO<$>l`bw3DEyknT0)j~TKK;AxkeaP;|Ja+W=m!i%q$AQ$SQGEP{>C>SO1f-a0JMbww%=*f67-i#09%lI+=jEd>PbY%jVZcKNk z2NTHj6j6T>)rd$G(IOFT5YcWC9TyQ`@_P{@5xa{xP{i>f&J%H&h{tr88H`$*8HuHe z!oN8)!pZtv9j-TnCdhUWwdLSc8^6IsO64S%D$@UMIXYNSOqPeUj+3(P{lC!iK;_d- zjb-NQj*I@oWhF^v!J*&0zuSyF)7b8j8td^St2XN4LQCIsbaw2Er6&*|MJjRNaYp&?|_RZ-Zo($};}% z+xFMWtCh+tDOC*pyM0+hXeW>ZV9#65@c%bL+8`C$uT-J`yM?wA>=p_kZ6la5j0nm! zW-K#~8P7~$CNh(l$;@NStIC7RM_bikV} zTT&a-^9u8-Rc*#>6W$e3^`E4+rP#&1MKHFT*~9E*-eC4IZ!-It1I$6@kcetUR41Z( z5sem+MMMoEY7|kEh{lL$>_+BrE5_bw!Pp5AlsByyo79T2$N$9`to`kjy#H4iyGSqw zeC2o>#y%k!yTW`*J|dbRqKVR9z?i+l%{Jy=GG9v=`-)&}GC|3=1Y?gqgfYcCwlqI7 zwmGBT`JH(nqhv^iWweZu$wV|oL{mjHO+-(KXu61Ih-jvW zV8by>M6)-_I2*EL4l+kVy<{NJnA3)=`63({v{J8y|03%jL6*!HkR=1z$5SoHl63)O z$-2q{$VWtTMKn+P3&`?UxVMbCELf(tB1;xZko7d6L>5kvwcsISDQUj|t851T*iy&H z;;k5y#Sx4>`zNVwDN11iLbXkThQ>K@}=IuEVEfx__;1@)+L_|wP zv`j=mc|m%#Vxugp6=V4l^^zGyw6YCjt6Qnpx_>eD&tPmA!5Hu>%{Gix0LJh#*$DCx z4vJ`%^k=cc(>C7KvN{Q0wFF;l2tq~^e64*5Uy7@?G-G7rB~*2JTm%$yb zjWR(d%BIMs%BIPlkWH7(kj<0HwQMS@W7F7l zHiOL+(Z?dXETT_DbVWok7d{iwRS|tIqH7}hVk6r}LKK_B=1RwS*+LOrmk=eQ8zTBj zI>{@dZ~sNqKZB^D1W_OZ`qGA|;RI0+o#kzzH>{Z*+2I^7Tf^2{Nfuj2NY>ZQ>}U)u z&Nt*F?;ivYR?QU)YHv8bYs+ptJ4piDL;|+&{v@?6#T51_0=B8_H1-L0Iy-}%$v(-> zVrR2+M08U`KZxi@5#18ePa=ZD9(P3avxt5X(XSiXxvk{u8EHvmfz|)5jeOl}T@oMs z3$}j-Y^w>_)`;k?4Q%THY;e}g`U_ig>9-XfTi9(9wzd*%!7<%U>}!N=|NS9sDUnUt z&+cOPN|4$EkiyiTB(g#3Ap0JH)FJjQ_AvW4dxSm89%J8OkF$^-i(qEG73wfHq7L zI4HW?(%)krND%v-K+Nq=(zm4GWSjyZ#<3j7@tmBqri+7UUD_Z9QWZ%g57)Z>70Le-;!-XU5XSWsan}}v zaUp=PM~h2s;~mMxSP{lW6NGgGg#0H_sVzk!mtw^fmrO9#<1eI0=kf`rGPq1m&-LL9 zTo#wj<#4$ioDYE728lRW#33RM6|q{xVImF}u|~uZ8@U1-+r^bgDmJCs2(jTwLxSw*C>Iifq*Iom?c>_uv(82liHF@;K+$W zyo;MeP!;!Al1%015?D>+p5Uf)Gq{=DliVzBHaCZRO2i2w?j_9qu^yF83aHf_tC)fIBJTd=VFjxKPAJA~uS+Si~hF z?knPcBJRJDJKajXF0`zOmqa|E9rYUAx+GeSr~Ip>{y*1Jb2kXgz7p|38_d2XF#8UT zBOehD5~f-I0LW~{y|~-lFA~IlCJ-9}q=@^CP%k|6VT{Q>w!!29kFCJs5dqe)KTFk; zgy(q|Ko&3O?Rb0Mfp_Gc_)ffnSMtD$4;OK{h$}>F67dKT1O2TMv020;MLcRF?`k7p zyeIF)dsE$c;KZui2w0tnEh26p1g!C20``v(Fg_TN#RJz;(}FBM%u2v`4Y!d8?j=LS zwbEa}R=91*WBCLtw)l90t$H9od?F!VqaTKr&y@hJbmx*%sBP(We1?Rwbb_*`KS^&( zk zutdK2VIn4`W619z5l?HSUNip1*gu1@8iFx^(G(lTMgzup3-c-YhwVB|4^vFQ(COmWASW-32j!qpQ5S2O=4jV;9-elF#{k_TRE)=GY! zh-XV?v&d~%>8@mZbCCQ({zb}t1OF_)h<}b>%sc^fnQF6c`Lq|U&XKH*YIm8*efi8yJJAqo)a-}Y|o4M1raX+uZRI)8V1g( z8`HA~nj12z&6UKqEL^RTyrtU(hK7D-F#iCC{@}tvYkcdyZF0TAwS8RM>3BGjEqPl_ zpftk$DXaC;7EdYPOfc_R4JPW`+Gk)r@kZ<~JX8rdvkZ4jiHRx~b3M6m(qOJ>0;3dl zmWZgZ7`R6E2VXG1TQR1w!g^ap{fDq#n&^zo$h5e0bxc%RoH|;gi&N_&;ZH_JW*K(l_Zg?1*YKYM=Y3z-rN^&_4I+~bf?3g6K-fFOm+n<04)u;`JilB;r>@{A%m%cm4zq%-Jgbef|R;*s*32 zuM+X&Ui=YY6Dx?gGdUY)S7yjNO($m%a@B9N1foO57h_?xvma1EA z0LW?DBVXyh{*QP6|NcV_SJw!y94NZlJGi*Qo&VsF@WiC#lXY}M`Tu)RW^{D z$F1fdAdry30BsMcx0N#$V0oJpya$FEGxLmU9a#7{+IH3U66B<+ znwVaz$?bgUnz`V(IyNpo!FvDOgP30iG9uNI)TcEy*sOp`7n8g*O<>m8Vgd`H#CBH0 zqoR};N*cgKOg>nOvB1s6c2VFayp&5zl-8hA?oL|W%2c>G?@lV2uJ>)u$Rzi|oBJ3f z``2I+0Fv4YC&r%Z+TECh+hDDs#85`tT}rSr$DS%EEHXaoW_-sR-bKZ&_u?T%-+pkb zyyfPyWIMHQ|6&+Bs~hO5)DY77*46^SmV7d5>Z{5cp!Xzy$Z7BpYp>dFLATi!9$Zum z!KK4s0r}&=ttuN{{0MLGl7^>kh#`jxQwy}3D~iunR+&dSjjFDxt%J(;tAaar&`LsB zVQl~!YW)J}GZI_xupU8J6Wn~Qu|m@7snbwtV2eRPgAr`inbDR8r^cq-F~wk;A|31+ z8Pd`qU+a3LkP{=>`ATIKMJcP`!eliDgx0`8aD7qgfc^sps<=yV0p0_w*N0J^%E}w+ zQws`m2#9N;E)tmA|GjgLLgf2tHOZ@e$X{^FDqzAuy#4SQU(rxrLs2M+qPQ>1>n)8G zCGQ6Q0b?8MiMtQDT}KrcrGa}eMezC0dlQbmSEs^A(f zIj&Bk{NMi6R5y`&lOKQhI5dnhX2X9FzN2XsW$DBn5AJQ{Wf{g6_g7=gee=Mrr6}CB zzEM{M?ksQ*ZyHsS3hq#FZyI6AECF{4xGz*S^&#$PilW^oR2BCFw;#B(YKQ0LgS!{F ztI8YF27((*3(?J0CIcBK=rj5qbEBac+)y6U2N&J(KANIjt}=G@4#tO9TY5o3NbRqIK7$VcW?-&jEMgzvKS+Uh(~t`^*j zObyod!gtxZ#;Rg6W|0)dc5Sp2leADbws?d&(*W*FaF469^dbJxUUpx7wH0U3C+s~- zQxR!9w2{j+)s~PxB)AaDEE#%mLtk-wslKR;GQpEJ!{Ki^RSQEe+~iOHF_>oIcGVP1sk!|9c{l%L)THsX)AGDQa&V3yBrX0Etj+?)tUK@isl>5YRx9iEzRY&7@G5%Z#8E%D`+DmV3P1h0OQXh0gIKf+a3!+I6HMU@?J@(rpfb^HGw@7^3NR71i+QTE!9x-IZ z{#uRN=hKlQNTXw&bxr|J5l);_uv3gvsuObR0>6ZGiHt;rn+7=SY6 zQz|f86T@g*+=N;s!7rgz67^Oyy&*IO4BNyLI@Z1gkh|1hgrYsV_U&he37%mJg!5j3 z*1WB)gY#c~*i1?Vk2HZl8_s5dJAuS%1mmi(-cV_E_2VtX%!3L{KvbJlhT8J5P*o(D z%%Uj5Gm$tHb*s?I3nBM+!JgZ!M1o4ngphbW}^jQWqKt% zqP7)G5*+}u$|uo>=u>zw?ML(*rorm2D?E|b1Bc^yoQkt?F+7S^iARH>%W3cw+G2S4 zY!f_ob^ss8XYm#MHNFi-itNE2To*9z6Hlkn`Sd_|q|5^LKxV;1WX)h}VmCZAcACBd zSN?y6hs0dqI=LD~u@6(ilry8@w%;7)1!g_-I`bAh`}HY2@b$aQ5uWl2k@b=p;MuN9 z*;qK6zDTxKwjE9spOsyc-GLLJ?l3-aFm40bk?cfv4m_2$h277dgeS0W!@&hlE`&?w z^5HS7M$imC&u!w~phEj%2x2%d}D$De}dpYF;P^6v6p@R(DD ze7t;~e6@VH{C)W~`CU7uU7%gEU9sIrJJD{j-DbPPc9-mK+1uN9wNJ1wv^U!e_KWRb zu|I16sr|1G&JMv2X%2%OnjGdjtaI4!@S(#kM@PpVj#|foj*X6U9XB{0a=h&Li<65} zn3KV&!s&6RB~Gt9opSoFle|;+PN|)ScAC&>QKwfsz2E5@gKp*rhnH zxUF7nXZ0FxRRh}81qdcGX+~N7L7vmM|Rp>R=>qW1_Uf+1T zdMA39d(ZOT=KYZm_6hbW@|ozf%I965+rECjdf$5A=Y0?Pe&grvr}Z1@x6p5&-wl5k z{}g|-|3d#a{l8MVsZv$ds>Q0eR5!c$bm`NjsmsbPC%WA28rZd@>y)lrx_%sB7Z4vX zB4A;_!GN3H{JZ6Lo7C;4ZXb1*caQI0)&05dN4o#qBd|xm9y5CE=<#J>=RiZ?gus^q zFZFcn*}LcHp3Oba1hGN!L8F3}1$_{VgJXiLf|mrpAA&<-L(Cz|LQaOtLK8x3Lz_d- zs~yy->M`n<)SrgAhvkG#3EL6&U3jgVRjfr0-1tyu2RwrFe?wVYdyfXPp ziYjGT%8HaLy}R@->)qV@Gi`vjLc3ObJvAtGWa_5W?{pfSMYmn|b6T&o$!Yu3>2!Vi ztn?EZ&KV^cFJxTK?3!7b`BLUheT;shet#cXpX@$Q_c?FyHIy4R7;a|8Wlhd{E88L4 znEgWbXF0(+mYm(WI5#WzncPcx-ScYmcH~p}hWuypKQ0I?7+tWZkS#1ITvGT&QAE+C zq9aBZW2teY@lLU>cwX_vlAa|^B?tR<>N~jahQ2@dOYgU!-{9t?v>@2 zHJ9BUZWz9F_|5XP^5@FGuFzI2thixHHZ3q+ACWv_!H6#_lPjO8yiwJ=YEjiU<}~vQ z<{w7(8M%Dq&!h53tsC{Ax?lB{8op*&&8}MK+EKM{)%n$pt2}+&}4d%N|J)53r`gBanm?dL=8QXX4tK*d8YRA1hK6w0-0 zoDaPEg#L+_raMiyOg}#(amMnQ%uMsl6Hi7x`TUc=&#IX9&TP%>MYHeCDWCJsQxQ)s ze(J&85pz$>i=Fr4e0F~A{BuwDetP`^<$?(du0E6d%Dkg}k1dK`wEQ`{ z=bE0ovN&h)&gZ*5KmYlAFI2s7c8PAumZd&RpIrL$vWjJ=Uevz0dAaZM*~@=hVP0`z zrGDk>%{`hItzuV=S@p&0zN?R{iC?o}t=HPwYwxeCU3X=D(fYSG#BJEH(P!hlm+(tX zFWuNQc+&?jr@y>&vwHK&E$&-pze2sz^vYLThiyH#EqmL+SL0vZ{95rc+q8_%gvtzeX`|B?3Fh@P5<=W&y1g4yjp(s>(3iL zzjtlg7mi;ny6%5{!q(>$@b!*_@=`7xV>v3W9)FA1Vm%+o4sgC{MB@yX^XAYcOV z&ma9CGFg~I6~g0e%Df9%nVf3nex1I>~5wdSo1$0Gz~Q@ZiWI;2Y8j;uU(E zo1a^No5n55P3xB7mg`pFR^m3&4Wvip2P5e}HMQk`%Rjd%!WS*Vayct^1S47e`*L0` z=TFM*)$d>q{}Elo2iOTESbG@@RB^Bi7Mb@;G1s-GI?blqboPr&NRUQ-ZaX5S5X3a;QW;H^A50)y-m{XDSI&V{m+ z4)%(PaHFUK_8~Lb=iu?)C9oS=4v+S(V%M;*!IQl^+1>13b|36d4#K(p)0`{pO{(Ce z;#%$icZs{f{RYqC{?1c8<{5YzmxseZ-n=jDQ@X(8xZUAl+#o >&$enT-+rB>qWw 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 D?Gq$n literal 24275 zcmeHPcYIS--#_QB(4BOpO+mUxXxgM{nl!Xc)1;y41j=5ew4nsrrX(p)d4O|WAgCxR zE>v2E3>6m+Kp6rGZnmN*;@%TcLEhiZZ90U9=Xrf!|Fiw1y}4)n&iJ0+zIR$%v(w{M ztB)XzC`2O$v4}$w6gVzGM7x?0C4*Si~LIN{r#g@X2;L&2hN2)8jN~W=#iAi76RA)Z%0_CWK{-f^EXayV zkqr$)Wyp@2&fdhtMXp89j_1K~JEk(KfUf?L)7lBj_kPhTcJ^(EI2NdJKJpK0}|QFVHvWTl6FP z37tj1-~l)QhvIM?jpK0wPQ*z#8K>Y3tipxZg3EC=9*M``33wu|!wuMpn{f-i9^Zf$ z<0be;yc93PH{qM{EqFP;9p8)Z!>jOWya8{-oA4v}QM?5|hM&dH;ca+3-icqtZ{Roa zTlf$@jNiu};M4d+dl}x2jsg#=1P&rfqRY(<4 zHfk7EM%k%})Ff&$HHE69rc(9PG^&AeQZuPGYBtqDT}@p>Eun6q?x60aR#WS#P1Ix5 z2kV)o=8uk zC(~2tI(jNyPfw$r^h|md-AuR8vuQUykNy|EfL=^5p>L#@(znoe(09@+=?CZs>D6>6 zy`FxE-c0YK56}nc*XcLt!}JmQ1pPMs9({`bkUm3yN`FRwMSo3yPyaxlrGH_<7%3xT z!kGvrl8IuX895Wf#4>}JWG0<~7G)v~#40b9rxu{L%XTgOgi>)B~+1KY?t*y(H&JA-wyEv%PqXBV&w z*+nd2dG;`rtyNTV*KFmJGKEv*0cd;+C2iVi>hwK^lBlctV z6ZTW~Gxl@#3-(L)TlOsb2YZo|a09q_E`dwrlDK3pg-hkqxO6UqQ*v3Hjw|GfI2$*N ztK+6}_1rYBfotR(+;pyqo54A`7S7AHb91#4kaqGEc zGk2EzMS>-igqARp07---QW7PJmdGVBl2}QGL@5~}$&{!hS&|%yPLe0lOAL|%Nr}WJ zu}j8CCP*eq>LgPojS`2%DVZs09i80T-rRf`g`iLrhNLJ0MUSnn&6?%t@JxXJ-8^he zazk^y$J2#mD4bA)?n03$iZJA5l36EB)@t=SjaH{s8PpoJD%VnCR+X5wc`B{mnrqRU zE%`a6<~nJl-C8=<<(}nft8Z{vT@CFmj#jUqumU9_d--!AYMa`eD&Wu+t$c&$_$<2jJLtf5;1^(5| zMMIHtJ<_2(q(=snkBlUggb^u`k#G{R9u>ff79kU?u9-x_dfrRc!J6(OIg^26X`>S+ zVs<-V{8IQ{JHs`%x_*wcsUB|ENi&5(`M0&-WULO4v#C{RSPR0_JI3jlEB4USx__sm zy-uj+ba=#C_Et|D$WM{9e%8i6;qjhlZNo7{YwDzVZhr7=#;>AU&YH#*B+hB)<`3-kFTk72%mGvF2c5j_Dr^GSc<#trn z&vUjouXb2mEp7E~r^nS=CQF z4X^jk5cWpc3$Yy5O!(p-tGKf9R>$;u7~^n3L-Bawyp43Uxg8$3sP}@(;+f(fUZW4B zb<(6ZaTb1}K82>Sf2%ral)t!pYkiGj+ah2{-6VYj5l4}J#g%Y+ddA@2@Q7B#or6 zK{vpzFCiJQ!$U~sWb2qw_C{C+=X9sTJxTc1d(5QpRRC*MeN(H`+urCH57QE79FSD( zoQi~>L+CcN0^N@8m>{yoR$w~g#7l=~QgyA>3CG;k3V`T>T6d1CuC4K@gZ?4jh3>m# zh^qjW50ET?om$|lVZPNAu_vtLfTZF{yZR7ci`Gr4uB~eK3QWfAcGq{TL2J=^bSE%y z-&b*r8_-7BnVyQh16zYO2t%urhIeDO(lOmT$~Ds2G{Y+eQE(VNinf4Icnmbg$Kf1Q z*Y;qq($U)FodKBZb8k$2bGt)|iC!f8BzkIMpVBV072VnQhJPWRLC+%P>eVFYDB6y8 z0J-PU3uq_Wg?6Jo=tUsm7ZsJR1|Mjr^lqGR416_O>Yc5dxN*#?GPciAHB97y@Xyy2hc(E z3VM|kkYZ9oN=X?hCzXfM8|Y1##an=o!xMVxj`od+6p|uh0#4rM@_2_io6>yDNF?`FnVMqs1qJqT@TFEJ+i*F$pPpE z)HHYFsk9YP08QYQ*tXKy>JYmd?{&6-7_V<>gO2_5dW+#q{HbGC1F4Y)NGFit(gz5N zxY+$uCmk`}+3YZ8XJ-qH-;)h!0*cvwczUv(HMJT;w$tTN2}_sV`^UG)*_YW7-!kGr z98@Qj1H&5SnCJC(=RYZHa4-%LK=SV@z+OYsKQ|M54#QGWwdr>@dg0h#CUjw$KuA!9 z{;T@Fql6>SqD~x1YI`_0mg6{Ji#P_yVg(sRMw2mX@IX8WUq!}}ab!HnoG6^o3TJC0 z7}NdaWrWC~%RtV#+#Mj18fJk+3iDU56N{y^NI6xYoJJ-P%^|ErVR#4zh8xq+?skJv z=+~3b0hvgyJAt!sHdbQ|)Xu?LoQpodd03API3K-*hvEX@I(~rmTY_qzI+`E=Ku`il zb+kFMJYHe{`!69379i$z^fKr=X`i0_nMAGyp5!3c^x?j^2%CJ|cOq#ZlYPuGS6nqKdTlK(#Wp+)mys!?j!Y%>y)3T} z6Y-z@KJ3DOs}Gy#zJO@QC! ziVovO*f9sNkS2@;(`H(|#{q&U%k5|ec{0aA5SdPDM9|N~vqo3f0)OekGkqPlwNGny zHi$e><#DyU8yww&3%BA9q}+sExDC(7ZtTHc+>Ynqxp*FNl9^-{X(lbCmAFV7nN8fA z@YNvQ;TJE&i!i}FTwO~%AnS$Sxnv$$Ko-K)B0<|x)cPn{fWeAb%<}k@LD)gy_?H%f z;#cKt1@#m7RKjJ8g{~|v@J-b>fo(MSvUTjOb42?F&dsI0H2d`09wb4XOMCIUn!qS( zw9F8=EYwK4lum+@GhRY3vE?pBrvfEtE z0%I4kdnO>q*DBThk)ff@k-%C+Q}T>r&78@>enLi{rCYC4Vp=&f5$uVS`^)d zyYL#)L9Xt?>+pIqpZp7$k}yc0WOjI__z#_^BZ928X1p{JlPo zpAvd~0zXLz;rsMDdOD2%&;8X&RXtiuh0~iQ;=|9vvxYmG>OJkA-gOsoy#qfl8sL|( zwl4gF0Cd4PzoblTy9@6IjsMT(J_g%`_Xv$IU+ACTUVH#4*W!J6KYj_nOl}~H$r5to zT6_?{f==Vt$WpQ#^p4v|&NxB;6cq3AJ{45BnjmVXK9k8urpE^8u`m2&j^MWiGDq<- zd>o%3%g9aSW^&6~IC2y5I+PAaD;G9PDIBl3F<^-aDi!Gbj=6%_xRq^#M@O=L`Kf<4Yaf3f5w|1h5Febsm z1cl7wYIfM1&7h(Pll52r5`QgJ{)(*V#NUwHuV4w`AHWjAKjNRr9ptWFdHM_f{m*6w zK9ADzALLG0i)T{2gQOtl~lZU$r^yqTK^z= z{1jp*ZT&kjQ6)&(MHN$KvYtHDMOi2-*+4e>w$5+T_e=u-)$cU-6lC=n9sflY|NP6T zk>Et5DyT}TimIk+sNvKIvWaXa50gj8qht$t>>;Wa<}+H5L)18GJb4`E^#pvf$#did z(TUdWl^6-W2hqBywNwfGy4@qf6Bue~t8jQ4ySc`^wt6tO8U;PcGs^9NLy`c?4DCUa z^7Exjn+lquwF9hXXMc*+8Ffu5a@=8cR9^Wm&X?{VOLD5PVKOOI6x; z0HUj*hn!eFve!A5qt}3MOs(tjjZux%bQIl5ImnZpR14G~SZ*NOdL$2ZBekrD@=auWZ;R#BZBPIt?VZ#LvZJ@)PUn6WU>` zhPxfp9iTxsT0p!vffnAQE!eH1zlM53-~dljPf=URi)1g^N5IjV*L?&41@7tK8!l;g zHa9xlf^_Tg0s4E)GJ8RFp4RRa)QjBzO+!)j^>)-r)&HAjwcxuuL~Tc5)DG%-L49ll z9ll1!yfw`q5X2PCu$(0GuLc6&mxd1r2n-4i2@R9V!XqN1qUABMinxJ;t{OZzVQ^A% zN^08R4CRo?)wO;6+c1(*PH!_DHW~Pu#RAdeES#7@{#!Qi?bkNIp=|B(X4tLZ*9Sjs ziQs<(|B>C(r;_j$468Aq1KaIZa9Y{HJLeRv=B17j&qp1%{LMlvb}L0 z3|O43XrL1eK>`V(2LuEVCIB>fj!?4VFft&3go6vKV2dQP8Dz}03++!neNbmPtWl)&OWZ1 zJiQ@*XrTbX%LivVjU=G60HPwY!=_?`xx@knEiAup_r>)dJ=$&sxdI#5XPp>lTwfWkTTun)y)i!ayuxgp{`aHveL&M7K z<(Kn=!fy4Y-(|1p^@CPb8)}A+0HfKzqv9C*U>q!r{$+jp@C`>ceN-3qJavdV zLLGzn^hJm~OCjEzOlu+1Y@%%tMZS){0b<5W>2>rjhz}p3kJIncpVMFYR2_(%i~qso z?)O9gPG0iq`_xWq7x0>Hx3b`|SOd3qqdS2q2;cld;6>^+q})jDrS?(#sh6misRPtO z>J{o$a)2BpuaH;CYvgtE26>abwGmXXH>fwMw_wzVVcbWlW1x;5;wg%!Se}aFsZ5?y z@l-ZXsRdaQSpv%0tTvak)$8#E%RridvZ3gXEQn@`&xG{YTy8MdJ(I+kT5ZD&hY1-0&`#ub%y$g`j{LhN667N z)Th*E)aT?Fk0m^g6;?#wEwQYnqEPHFDF18&)(Q@=X|8%VELwLr4Y&$iy=6(7-Csae{;d_lLctcQ1Mr zdckPyW$R!s+Dk0;t#gFva^HgP3DF@mm{M!#P&$m3k`Ksf^5GgfoQ|L)$rjuIbPlkzT=FgXj(ksk z00PcNr>kX5BkWLvV?upfn*&_>tqqQeF1HhACWeN=;8DTdL;Rk{6>B!=g9@~$9jOsXnG7imL7*v04NuE zjCjoQ;7)~@_5=Y2wt6A9KG6be2b#OUY#~k{z}?X}%GFlsnB!>fhPf5soh(K#?bcDQ zo-vB39q#f#&>q6tg7Z->6q*Gu1~6SmFB!m`xC4+!(QRN(p0CNtHDt!CG} zz$ZsH(hhn$-Na+eV~WQ#j~Q6M>Cq07yG-wO;=R7L#qC%o!1pE|hmp!7^l}Ky zfm@!wmA;K$LEk>!jv{uFGe%sXG2-Ast-ah_AW~0v(Q82A?>GBDujU$hExk_gXI{D5<--h@ zCGDTV26|&Z3z~kIhM@OmJd}Qv-a686pCJw&D|kGR$5-(~%T;edc2>p#&tF49V zlcltbif&PQO$RGwY zAV{-$tmd(X$2mOK@;H~rIv(foSkGg_CWaBClgt1nK#Wc@Aw16axrU+PP#zbE0ZJa5 z1S$1Tgt9k|`TrE5WE3E7nK&LByF--BRhJD>b_*3Ig-Pufo@6qZOka4C8A3XET-e2^ z@OmB>2?5H>1tpmrUr^HDosKd1!jOy}qL8@w3a$MuiWob9jWIFBjF~B6ER2;YWo*na zri{lWJht%I%HvWV+ju;T$8gim<8mHXY+}kqu;GPF4Ko}(5h+Y9k1Iv6k-0n`&f{7L zjREjR{R1|T8UO#`aAv9iwt5~{`N7r*U}GH2bm7C}Y97~!e@Ue@NE+qe^A@H}#F$IK z*a(PLGj1}U$0IMnnDk)M&TgyH-*_G~Uxe7z0>nmNp|QUO&)g(H>>B1;<~rtj<_2al zvxK>kS;{Qq@mL;@b|1u6^0>YiVhuc= zE<&v7ABg=u5L+WaY%Pzc`62cYKn%9R_X}$;{`y@D%%jZXBD5Y8pw%d#<4FNpj!U2= z!{te$n*u?Ss?RaOJjd)1v9(>m){HB(_P5x>fCFUSeKm4loCqSD06M zJd?+>c-+k679O|q*u~>E9?#~no5!9_%NkrL?0?Il-%rR#{ zNb>mVOJOECl~kM~0!+*&sHU4Piss zFcwT^=mY!#*YNmS9$&{}@CDq!z!O$;R<`X)hPMrAJUg{>(pG z+20^2*>u1eo5AB{-8f@20cWg=%@RI52KUI#;$Og7ur$`c=Q`G>PIa+*0cXpBAF)P( zo85W|%%o@hZA@&54_d5QfYypDwDGqnW5El!iM6xkYz14%R$JmC$OM`u^>Gk=)=Q0c?`T8o&(|`%k3X* z{T)geJ5#_G2$~1|*lHE9Pb$vp=3puQ4z6J#%LEb*+3N(DJ#?iG{7sgzD+Qe0#NN!_!Y*fTWp86wu(z{! zuz;|QJl@3P%{+dX$B*#%Q66vM@nbxGoX1aWV(;qVV5_=07|iF%UJkakhl4>L%s(9L z@8DpM2q=SXdCHHn$Nwz{^Y8bw>~;}j+XRd~{a2#L+%Xag>0m z1OG*f04@?R#RYOfTrd~Hg>qq>l#_Ac9K;P?;W23TukrYG9>2lkH+lRPj}P(qFprOH z;-dWWkW+}5;;!QH(LVAJRQztA1Vpv}VN`zuqvD1DsJKiXAL|Acmkpr0yicN=QE_=( zz7JHKK>*bWK^q4f4TRyP4heq~6DMj}oKMSo=f7!E#tCW`XXnbf3a*l?;;OkCZa6oB z12yYi9>2%qQ#=M9^Z}1g^Y}v^pW*RGJpOnS*P~`}<3%?F2Wr+QeP9KqO1B^4>wjSN zx9}=X(6TttvOe|0O3<=67uP0yc>EcUKNtUkmNi%!?Z?Sn?rITQ9Rjqz1e|dH@B_kH6>f z4?O;n$3OA-XC8yK`U{WG@%YzG+{zxNbze8rdXUGz^+DGKKhvVnKj`{<(Dkr@F3@{_ z_oM4E0bP$X(}fR@&-)yy!e2mFh=0qUu|6JI#H_o#8&>K1S(06$a^j zkjy9LDH%_N^Hc;+32&9i91l0YTH|ccT|XbU+ZWR z@)u#Dg%^wTZ&K6ddq0Gbo%ZJEAWsciBMFm8C4h*lcxo_D#S3Eiu3WJMp7yPEzza6S zcamgWxwc5d_k>4MaknG60mY|KD1M5i*-_sbZ-b{PJu@7Q-HR_#ND?613MMpAGDs34 z87ztSO)HV7l3->$mCREq>m`Zkv?N)Q0?*Q)=BZR-<*78D%7BO4tioIquRJK>8L|IZ z2@-IjQreY!5-Rz!?*C)WQSf-XuVzy50C61-NwQIxL@m(>dFH~???N`tbDeMA%J5XW zFF#nKmE?-4z>Y47R!EnTj&e2Dcf{9w<8?-@E`E5G^b0tA;zIhK<%ky^#B{ht%;dw9 z*GL905%NE0DJhhgAR9}#*C{FH;b|@LX)%eVr>59)7+SO%p4S%M`ynYuuWiCZC6)9u zkTmm{WVmDm{e+}eGKx5ON&`tUzHAu)nwF<@LJAF~=c#;1W9&^+k&O36;VIae|4R6iyzG&Yy*VCTc@#ul+WxWiU}D{LiuH+wI;ihY1x&2C}8 z<6=20ybSCb?tX47w}*QJUh8!j1nY4Sswd&~USGhgy}p6hdi?;e^g0VK@{+>~y2eYI zC5t3CNgk4Hlx&tfBH1E&T=Jx3tK=EUbCT_n=OsHOyCv^RPDwtHd?@)y@`>a#$rqBZ zB;QEBll&n0Npe;a7fTmx1NSUup$0mlY>91s+c6p$a#7%)4)8!#uJBVc~O zf`Hos?hSY_pfg}iz`B4Z0-g)l9`Jm?&Vc;^F9#e9cs1blfOi8v4>%vl1xf;?fw6(f zfvP}bpee8{aCG3Lz$t-K1E&Q#17`)c1iAue2VNU^UEs}uD+AXBJ{p^b@ z9SUZGLxL5-1B0&$jt@=@P7Y2DP7l@v7YEyd%Yw^;D}$SYox$$l+k#gHZw=lPyf=7% z@XNu+g3knh9QREhHmkNQf#VC&UzD4zYxkhLnfYhKviD z5OQtE@{si*+e6+6`7q??kc**_q3NN@(9F=RP<3cdXl`g>=xw3*hCUU#J@jbkm!Us} z4Gv2Vs|gzyHZg2+SY23im?x|~Y;IUb7zw*3?7FZU!j^>H5%yr%*07ht4ul;FI~sO8 z?Cr1*!!CqflwxV3v`9Kl>XojLu9rR`eN%c!dPI6mdP4e+^j+yG=?BuErN2mjmHsZh zAiXFXAd|@=WKlA?ELIjLOP48SnX)X|P+6hOBs0sZWy577Wus*EvIdz$)+B3|b;#z+ z7RVOKmdGBEt&u$^+b?@v_Kxgb*(uovvd?AT%6ej>sjE&qnT!JQ4X`Bp+ zs$472lN;ni<%M#Syi8srA0e-mkCu;>H_B(pTjVbJZ23I-)$)JI7s`qJcKIs#M)_m% zC*)7bpO!x_-zncMe^I_qepvpl{B!wt@*m_s$f?Lc{XNS%#N5BVs^#siP;;oKjvu6@tC(`PR6_!^M1_fm@_dS z$NUr<5vz=?j_rtD7P~F>t=Lnsr(@5=eiHjx>=&`;6#ZC#w#W&CM#wtS`;pYTj5pAQCzFIL9s-!OmVYfxnh;# zK}Dxxtzx}mgJP@VS;aQR^NO8{-HO*0Zz&Edjwwzk-cfw2_(JiO;#bbhj{iM@N(e}Z zPRK|YlAub+PS7N16Lbmsg#3h|3DpV16GkSCP8gRkF=0wVeL`bGQ-U*rB;22{DPecQ zPl;S&Qlc(#c;e*5#>DA~GZJSe&QA0s&PnV@oS(Qg@!O=qNtsF6Nt&eGq`V|UQfbn# zBzsat((0r~lAcZ4mb4@3g`{0cdy-yDdL!wrq{B%^la437olGTPm7J42E_rtH!sP3d z7boACyexS|@*T-5lkZNxH+f_7!Q}UnKS};J`CRhv$rq9@rUa+RQX*2KQWPlzQ?5#h zPf1P5O&OjtIc0jvjFg!v%_*%Zb5lA}=BF%3S(L)3EKa#4<(`yvDNm)GN)1fSPBo+s zO)X3{rIx3TO`VWBDYY)OKD8lrQRzM6VG^-Su8wB)p+v=M1_X*1Ghr+L%nrd^%3AZ=0F(zH9%R;O)Fdp7O4v~6iS z()OhtN;{f%BJE__sk9H$zE1l#?fbN!(hcdQ>6Pg<=_Auer%y_+OP`kRNN-ACnZ7Um zoAh7Oe@nlRelbIup~x7N5ucHik(x0x!;?WWuFqJKu`J`(jN3Er%(yG#fsAz-+cI9v zIFs>(GEf<>)G14p7Nu2bQ`RbHDw~xqrCZsqoTr?xT&U!g*C`h(mnu7zYn2ZvHz^-c zKBjz9`LyymLu!>>bul;tM5_Yr{17`M7>4*g!&ovHuVnm3+mU@$JEEwZ>v91f2saj{hj(}^*Qx# z>hqc)O^imRQERlCJWal)Kx5LBXi7C@nhMQSO@qdvY0@|~vox)m*&2_gT{BN}wdO9( z)0%fQ=X2t7N^)l8+?2C9=U~p^oMSm}=bX&>DCg^(?{a?3Ih*rq&hI%FaxQ9vwK8pl zHd-5}9i)xdCTcZWt+qgG*H&wXYiqURv=g+GwRPH7?R@R6+S|1&wfAUOX&=;fY1e5t zXg6yg)xN0RuYFm2Q2VO(b?sZ)Biduy6WWv7_q4y|#^x60*5zKCyDs;Y+;4TEI+ZR@ zm#-_(73qfQhU-S^M(M`r#_1;Lnsm*&R^4pf9Nj$KeBA=wO}gc}yLIbyn{*HBw&UUFV)UV7e;ysSJ;9z1!O zm!CH@Z(QEoy!-N=&pWNB^%?pqeY1X<{to?J`g`@O^y~DG>L1rXrGG}hO}|6`f_|6& zHT@y|5&d!fyZZO_AL>8S|ENE!zi7aQP(y?v$`E51WQaE;8Bz?n2D4#|VZ33Iq0TVP z;4sWE%rdkZW*fYQ8x1!ZZZX_ySYf!saF^j;!z#lAhEBs8!!E=7`E-6tzCC|d{%!eN z^N-~Jn14S1qLDH(#t>t)G1fTHIM|qIOg5$((~UZ#(O6(K8LdW}(Qd3TPB2a~I*qNy zHlxQl&v>c++o~l++*BleA)Pl@pa=F<0r?n`1BVVBS~rv*x^C!8L%%MN6{rhp3dR*oESOR-wZK{6E@&^9S1`X| zVF4+)reJx&9R({3?kRYnptE3Y!TN%&1tZOS#}net6TP35Msre>4NU8c3B z^`;G`O{PaokC~n@J!N{v^qlFK>F46u;-STL#eDHY#jg~9VGb~do1@GzW`#M)oN3NB z=a_Y7gV|^vX09|>n@5<(n8%qXnkSo^%^l{2W@5h9yu`fJe6xAE`2q80^Dgs?=Kbaa z=2y*cm=BqcnopQdnopU3G@mt}Gyi5jZ@ySUm9Qm}l7N!nlF*VNCFLcpCAXG5RdTH4 zyd~aZvP`iwS!P;VEH2AD3vap3ve>fJaDJ^oPnMo4Jze@y=_jS1 zm3~qBOX>O2KWx~>*#d0Awouz3Tf9wW%dzF!^tJ+<$yQ>s+G=f6ZSA&sw)wV&Hr{rf zZLw{s?PlApw%ctRY@2P5*tXanw>@Qh#UT812m)NcLYWsM*+kU-$mHl!1e)}o=FXbWSgUhFuH - + @@ -80,26 +80,27 @@ - + - + + - + - + @@ -127,7 +128,6 @@ - diff --git a/gigs/gigs/LoginViewController.swift b/gigs/gigs/LoginViewController.swift deleted file mode 100644 index 2a452ead..00000000 --- a/gigs/gigs/LoginViewController.swift +++ /dev/null @@ -1,77 +0,0 @@ -// -// LoginViewController.swift -// gigs -// -// Created by ronald huston jr on 5/5/20. -// Copyright © 2020 HenryQuante. All rights reserved. -// - -import UIKit - -class LoginViewController: UIViewController { - - var gigController: GigController? - - enum LoginType { - case signIn - case signUp - } - - var selectLoginType: LoginType = .signIn { - didSet { - switch selectLoginType { - case .signIn: - signUpButton.setTitle("log in", for: .normal) - case .signUp: - signUpButton.setTitle("sign up", for: .normal) - } - } - } - - // MARK: - UI connections - @IBOutlet weak var signUpSegment: UISegmentedControl! - @IBOutlet weak var usernameTextField: UITextField! - @IBOutlet weak var passwordTextField: UITextField! - @IBOutlet weak var signUpButton: UIButton! - - - override func viewDidLoad() { - super.viewDidLoad() - - // Do any additional setup after loading the view. - } - - // MARK: - IBAction - @IBAction func segmentedControlAction(_ sender: Any) { - - switch signUpSegment.selectedSegmentIndex { - case 0: - selectLoginType = .signUp - passwordTextField.textContentType = .password - case 1: - selectLoginType = .signIn - passwordTextField.textContentType = .newPassword - default: fatalError() - } - } - - @IBAction func buttonTapped(_ sender: Any) { - // create user from textfield - guard let username = usernameTextField.text, - let password = passwordTextField.text, - - // are the textfields empty ? - !username.isEmpty, - !password.isEmpty else { return } - - let user = User(username: username, password: password) - - // use enum to access function - if selectLoginType == .signUp { - - } - - } - - -} diff --git a/gigs/gigs/GigDetailViewController.swift b/gigs/gigs/VCs/GigDetailViewController.swift similarity index 100% rename from gigs/gigs/GigDetailViewController.swift rename to gigs/gigs/VCs/GigDetailViewController.swift diff --git a/gigs/gigs/GigsTableViewController.swift b/gigs/gigs/VCs/GigsTableViewController.swift similarity index 62% rename from gigs/gigs/GigsTableViewController.swift rename to gigs/gigs/VCs/GigsTableViewController.swift index fb156c98..94dcfb65 100644 --- a/gigs/gigs/GigsTableViewController.swift +++ b/gigs/gigs/VCs/GigsTableViewController.swift @@ -19,13 +19,14 @@ class GigsTableViewController: UITableViewController { } - override func viewDidAppear(_ animated: Bool) { + override func viewWillAppear(_ animated: Bool) { super.viewDidAppear(animated) if gigController.bearer == nil { performSegue(withIdentifier: "Gigs", sender: self) } } + // MARK: - Table view data source @@ -45,35 +46,16 @@ class GigsTableViewController: UITableViewController { return cell } - override func performSegue(withIdentifier identifier: String, sender: Any?) { - - } - - - - /* - // Override to support rearranging the table view. - override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) { - - } - */ - - /* - // Override to support conditional rearranging of the table view. - override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { - // Return false if you do not want the item to be re-orderable. - return true - } - */ - /* // MARK: - Navigation // In a storyboard-based application, you will often want to do a little preparation before navigation override func prepare(for segue: UIStoryboardSegue, sender: Any?) { - // Get the new view controller using segue.destination. - // Pass the selected object to the new view controller. + if segue.identifier == "Gigs" { + if let loginVC = segue.destination as? LoginViewController { + loginVC.gigController = gigController + } + } } - */ } diff --git a/gigs/gigs/VCs/LoginViewController.swift b/gigs/gigs/VCs/LoginViewController.swift new file mode 100644 index 00000000..8e66a6cf --- /dev/null +++ b/gigs/gigs/VCs/LoginViewController.swift @@ -0,0 +1,106 @@ +// +// LoginViewController.swift +// gigs +// +// Created by ronald huston jr on 5/5/20. +// Copyright © 2020 HenryQuante. All rights reserved. +// + +import UIKit + +class LoginViewController: UIViewController { + + var gigController: GigController? + + enum LoginType { + case signIn + case signUp + } + + var selectLoginType: LoginType = .signIn { + didSet { + switch selectLoginType { + case .signIn: + signUpButton.setTitle("log in", for: .normal) + case .signUp: + signUpButton.setTitle("sign up", for: .normal) + } + } + } + + // MARK: - UI connections + @IBOutlet weak var signUpSegment: UISegmentedControl! + @IBOutlet weak var usernameTextField: UITextField! + @IBOutlet weak var passwordTextField: UITextField! + @IBOutlet weak var signUpButton: UIButton! + + + override func viewDidLoad() { + super.viewDidLoad() + + } + + override func viewDidAppear(_ animated: Bool) { + super.viewDidAppear(animated) + + usernameTextField.becomeFirstResponder() + } + + // MARK: - IBAction + @IBAction func segmentedControlAction(_ sender: Any) { + + switch signUpSegment.selectedSegmentIndex { + case 0: + selectLoginType = .signUp + passwordTextField.textContentType = .password + case 1: + selectLoginType = .signIn + passwordTextField.textContentType = .newPassword + default: fatalError() + } + } + + @IBAction func buttonTapped(_ sender: Any) { + // create user from textfield + if let username = usernameTextField.text, + !username.isEmpty, + let password = passwordTextField.text, + !password.isEmpty { + let user = User(username: username, password: password) + + if selectLoginType == .signUp { + gigController?.signUp(with: user, completion: { result in + do { + let success = try result.get() + if success { + DispatchQueue.main.async { + let alertController = UIAlertController(title: "sign up siccessful", message: "please log in", preferredStyle: .alert) + let alertAction = UIAlertAction(title: "OK", style: .default, handler: nil) + alertController.addAction(alertAction) + self.present(alertController, animated: true) { + self.selectLoginType = .signIn + self.signUpSegment.selectedSegmentIndex = 1 + self.signUpButton.setTitle("sign in", for: .normal) + } + } + } + } catch { + print("error signing up: \(error)") + } + }) + } + } + } + @IBAction func signInTypeChanged(_ sender: UISegmentedControl) { + // switch UI between login types + if sender.selectedSegmentIndex == 0 { + // sign up + selectLoginType = .signUp + signUpButton.setTitle("sign up", for: .normal) + } else { + // sign in + selectLoginType = .signIn + signUpButton.setTitle("sign in", for: .normal) + } + } +} diff --git a/gigs/gigs/Model/GigController.swift b/gigs/gigs/model controller/GigController.swift similarity index 93% rename from gigs/gigs/Model/GigController.swift rename to gigs/gigs/model controller/GigController.swift index 2916cc77..af1e203e 100644 --- a/gigs/gigs/Model/GigController.swift +++ b/gigs/gigs/model controller/GigController.swift @@ -7,6 +7,7 @@ // import Foundation +import UIKit final class GigController { @@ -42,8 +43,11 @@ final class GigController { private let httpHeaderType = "Content-Type" // MARK: - sign up - func signUp(for user: User, completion: @escaping (Result) -> Void) { + func signUp(with user: User, completion: @escaping (Result) -> Void) { + print("signUpURL = \(signUpURL.absoluteString)") + var request = URLRequest(url: signUpURL) + request.httpMethod = HTTPMethod.post.rawValue request.setValue("application/json", forHTTPHeaderField: "Content-Type") @@ -53,23 +57,22 @@ final class GigController { URLSession.shared.dataTask(with: request) { _, response, error in if let error = error { - print("sign up failed with error: /(error)") + print("sign up failed with error: \(error)") completion(.failure(.failedSignUp)) return } guard let response = response as? HTTPURLResponse, response.statusCode == 200 else { - print("sign up was not successful.") + print("sign up unsuccessful") completion(.failure(.failedSignUp)) return } completion(.success(true)) - } - .resume() - + }.resume() } catch { - print("error encoding user: \(error)") + print("error encoding user object: \(error)") completion(.failure(.failedSignUp)) + return } } @@ -134,7 +137,7 @@ final class GigController { } guard let response = response as? HTTPURLResponse, - response.statusCode == 200 + response.statusCode == 200 else { print("Gig names received bad response") completion(.failure(.failedFetch)) @@ -172,7 +175,7 @@ final class GigController { } guard let response = response as? HTTPURLResponse, - response.statusCode == 200 + response.statusCode == 200 else { print("gig received non-200 response") completion(.failure(.failedFetch)) @@ -192,7 +195,7 @@ final class GigController { completion(.failure(.failedPost)) } }.resume() - + } private func getRequest(for url: URL, bearer: Bearer) -> URLRequest { From d66d38d617cdfb63849fbb6fb46d00309b8f41e5 Mon Sep 17 00:00:00 2001 From: Ronald Huston Jr Date: Sun, 14 Jun 2020 15:38:45 -0500 Subject: [PATCH 4/6] refactor signup --- .../UserInterfaceState.xcuserstate | Bin 36515 -> 36889 bytes gigs/gigs/VCs/LoginViewController.swift | 57 +++++++++--------- .../gigs/model controller/GigController.swift | 10 +-- 3 files changed, 33 insertions(+), 34 deletions(-) diff --git a/gigs/gigs.xcodeproj/project.xcworkspace/xcuserdata/turing.xcuserdatad/UserInterfaceState.xcuserstate b/gigs/gigs.xcodeproj/project.xcworkspace/xcuserdata/turing.xcuserdatad/UserInterfaceState.xcuserstate index 6c3c05071646b4cd8d4e0626a68225b5bfef8b20..98611bb1c2d6cce095866f0ccd0b30c09fa3f2ac 100644 GIT binary patch delta 13938 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 -> Void) { + func signUp(with user: User, completion: @escaping (NetworkError?) -> Void) { print("signUpURL = \(signUpURL.absoluteString)") var request = URLRequest(url: signUpURL) @@ -58,20 +58,20 @@ final class GigController { URLSession.shared.dataTask(with: request) { _, response, error in if let error = error { print("sign up failed with error: \(error)") - completion(.failure(.failedSignUp)) + completion(.failedSignUp) return } guard let response = response as? HTTPURLResponse, response.statusCode == 200 else { print("sign up unsuccessful") - completion(.failure(.failedSignUp)) + completion(.failedSignUp) return } - completion(.success(true)) + completion(nil) }.resume() } catch { print("error encoding user object: \(error)") - completion(.failure(.failedSignUp)) + completion(.failedSignUp) return } } From 316e9747a9bc6d7c5d4e8b34f1980cd4f4b09ccb Mon Sep 17 00:00:00 2001 From: Ronald Huston Jr Date: Sat, 11 Jul 2020 12:49:49 -0500 Subject: [PATCH 5/6] day 1 model --- gigs/gigs.xcodeproj/project.pbxproj | 2 +- .../UserInterfaceState.xcuserstate | Bin 36889 -> 39483 bytes gigs/gigs/Base.lproj/Main.storyboard | 47 +++++++++--------- gigs/gigs/VCs/GigDetailViewController.swift | 11 ++-- gigs/gigs/VCs/GigsTableViewController.swift | 7 +-- 5 files changed, 34 insertions(+), 33 deletions(-) diff --git a/gigs/gigs.xcodeproj/project.pbxproj b/gigs/gigs.xcodeproj/project.pbxproj index 04e964ad..6a422d27 100644 --- a/gigs/gigs.xcodeproj/project.pbxproj +++ b/gigs/gigs.xcodeproj/project.pbxproj @@ -89,9 +89,9 @@ 0DDFAF7B246219A3009BD222 /* AppDelegate.swift */, 0DDFAF7D246219A3009BD222 /* SceneDelegate.swift */, 0DDFAF81246219A3009BD222 /* Main.storyboard */, + 0DDFAF9724622F69009BD222 /* Model */, 0D977A77247B163800BCFADA /* model controller */, 0D977A76247B161F00BCFADA /* VCs */, - 0DDFAF9724622F69009BD222 /* Model */, 0DDFAF84246219A6009BD222 /* Assets.xcassets */, 0DDFAF86246219A6009BD222 /* LaunchScreen.storyboard */, 0DDFAF89246219A6009BD222 /* Info.plist */, diff --git a/gigs/gigs.xcodeproj/project.xcworkspace/xcuserdata/turing.xcuserdatad/UserInterfaceState.xcuserstate b/gigs/gigs.xcodeproj/project.xcworkspace/xcuserdata/turing.xcuserdatad/UserInterfaceState.xcuserstate index 98611bb1c2d6cce095866f0ccd0b30c09fa3f2ac..b53e2bf4e2e67a8059847d7c93a9d8a9f65afcfa 100644 GIT binary patch delta 18389 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 diff --git a/gigs/gigs/Base.lproj/Main.storyboard b/gigs/gigs/Base.lproj/Main.storyboard index 51c2eb5b..10efcae4 100644 --- a/gigs/gigs/Base.lproj/Main.storyboard +++ b/gigs/gigs/Base.lproj/Main.storyboard @@ -72,23 +72,8 @@ - - - - - - - - - - - - - - - - + @@ -99,7 +84,7 @@ + + + + + + + + + + + + + + + - + + - - + - - + - - + + diff --git a/gigs/gigs/VCs/GigDetailViewController.swift b/gigs/gigs/VCs/GigDetailViewController.swift index b8e76611..f4a947b2 100644 --- a/gigs/gigs/VCs/GigDetailViewController.swift +++ b/gigs/gigs/VCs/GigDetailViewController.swift @@ -10,6 +10,9 @@ import UIKit class GigDetailViewController: UIViewController { + var gig: Gig? + var gigController: GigController? + @IBOutlet weak var gigNameTextField: UITextField! @IBOutlet weak var dueDate: UIDatePicker! @IBOutlet weak var descriptionTextView: UITextView! @@ -18,7 +21,6 @@ class GigDetailViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() - // Do any additional setup after loading the view. } @IBAction func save(_ sender: Any) { @@ -29,8 +31,11 @@ class GigDetailViewController: UIViewController { return } - // let gig = + let gig = Gig(title: gigName, description: description, dueDate: dueDate.date) + + // may want to implement .postGig method to save functionality + // it doesn't look like save method will work considering the way + // postGig() method is built... } - } diff --git a/gigs/gigs/VCs/GigsTableViewController.swift b/gigs/gigs/VCs/GigsTableViewController.swift index 94dcfb65..baaf66e9 100644 --- a/gigs/gigs/VCs/GigsTableViewController.swift +++ b/gigs/gigs/VCs/GigsTableViewController.swift @@ -19,7 +19,7 @@ class GigsTableViewController: UITableViewController { } - override func viewWillAppear(_ animated: Bool) { + override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) if gigController.bearer == nil { @@ -30,10 +30,7 @@ class GigsTableViewController: UITableViewController { // MARK: - Table view data source - override func numberOfSections(in tableView: UITableView) -> Int { - - return 0 - } + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { From dc995a29300683639ee67ebe3baf518a1d13588c Mon Sep 17 00:00:00 2001 From: Ronald Huston Jr Date: Tue, 14 Jul 2020 21:12:36 -0500 Subject: [PATCH 6/6] gigs --- .../UserInterfaceState.xcuserstate | Bin 39483 -> 39262 bytes gigs/gigs/Base.lproj/Main.storyboard | 22 +++++++----------- gigs/gigs/VCs/GigDetailViewController.swift | 2 +- 3 files changed, 10 insertions(+), 14 deletions(-) diff --git a/gigs/gigs.xcodeproj/project.xcworkspace/xcuserdata/turing.xcuserdatad/UserInterfaceState.xcuserstate b/gigs/gigs.xcodeproj/project.xcworkspace/xcuserdata/turing.xcuserdatad/UserInterfaceState.xcuserstate index b53e2bf4e2e67a8059847d7c93a9d8a9f65afcfa..5c25ce73a23eff970e0fe5f44dfadf228e5729d5 100644 GIT binary patch delta 9600 zcmaJ_33w9M+GZvTGXVk#2?&HO5VtHW30aYZ5E4QlNFaoOgoKa~h-*yTQp=2J-B+ru z)vG3IYpr|KTCcXY)>!wtw{>4?TkBfuUiBXm(|iBtzxQXJ^D%Sgyx)1>?|kRXnfd2- z@bWfrK^+jk&^2B5JMKB|1@0y8FWf8KYak2=2Oxk5&;UBX0fayj&>t8KqyZv83}gV= zKn@@Wh5*VS2M|Pz2F3#8x{3h?KpGlm3A2Yagf)hF!p3wB2fqOAckqAWA44Q48X`j! zCNviHJ9>fI6X1p{>w1s0-Q-?SS?|Uqa`g^Ux2_kI+xh1?VDl z3Azkjfv!R~q2HlL(4Wv_=oR!DronW$AIyN6FbhtA*)Rv@!aP_Qycsb9{vQ4bz5ri@ zF9mIp(ysR-zm8;F!d=E)!41S+!zCewhzhYFG{lJ{A(G%75-T{5R2v*k;^a`k(>M|? z8b`+6!To_7ycTyCcMo?T_W<`0DMHjpF;aqP*5V#veg@*6;GQC-m=_wNLu!JG=>4^C z0I(A`2LO;1M2nPFd%T{pyrd+a

f-ZVeCtL=G!A>DyZCT*Dho4XvxO8a!@YWw{Bv zI2Gy?fB`}W5QXRw$60^`glfnD1&9G+0V)s�TrhX1oCzhLj`r;2v_Wt{=c&gAE%K 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%0DXqtbApOw7?dkg=~qn z#98>3{+5B3WQ*96ZppM{TT1*Ev!&W%x71kbEsYkhrP(scGTpM=veMFNS!-Em`OLD( zvemNP^0{TV<%H#w<&5Q=!! zvldxPtXiwiT4}AZ)>++FkJV=#ZXIcDw<6Xl)@jyR*16UN)a6PAYI(Jyx}dtST3xNF zF00m853R1K9#uWBdRz6G>Ss2lt-$8C1#F$R&up7)TWwvoJ+=e3?`%hG$89HVr)_6# z=WRD_zuA7b-SgWX*&f@T*2C3<+>8|uGUanQCnH-s~u50s&-86*xI(*3AOFDlWYC8Q);KycGT{xy;&DoH@Hq$ z*HX8nZb#jjx=VFe>u%KjTz9YTX`TOh-OIXHb#GjNE80bM#k=~s*e0K2rv#ZKg?P_whxn{ZMx)!*Ct|hLeuH~+ku1?ol*E-i;*FM)bu5Vr4u0yV) zt`n}4uG6k_t{+^F>*MOP>uvS#)~~AXuD|Vu-2>eccZNI5o#QTam-*f0Zll}mu5wqq z8{N(B5$@6MHunT~yL+;Gj(eVanR}JH)4kTc-o4Si#l6k_wfngHhWnQLH}@U)efJ;k z$L?qDm+sdMKm)CT(ZFh8H*g#H4Z?;24TBnz8`2uY4f=-R4GS8!HJodB*2rlrY^-ZU z8fP}nX`J7pbf{8$3HbUweM?+-(YPVl<^S6*oEkO>Irno4#v0(R8lqTGPFz z$4$?gUN*h_-YwoP?@sR*-hJNv z-fr(9?-B2xzC>TSugX{BtM`rejrUFRP4*$a>AqRMxxNLyMZRUefB07Ww)j5x?e^{U z?eiV<9rk4%^L_6-t>)iycypNH&dD!=mGRQ^elQE{Tclg z{T;oBK1BbV0tBZoO=^EUYds=b!6|i TR}k#|k5az<7W?*Z>Yo1r5jl#P delta 9579 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 H(xm?ZHS>>Y diff --git a/gigs/gigs/Base.lproj/Main.storyboard b/gigs/gigs/Base.lproj/Main.storyboard index 10efcae4..da8de794 100644 --- a/gigs/gigs/Base.lproj/Main.storyboard +++ b/gigs/gigs/Base.lproj/Main.storyboard @@ -73,7 +73,7 @@ - + @@ -84,7 +84,7 @@ - - + + - + - + @@ -113,16 +113,12 @@ - - - + + - - - @@ -272,6 +268,6 @@ - + diff --git a/gigs/gigs/VCs/GigDetailViewController.swift b/gigs/gigs/VCs/GigDetailViewController.swift index f4a947b2..127a9c86 100644 --- a/gigs/gigs/VCs/GigDetailViewController.swift +++ b/gigs/gigs/VCs/GigDetailViewController.swift @@ -11,7 +11,7 @@ import UIKit class GigDetailViewController: UIViewController { var gig: Gig? - var gigController: GigController? + var gigController: GigController! @IBOutlet weak var gigNameTextField: UITextField! @IBOutlet weak var dueDate: UIDatePicker!