Skip to content

Commit

Permalink
Merge pull request #12 from 29th-WE-SOPT-iOS-Part/feature/#9-assignme…
Browse files Browse the repository at this point in the history
…nt-4

Feature/#9 assignment 4
  • Loading branch information
yangsubinn authored Nov 29, 2021
2 parents 83e6b81 + 0c5385f commit 2c4a0b2
Show file tree
Hide file tree
Showing 18 changed files with 413 additions and 42 deletions.
60 changes: 48 additions & 12 deletions 29th-iOS-Assignment/29th-iOS-Assignment.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,13 @@
objects = {

/* Begin PBXBuildFile section */
2B0F6A93273E439E00F1B3DE /* UserDefaults+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B0F6A92273E439E00F1B3DE /* UserDefaults+Extension.swift */; };
2B4816BD2732E6AA003CCE3B /* APIConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B4816BC2732E6AA003CCE3B /* APIConstants.swift */; };
2B4816C02732E83E003CCE3B /* NetworkResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B4816BF2732E83E003CCE3B /* NetworkResult.swift */; };
2B4816C22732E8CD003CCE3B /* LoginDataModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B4816C12732E8CD003CCE3B /* LoginDataModel.swift */; };
2B4816C42732E97C003CCE3B /* LoginService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B4816C32732E97C003CCE3B /* LoginService.swift */; };
2B6D2520273AE3820079B36D /* SignupService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B6D251F273AE3820079B36D /* SignupService.swift */; };
2B6D2522273AE4580079B36D /* SignupDataModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B6D2521273AE4580079B36D /* SignupDataModel.swift */; };
2BBF45B9271688AD00686134 /* YoutubeMain.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2BBF45B8271688AD00686134 /* YoutubeMain.storyboard */; };
2BBF45BB2716890300686134 /* CustomTBC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2BBF45BA2716890300686134 /* CustomTBC.swift */; };
2BBF45BD2716891E00686134 /* HomeVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2BBF45BC2716891E00686134 /* HomeVC.swift */; };
Expand All @@ -25,14 +32,21 @@
2BF508D2270B0A50004EF83D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2BF508D0270B0A50004EF83D /* Main.storyboard */; };
2BF508D4270B0A51004EF83D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2BF508D3270B0A51004EF83D /* Assets.xcassets */; };
2BF508D7270B0A51004EF83D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2BF508D5270B0A51004EF83D /* LaunchScreen.storyboard */; };
2BF508E4270B0BCB004EF83D /* LoginViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2BF508E3270B0BCB004EF83D /* LoginViewController.swift */; };
2BF508E6270B0EE6004EF83D /* SignupViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2BF508E5270B0EE6004EF83D /* SignupViewController.swift */; };
2BF508E8270B0F18004EF83D /* SuccessViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2BF508E7270B0F18004EF83D /* SuccessViewController.swift */; };
2BF508E4270B0BCB004EF83D /* LoginVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2BF508E3270B0BCB004EF83D /* LoginVC.swift */; };
2BF508E6270B0EE6004EF83D /* SignupVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2BF508E5270B0EE6004EF83D /* SignupVC.swift */; };
2BF508E8270B0F18004EF83D /* SuccessVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2BF508E7270B0F18004EF83D /* SuccessVC.swift */; };
AD636A2841FC32900DCE8B24 /* Pods_29th_iOS_Assignment.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2B76D5275535EEC539B4BEEF /* Pods_29th_iOS_Assignment.framework */; };
/* End PBXBuildFile section */

/* Begin PBXFileReference section */
1E0BF1C4A0D185311E8AC6CE /* Pods-29th-iOS-Assignment.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-29th-iOS-Assignment.release.xcconfig"; path = "Target Support Files/Pods-29th-iOS-Assignment/Pods-29th-iOS-Assignment.release.xcconfig"; sourceTree = "<group>"; };
2B0F6A92273E439E00F1B3DE /* UserDefaults+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UserDefaults+Extension.swift"; sourceTree = "<group>"; };
2B4816BC2732E6AA003CCE3B /* APIConstants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = APIConstants.swift; sourceTree = "<group>"; };
2B4816BF2732E83E003CCE3B /* NetworkResult.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkResult.swift; sourceTree = "<group>"; };
2B4816C12732E8CD003CCE3B /* LoginDataModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginDataModel.swift; sourceTree = "<group>"; };
2B4816C32732E97C003CCE3B /* LoginService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginService.swift; sourceTree = "<group>"; };
2B6D251F273AE3820079B36D /* SignupService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignupService.swift; sourceTree = "<group>"; };
2B6D2521273AE4580079B36D /* SignupDataModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignupDataModel.swift; sourceTree = "<group>"; };
2B76D5275535EEC539B4BEEF /* Pods_29th_iOS_Assignment.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_29th_iOS_Assignment.framework; sourceTree = BUILT_PRODUCTS_DIR; };
2BBF45B8271688AD00686134 /* YoutubeMain.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = YoutubeMain.storyboard; sourceTree = "<group>"; };
2BBF45BA2716890300686134 /* CustomTBC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomTBC.swift; sourceTree = "<group>"; };
Expand All @@ -54,9 +68,9 @@
2BF508D3270B0A51004EF83D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
2BF508D6270B0A51004EF83D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
2BF508D8270B0A51004EF83D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
2BF508E3270B0BCB004EF83D /* LoginViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginViewController.swift; sourceTree = "<group>"; };
2BF508E5270B0EE6004EF83D /* SignupViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignupViewController.swift; sourceTree = "<group>"; };
2BF508E7270B0F18004EF83D /* SuccessViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuccessViewController.swift; sourceTree = "<group>"; };
2BF508E3270B0BCB004EF83D /* LoginVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginVC.swift; sourceTree = "<group>"; };
2BF508E5270B0EE6004EF83D /* SignupVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignupVC.swift; sourceTree = "<group>"; };
2BF508E7270B0F18004EF83D /* SuccessVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuccessVC.swift; sourceTree = "<group>"; };
4D0A1778A9851177E1AC83B6 /* Pods-29th-iOS-Assignment.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-29th-iOS-Assignment.debug.xcconfig"; path = "Target Support Files/Pods-29th-iOS-Assignment/Pods-29th-iOS-Assignment.debug.xcconfig"; sourceTree = "<group>"; };
/* End PBXFileReference section */

Expand Down Expand Up @@ -107,17 +121,31 @@
2B4816BA2732E258003CCE3B /* Models */ = {
isa = PBXGroup;
children = (
2B4816C12732E8CD003CCE3B /* LoginDataModel.swift */,
2B6D2521273AE4580079B36D /* SignupDataModel.swift */,
);
path = Models;
sourceTree = "<group>";
};
2B4816BB2732E271003CCE3B /* APIServices */ = {
isa = PBXGroup;
children = (
2B4816BE2732E6C5003CCE3B /* Services */,
2B4816BC2732E6AA003CCE3B /* APIConstants.swift */,
2B4816BF2732E83E003CCE3B /* NetworkResult.swift */,
);
path = APIServices;
sourceTree = "<group>";
};
2B4816BE2732E6C5003CCE3B /* Services */ = {
isa = PBXGroup;
children = (
2B4816C32732E97C003CCE3B /* LoginService.swift */,
2B6D251F273AE3820079B36D /* SignupService.swift */,
);
path = Services;
sourceTree = "<group>";
};
2BC3B1AF2729C97500240249 /* Cells */ = {
isa = PBXGroup;
children = (
Expand All @@ -141,6 +169,7 @@
children = (
2BE4D6E52715F0DD00436945 /* UIVIewController+Extension.swift */,
2BC3B1AD2729C24300240249 /* UIView+Extension.swift */,
2B0F6A92273E439E00F1B3DE /* UserDefaults+Extension.swift */,
);
path = Extensions;
sourceTree = "<group>";
Expand Down Expand Up @@ -185,9 +214,9 @@
2BF508E1270B0AE4004EF83D /* ViewControllers */ = {
isa = PBXGroup;
children = (
2BF508E3270B0BCB004EF83D /* LoginViewController.swift */,
2BF508E5270B0EE6004EF83D /* SignupViewController.swift */,
2BF508E7270B0F18004EF83D /* SuccessViewController.swift */,
2BF508E3270B0BCB004EF83D /* LoginVC.swift */,
2BF508E5270B0EE6004EF83D /* SignupVC.swift */,
2BF508E7270B0F18004EF83D /* SuccessVC.swift */,
2BBF45BA2716890300686134 /* CustomTBC.swift */,
2BBF45BC2716891E00686134 /* HomeVC.swift */,
2BBF45BE2716892B00686134 /* ShortsVC.swift */,
Expand Down Expand Up @@ -341,17 +370,24 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
2BF508E4270B0BCB004EF83D /* LoginViewController.swift in Sources */,
2BF508E4270B0BCB004EF83D /* LoginVC.swift in Sources */,
2BC3B1AE2729C24300240249 /* UIView+Extension.swift in Sources */,
2B6D2520273AE3820079B36D /* SignupService.swift in Sources */,
2B4816BD2732E6AA003CCE3B /* APIConstants.swift in Sources */,
2B4816C02732E83E003CCE3B /* NetworkResult.swift in Sources */,
2BBF45BD2716891E00686134 /* HomeVC.swift in Sources */,
2BBF45C5271689B100686134 /* LockerVC.swift in Sources */,
2BBF45BB2716890300686134 /* CustomTBC.swift in Sources */,
2B4816C42732E97C003CCE3B /* LoginService.swift in Sources */,
2BF508CB270B0A50004EF83D /* AppDelegate.swift in Sources */,
2BBF45C12716893B00686134 /* AddVC.swift in Sources */,
2BE4D6E62715F0DD00436945 /* UIVIewController+Extension.swift in Sources */,
2B4816C22732E8CD003CCE3B /* LoginDataModel.swift in Sources */,
2BC3B1B52729D0C700240249 /* HomeContentTVC.swift in Sources */,
2BF508E6270B0EE6004EF83D /* SignupViewController.swift in Sources */,
2BF508E8270B0F18004EF83D /* SuccessViewController.swift in Sources */,
2BF508E6270B0EE6004EF83D /* SignupVC.swift in Sources */,
2B0F6A93273E439E00F1B3DE /* UserDefaults+Extension.swift in Sources */,
2B6D2522273AE4580079B36D /* SignupDataModel.swift in Sources */,
2BF508E8270B0F18004EF83D /* SuccessVC.swift in Sources */,
2BBF45BF2716892B00686134 /* ShortsVC.swift in Sources */,
2BDB1136272AE48900C61B62 /* HomeCategoryCVC.swift in Sources */,
2BF508CD270B0A50004EF83D /* SceneDelegate.swift in Sources */,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
//
// APIConstants.swift
// 29th-iOS-Assignment
//
// Created by 양수빈 on 2021/11/04.
//

import Foundation

struct APIConstants {
// MARK: - Base URL
static let baseURL = "https://asia-northeast3-we-sopt-29.cloudfunctions.net/api"

// MARK: - Feature URL
static let loginURL = baseURL + "/user/login"
static let signUpURL = baseURL + "/user/signup"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
//
// NetworkResult.swift
// 29th-iOS-Assignment
//
// Created by 양수빈 on 2021/11/04.
//

import Foundation

enum NetworkResult<T> {
case success(T)
case requestErr(T)
case pathErr
case serverErr
case networkFail
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
//
// LoginService.swift
// 29th-iOS-Assignment
//
// Created by 양수빈 on 2021/11/04.
//

import Foundation

import Alamofire

struct LoginService {
static let shared = LoginService()

func login(email: String,
password: String,
completion: @escaping (NetworkResult<Any>) -> (Void)) {

let url = APIConstants.loginURL

let header : HTTPHeaders = [
"Content-Type" : "application/json"
]

let body : Parameters = [
"email" : email,
"password" : password
]

let dataRequest = AF.request(url,
method: .post,
parameters: body,
encoding: JSONEncoding.default,
headers: header)

dataRequest.responseData { dataResponse in
switch dataResponse.result {
case .success:
guard let statusCode = dataResponse.response?.statusCode else {return}
guard let value = dataResponse.value else {return}

let networkResult = self.judgeLoginStatus(by: statusCode, value)
completion(networkResult)
case .failure(let err):
print(err)
completion(.networkFail)
}
}
}

private func judgeLoginStatus (by statuscode: Int, _ data: Data) -> NetworkResult<Any> {
switch statuscode {
case 200: return isValidLoginData(data: data)
case 400:
return isInvalidLoginData(data: data)
case 500: return .serverErr
default: return .networkFail
}
}

private func isValidLoginData(data: Data) -> NetworkResult<Any> {
let decoder = JSONDecoder()
guard let decodedData = try? decoder.decode(LoginDataModel.self, from: data) else {return .networkFail}
return .success(decodedData)
}

private func isInvalidLoginData(data: Data) -> NetworkResult<Any> {
let decoder = JSONDecoder()
guard let decodedData = try? decoder.decode(LoginDataModel.self, from: data) else {return .pathErr}
return .requestErr(decodedData)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
//
// SignupService.swift
// 29th-iOS-Assignment
//
// Created by 양수빈 on 2021/11/10.
//

import Foundation

import Alamofire

struct SignupService {
static let shared = SignupService()

func signup(email: String,
name: String,
password: String,
completion: @escaping (NetworkResult<Any>) -> (Void)) {

let url = APIConstants.signUpURL

let header : HTTPHeaders = [
"Content-Type" : "application/json"
]

let body : Parameters = [
"email" : email,
"name" : name,
"password" : password
]

let dataRequest = AF.request(url,
method: .post,
parameters: body,
encoding: JSONEncoding.default,
headers: header)

dataRequest.responseData { dataResponse in
switch dataResponse.result {
case .success:
guard let statusCode = dataResponse.response?.statusCode else {return}
guard let value = dataResponse.value else {return}

let networkResult = self.judgeSignupStatus(by: statusCode, value)
completion(networkResult)
case .failure(let err):
print(err)
completion(.networkFail)
}
}
}

private func judgeSignupStatus (by statuscode: Int, _ data: Data) -> NetworkResult<Any> {
switch statuscode {
case 200: return isValidSignupData(data: data)
case 400:
return isInvalidSignupData(data: data)
case 500: return .serverErr
default: return .networkFail
}
}

private func isValidSignupData(data: Data) -> NetworkResult<Any> {
let decoder = JSONDecoder()
guard let decodedData = try? decoder.decode(SignupDataModel.self, from: data) else {return .networkFail}
return .success(decodedData)
}

private func isInvalidSignupData(data: Data) -> NetworkResult<Any> {
let decoder = JSONDecoder()
guard let decodedData = try? decoder.decode(SignupDataModel.self, from: data) else {return .pathErr}
return .requestErr(decodedData)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
<key>UISceneDelegateClassName</key>
<string>$(PRODUCT_MODULE_NAME).SceneDelegate</string>
<key>UISceneStoryboardFile</key>
<string>Main</string>
<string>YoutubeMain</string>
</dict>
</array>
</dict>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
<!--LoginViewController-->
<scene sceneID="tne-QT-ifu">
<objects>
<viewController storyboardIdentifier="LoginViewController" title="LoginViewController" id="BYZ-38-t0r" customClass="LoginViewController" customModule="_9th_iOS_Assignment" customModuleProvider="target" sceneMemberID="viewController">
<viewController storyboardIdentifier="LoginVC" title="LoginViewController" id="BYZ-38-t0r" customClass="LoginVC" customModule="_9th_iOS_Assignment" customModuleProvider="target" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
Expand Down Expand Up @@ -99,7 +99,7 @@
<!--SignupViewController-->
<scene sceneID="gbG-Ro-IaQ">
<objects>
<viewController storyboardIdentifier="SignupViewController" title="SignupViewController" id="alP-Hy-CwU" customClass="SignupViewController" customModule="_9th_iOS_Assignment" customModuleProvider="target" sceneMemberID="viewController">
<viewController storyboardIdentifier="SignupVC" title="SignupViewController" id="alP-Hy-CwU" customClass="SignupVC" customModule="_9th_iOS_Assignment" customModuleProvider="target" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="dlc-9B-jvM">
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
Expand Down Expand Up @@ -178,10 +178,10 @@
</objects>
<point key="canvasLocation" x="1871.0144927536232" y="118.52678571428571"/>
</scene>
<!--Success View Controller-->
<!--SuccessVC-->
<scene sceneID="Loj-tL-NdS">
<objects>
<viewController storyboardIdentifier="SuccessViewController" id="gkV-Sw-GPO" customClass="SuccessViewController" customModule="_9th_iOS_Assignment" customModuleProvider="target" sceneMemberID="viewController">
<viewController storyboardIdentifier="SuccessVC" id="gkV-Sw-GPO" customClass="SuccessVC" customModule="_9th_iOS_Assignment" customModuleProvider="target" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="qPy-Gm-M0k">
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
Expand Down Expand Up @@ -238,7 +238,7 @@
<!--Navigation Controller-->
<scene sceneID="uSn-2r-LhZ">
<objects>
<navigationController automaticallyAdjustsScrollViewInsets="NO" navigationBarHidden="YES" id="93r-4K-lOa" sceneMemberID="viewController">
<navigationController storyboardIdentifier="MainNavi" automaticallyAdjustsScrollViewInsets="NO" navigationBarHidden="YES" id="93r-4K-lOa" sceneMemberID="viewController">
<toolbarItems/>
<navigationBar key="navigationBar" contentMode="scaleToFill" id="YPh-Im-x7i">
<autoresizingMask key="autoresizingMask"/>
Expand Down
Loading

0 comments on commit 2c4a0b2

Please sign in to comment.