Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[FEAT] #63 - 회원 관련 추가 서버 구축 #64

Merged
merged 2 commits into from
Nov 16, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 8 additions & 4 deletions NADA-iOS-forRelease.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@
3958F23C270FFBD500B100B2 /* Group.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 3958F23B270FFBD500B100B2 /* Group.storyboard */; };
3979709626FA0BE5003FB4F5 /* LoginViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3979709526FA0BE5003FB4F5 /* LoginViewController.swift */; };
3979709826FA0BF0003FB4F5 /* Login.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 3979709726FA0BF0003FB4F5 /* Login.storyboard */; };
3981148C273BEB8400E28630 /* User.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3981148B273BEB8400E28630 /* User.swift */; };
3981148E273BEBB300E28630 /* CardListEditRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3981148D273BEBB300E28630 /* CardListEditRequest.swift */; };
39811490273BEBCE00E28630 /* CardListRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3981148F273BEBCE00E28630 /* CardListRequest.swift */; };
399C55D72711921100845A54 /* CustomTabBarButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 399C55D62711921100845A54 /* CustomTabBarButton.swift */; };
Expand All @@ -34,6 +33,8 @@
399C55DF2711949D00845A54 /* CGPoint+Distance.swift in Sources */ = {isa = PBXBuildFile; fileRef = 399C55DE2711949D00845A54 /* CGPoint+Distance.swift */; };
399C55E12711C21800845A54 /* CustomTabBar.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 399C55E02711C21800845A54 /* CustomTabBar.storyboard */; };
39C1E88F270EC762006D2089 /* UIColor+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 39C1E88E270EC762006D2089 /* UIColor+Extension.swift */; };
39D13565273FDB9C00B1A148 /* Users.swift in Sources */ = {isa = PBXBuildFile; fileRef = 39D13564273FDB9C00B1A148 /* Users.swift */; };
39D13568273FDCB800B1A148 /* UserWithTokenRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 39D13567273FDCB800B1A148 /* UserWithTokenRequest.swift */; };
39D2E130270B43DA00AD0889 /* UIFont+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 39D2E12F270B43DA00AD0889 /* UIFont+Extension.swift */; };
39F5A3D0271461EA00191F94 /* BackCardCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 39F5A3CE271461EA00191F94 /* BackCardCell.swift */; };
39F5A3D1271461EA00191F94 /* BackCardCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 39F5A3CF271461EA00191F94 /* BackCardCell.xib */; };
Expand Down Expand Up @@ -99,7 +100,6 @@
3958F23B270FFBD500B100B2 /* Group.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Group.storyboard; sourceTree = "<group>"; };
3979709526FA0BE5003FB4F5 /* LoginViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginViewController.swift; sourceTree = "<group>"; };
3979709726FA0BF0003FB4F5 /* Login.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Login.storyboard; sourceTree = "<group>"; };
3981148B273BEB8400E28630 /* User.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = User.swift; sourceTree = "<group>"; };
3981148D273BEBB300E28630 /* CardListEditRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CardListEditRequest.swift; sourceTree = "<group>"; };
3981148F273BEBCE00E28630 /* CardListRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CardListRequest.swift; sourceTree = "<group>"; };
399C55D62711921100845A54 /* CustomTabBarButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomTabBarButton.swift; sourceTree = "<group>"; };
Expand All @@ -109,6 +109,8 @@
399C55DE2711949D00845A54 /* CGPoint+Distance.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CGPoint+Distance.swift"; sourceTree = "<group>"; };
399C55E02711C21800845A54 /* CustomTabBar.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = CustomTabBar.storyboard; sourceTree = "<group>"; };
39C1E88E270EC762006D2089 /* UIColor+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIColor+Extension.swift"; sourceTree = "<group>"; };
39D13564273FDB9C00B1A148 /* Users.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Users.swift; sourceTree = "<group>"; };
39D13567273FDCB800B1A148 /* UserWithTokenRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserWithTokenRequest.swift; sourceTree = "<group>"; };
39D2E12F270B43DA00AD0889 /* UIFont+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIFont+Extension.swift"; sourceTree = "<group>"; };
39F5A3CE271461EA00191F94 /* BackCardCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BackCardCell.swift; sourceTree = "<group>"; };
39F5A3CF271461EA00191F94 /* BackCardCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = BackCardCell.xib; sourceTree = "<group>"; };
Expand Down Expand Up @@ -247,7 +249,8 @@
3981148A273BEB7200E28630 /* User */ = {
isa = PBXGroup;
children = (
3981148B273BEB8400E28630 /* User.swift */,
39D13564273FDB9C00B1A148 /* Users.swift */,
39D13567273FDCB800B1A148 /* UserWithTokenRequest.swift */,
);
path = User;
sourceTree = "<group>";
Expand Down Expand Up @@ -769,6 +772,7 @@
F8FC43BA26C022900033E151 /* ViewController.swift in Sources */,
39523E5F2701AA9000536900 /* CardListDataModel.swift in Sources */,
399C55D92711924500845A54 /* CustomTabBar.swift in Sources */,
39D13568273FDCB800B1A148 /* UserWithTokenRequest.swift in Sources */,
F8FC43AD26C020940033E151 /* TempClass.swift in Sources */,
F84BAFB126FDB552004CA335 /* BackCardCreationCollectionViewCell.swift in Sources */,
39811490273BEBCE00E28630 /* CardListRequest.swift in Sources */,
Expand All @@ -777,8 +781,8 @@
F8C83FC1272FA06E0009DF0D /* UserAPI.swift in Sources */,
F8C83FC3272FA17B0009DF0D /* URL.swift in Sources */,
F8C83FAE272F99940009DF0D /* MoyaLoggerPlugin.swift in Sources */,
3981148C273BEB8400E28630 /* User.swift in Sources */,
F84BAFAD26FDB543004CA335 /* FrontCardCreationCollectionViewCell.swift in Sources */,
39D13565273FDB9C00B1A148 /* Users.swift in Sources */,
F822E7A92709CEB60020452C /* Notification.swift in Sources */,
F8C83FC5272FA2940009DF0D /* CardAPI.swift in Sources */,
F8FC438626C01CDD0033E151 /* AppDelegate.swift in Sources */,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
//
// UserWithTokenRequest.swift
// NADA-iOS-forRelease
//
// Created by 민 on 2021/11/13.
//

import Foundation

// MARK: - UserWithTokenRequest
struct UserWithTokenRequest: Codable {
let user: UserData
}

// MARK: - User
struct UserData: Codable {
let userID: String
let token: Token

enum CodingKeys: String, CodingKey {
case userID = "userId"
case token
}
}

// MARK: - Token
struct Token: Codable {
let grantType, accessToken, refreshToken: String
let accessTokenExpiresIn: Int
}
Original file line number Diff line number Diff line change
@@ -1,16 +1,21 @@
//
// User.swift
// Users.swift
// NADA-iOS-forRelease
//
// Created by 민 on 2021/11/07.
// Created by 민 on 2021/11/13.
//

import Foundation

// MARK: - DataClass
struct Users: Codable {
let user: User
}

// MARK: - User
struct User: Codable {
let userID: String

enum CodingKeys: String, CodingKey {
case userID = "userId"
}
Expand Down
68 changes: 68 additions & 0 deletions NADA-iOS-forRelease/Sources/NetworkService/User/UserAPI.swift
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,54 @@ public class UserAPI {
}
}

func getUserTokenFetch(userID: String, completion: @escaping (NetworkResult<Any>) -> Void) {
userProvider.request(.userTokenFetch(userID: userID)) { (result) in
switch result {
case .success(let response):
let statusCode = response.statusCode
let data = response.data

let networkResult = self.judgeGetUserTokenFetchStatus(by: statusCode, data)
completion(networkResult)

case .failure(let err):
print(err)
}
}
}

func postUserSignUp(request: User, completion: @escaping (NetworkResult<Any>) -> Void) {
userProvider.request(.userSignUp(request: request)) { (result) in
switch result {
case .success(let response):
let statusCode = response.statusCode
let data = response.data

let networkResult = self.judgeStatus(by: statusCode, data)
completion(networkResult)

case .failure(let err):
print(err)
}
}
}

func deleteUser(userID: String, completion: @escaping (NetworkResult<Any>) -> Void) {
userProvider.request(.userDelete(userID: userID)) { (result) in
switch result {
case .success(let response):
let statusCode = response.statusCode
let data = response.data

let networkResult = self.judgeStatus(by: statusCode, data)
completion(networkResult)

case .failure(let err):
print(err)
}
}
}

private func judgeStatus(by statusCode: Int, _ data: Data) -> NetworkResult<Any> {

let decoder = JSONDecoder()
Expand All @@ -50,4 +98,24 @@ public class UserAPI {
return .networkFail
}
}

private func judgeGetUserTokenFetchStatus(by statusCode: Int, _ data: Data) -> NetworkResult<Any> {

let decoder = JSONDecoder()
guard let decodedData = try? decoder.decode(GenericResponse<UserWithTokenRequest>.self, from: data)
else {
return .pathErr
}

switch statusCode {
case 200:
return .success(decodedData.data)
case 400..<500:
return .requestErr(decodedData.msg)
case 500:
return .serverErr
default:
return .networkFail
}
}
}
29 changes: 28 additions & 1 deletion NADA-iOS-forRelease/Sources/NetworkService/User/UserSevice.swift
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@ import Moya

enum UserSevice {
case userIDFetch(userID: String)
case userTokenFetch(userID: String)
case userSignUp(request: User)
case userDelete(userID: String)
}

extension UserSevice: TargetType {
Expand All @@ -19,15 +22,27 @@ extension UserSevice: TargetType {

var path: String {
switch self {
case .userIDFetch(userID: let userID):
case .userIDFetch(let userID):
return "/\(userID)/login"
case .userTokenFetch(let userID):
return "/auth/\(userID)/login"
case .userSignUp:
return "/register"
case .userDelete(let userID):
return "/\(userID)"
}
}

var method: Moya.Method {
switch self {
case .userIDFetch:
return .get
case .userTokenFetch:
return .get
case .userSignUp:
return .post
case .userDelete:
return .delete
}
}

Expand All @@ -39,13 +54,25 @@ extension UserSevice: TargetType {
switch self {
case .userIDFetch:
return .requestPlain
case .userTokenFetch:
return .requestPlain
case .userSignUp(let request):
return .requestJSONEncodable(request)
case .userDelete:
return .requestPlain
}
}

var headers: [String: String]? {
switch self {
case .userIDFetch:
return ["Content-Type": "application/json"]
case .userTokenFetch:
return ["Content-Type": "application/json"]
case .userSignUp:
return ["Content-Type": "application/json"]
case .userDelete:
return ["Content-Type": "application/json"]
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,10 @@ class LoginViewController: UIViewController {
super.viewDidLoad()

// FIXME: - 서버 연결 테스트, 추후 위치 수정 필요
getUserIDFetchWithAPI(userID: "nada")
// getUserIDFetchWithAPI(userID: "nada")
// getUserTokenFetchWithAPI(userID: "nada")
// postUserSignUpWithAPI(request: User(userID: "nada3"))
// deleteUserWithAPI(userID: "nada3")
}

// MARK: - IBAction Properties
Expand Down Expand Up @@ -47,4 +50,56 @@ extension LoginViewController {
}
}
}

func getUserTokenFetchWithAPI(userID: String) {
UserAPI.shared.getUserTokenFetch(userID: userID) { response in
switch response {
case .success(let data):
print(data)
case .requestErr(let message):
print("getUserTokenFetchWithAPI - requestErr", message)
case .pathErr:
print("getUserTokenFetchWithAPI - pathErr")
case .serverErr:
print("getUserTokenFetchWithAPI - serverErr")
case .networkFail:
print("getUserTokenFetchWithAPI - networkFail")
}
}
}

func postUserSignUpWithAPI(request: User) {
UserAPI.shared.postUserSignUp(request: request) { response in
switch response {
case .success:
print("postUserSignUpWithAPI - success")
case .requestErr(let message):
print("postUserSignUpWithAPI - requestErr: \(message)")
case .pathErr:
print("postUserSignUpWithAPI - pathErr")
case .serverErr:
print("postUserSignUpWithAPI - serverErr")
case .networkFail:
print("postUserSignUpWithAPI - networkFail")
}
}
}

// FIXME: - 계정 탈퇴 네트워크 함수 추후 위치 수정
func deleteUserWithAPI(userID: String) {
UserAPI.shared.deleteUser(userID: userID) { response in
switch response {
case .success:
print("deleteUserWithAPI - success")
case .requestErr(let message):
print("deleteUserWithAPI - requestErr: \(message)")
case .pathErr:
print("deleteUserWithAPI - pathErr")
case .serverErr:
print("deleteUserWithAPI - serverErr")
case .networkFail:
print("deleteUserWithAPI - networkFail")
}
}
}
}