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] #56 - 명함 그룹 뷰 서버통신 #60

Merged
merged 10 commits into from
Nov 16, 2021
28 changes: 28 additions & 0 deletions NADA-iOS-forRelease.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,11 @@
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 */; };
777FF89B27359B7800BF69D3 /* Groups.swift in Sources */ = {isa = PBXBuildFile; fileRef = 777FF89A27359B7800BF69D3 /* Groups.swift */; };
777FF89D2735B16B00BF69D3 /* GroupAddRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 777FF89C2735B16B00BF69D3 /* GroupAddRequest.swift */; };
777FF89F27364B7B00BF69D3 /* GroupEditRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 777FF89E27364B7B00BF69D3 /* GroupEditRequest.swift */; };
77AA68EA273E0EC4009C89B0 /* CardAddInGroupRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 77AA68E9273E0EC4009C89B0 /* CardAddInGroupRequest.swift */; };
77AA68EC273E202D009C89B0 /* CardListRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 77AA68EB273E202D009C89B0 /* CardListRequest.swift */; };
DBBB91E1639641F40C5B4416 /* Pods_NADA_iOS_forRelease.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4A2183AE0E469153221624A0 /* Pods_NADA_iOS_forRelease.framework */; };
F811720027383097002742CF /* ChangeGroupRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = F81171FF27383097002742CF /* ChangeGroupRequest.swift */; };
F822E7A92709CEB60020452C /* Notification.swift in Sources */ = {isa = PBXBuildFile; fileRef = F822E7A82709CEB60020452C /* Notification.swift */; };
Expand Down Expand Up @@ -103,6 +108,11 @@
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>"; };
4A2183AE0E469153221624A0 /* Pods_NADA_iOS_forRelease.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_NADA_iOS_forRelease.framework; sourceTree = BUILT_PRODUCTS_DIR; };
777FF89A27359B7800BF69D3 /* Groups.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Groups.swift; sourceTree = "<group>"; };
777FF89C2735B16B00BF69D3 /* GroupAddRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GroupAddRequest.swift; sourceTree = "<group>"; };
777FF89E27364B7B00BF69D3 /* GroupEditRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GroupEditRequest.swift; sourceTree = "<group>"; };
77AA68E9273E0EC4009C89B0 /* CardAddInGroupRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CardAddInGroupRequest.swift; sourceTree = "<group>"; };
77AA68EB273E202D009C89B0 /* CardListRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CardListRequest.swift; sourceTree = "<group>"; };
7F4EE1D042EC783FA8528743 /* Pods-NADA-iOS-forRelease.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NADA-iOS-forRelease.debug.xcconfig"; path = "Target Support Files/Pods-NADA-iOS-forRelease/Pods-NADA-iOS-forRelease.debug.xcconfig"; sourceTree = "<group>"; };
F81171FF27383097002742CF /* ChangeGroupRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChangeGroupRequest.swift; sourceTree = "<group>"; };
F822E7A82709CEB60020452C /* Notification.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Notification.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -260,6 +270,18 @@
name = Frameworks;
sourceTree = "<group>";
};
777FF89927359B1000BF69D3 /* Group */ = {
isa = PBXGroup;
children = (
777FF89A27359B7800BF69D3 /* Groups.swift */,
777FF89C2735B16B00BF69D3 /* GroupAddRequest.swift */,
777FF89E27364B7B00BF69D3 /* GroupEditRequest.swift */,
77AA68E9273E0EC4009C89B0 /* CardAddInGroupRequest.swift */,
77AA68EB273E202D009C89B0 /* CardListRequest.swift */,
);
path = Group;
sourceTree = "<group>";
};
F81171FE27383077002742CF /* Group */ = {
isa = PBXGroup;
children = (
Expand Down Expand Up @@ -394,6 +416,7 @@
F8C83FBA272F9F370009DF0D /* NetworkResult.swift */,
F8C83FBC272F9F430009DF0D /* GenericResponse.swift */,
F87122722733032300A24E74 /* Card */,
777FF89927359B1000BF69D3 /* Group */,
);
path = NetworkModel;
sourceTree = "<group>";
Expand Down Expand Up @@ -720,6 +743,8 @@
3958F239270FFBBF00B100B2 /* GroupViewController.swift in Sources */,
3909242F26FA15E800236C51 /* UIView+Extension.swift in Sources */,
39523E09270184A700536900 /* CardListViewController.swift in Sources */,
777FF89B27359B7800BF69D3 /* Groups.swift in Sources */,
777FF89F27364B7B00BF69D3 /* GroupEditRequest.swift in Sources */,
399C55DF2711949D00845A54 /* CGPoint+Distance.swift in Sources */,
F83206AA26F61E3700D61711 /* FrontCardCell.swift in Sources */,
3979709626FA0BE5003FB4F5 /* LoginViewController.swift in Sources */,
Expand All @@ -731,6 +756,7 @@
F8C83FC9272FA3190009DF0D /* GroupAPI.swift in Sources */,
F8FC43B826C0227D0033E151 /* Const.swift in Sources */,
394F314C27081B3A00C83291 /* FrontViewController.swift in Sources */,
777FF89D2735B16B00BF69D3 /* GroupAddRequest.swift in Sources */,
F8F5D0AA270800FD00D99D2E /* Xib.swift in Sources */,
F82FF8252702000000E57F8B /* RequiredFlavorCollectionViewCell.swift in Sources */,
F8C83FC7272FA2A20009DF0D /* CardService.swift in Sources */,
Expand All @@ -750,9 +776,11 @@
399C55DD271192D000845A54 /* CustomTabIndicatorView.swift in Sources */,
F8C83FC1272FA06E0009DF0D /* UserAPI.swift in Sources */,
F8C83FC3272FA17B0009DF0D /* URL.swift in Sources */,
77AA68EA273E0EC4009C89B0 /* CardAddInGroupRequest.swift in Sources */,
F8C83FAE272F99940009DF0D /* MoyaLoggerPlugin.swift in Sources */,
F84BAFAD26FDB543004CA335 /* FrontCardCreationCollectionViewCell.swift in Sources */,
F822E7A92709CEB60020452C /* Notification.swift in Sources */,
77AA68EC273E202D009C89B0 /* CardListRequest.swift in Sources */,
F8C83FC5272FA2940009DF0D /* CardAPI.swift in Sources */,
F8FC438626C01CDD0033E151 /* AppDelegate.swift in Sources */,
F8C83FB8272F9E3F0009DF0D /* UtilAPI.swift in Sources */,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
//
// CardAddInGroupRequest.swift
// NADA-iOS-forRelease
//
// Created by Yi Joon Choi on 2021/11/12.
//

import Foundation

struct CardAddInGroupRequest: Codable {
var cardId: String?
var userId: String?
var groupId: Int?
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
//
// CardListRequest.swift
// NADA-iOS-forRelease
//
// Created by Yi Joon Choi on 2021/11/12.
//

import Foundation

struct CardListRequest: Codable {
var userId: String
var groupId: Int
var offset: Int
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
//
// GroupAddRequest.swift
// NADA-iOS-forRelease
//
// Created by Yi Joon Choi on 2021/11/06.
//

import Foundation

struct GroupAddRequest: Codable {
var userId: String?
var groupName: String?
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
//
// GroupEditRequest.swift
// NADA-iOS-forRelease
//
// Created by Yi Joon Choi on 2021/11/06.
//

import Foundation

struct GroupEditRequest: Codable {
var groupId: Int?
var groupName: String?
}
Comment on lines +10 to +13
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

request 용을 사용하는 부분이라서 혹시 굳이 옵셔널일 이유가 있을까요..?! 흠흠 이걸보니 어디서부터 어디까지를 request 할 때 모델을 만들건지도 얘기해봐야겠네요

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

앗 이게 저는 그 퀵타입 안쓰고 항상 데이터 타입 보고 직접 모델 만드는데 ? 붙이는게 익숙해져서 요것도 그냥 만들때 붙인거 같네요... 사실 리퀘스트 할때는 옵셔널이 딱히 필요없긴해요!

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

넵 그러면 요거는 지워주세욥

17 changes: 17 additions & 0 deletions NADA-iOS-forRelease/Sources/NetworkModel/Group/Groups.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
//
// GroupListResponse.swift
// NADA-iOS-forRelease
//
// Created by Yi Joon Choi on 2021/11/06.
//

import Foundation

struct Groups: Codable {
var groups: [Group]?
}

struct Group: Codable {
var groupId: Int?
var groupName: String?
}
Comment on lines +14 to +17
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이거보니까 저도 response 데이터 모델에는 옵셔널 설정을 해줘야겠군요..!
앱이 죽는걸 방지하는 목적이죠?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

넴 맞습니다 !!!!

125 changes: 121 additions & 4 deletions NADA-iOS-forRelease/Sources/NetworkService/Group/GroupAPI.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import Foundation
import Moya

public class GroupAPI {

static let shared = GroupAPI()
var groupProvider = MoyaProvider<GroupService>(plugins: [MoyaLoggerPlugin()])

Expand All @@ -20,10 +21,10 @@ public class GroupAPI {
case .success(let response):
let statusCode = response.statusCode
let data = response.data

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

case .failure(let err):
print(err)
}
Expand All @@ -36,16 +37,132 @@ public class GroupAPI {
case .success(let response):
let statusCode = response.statusCode
let data = response.data

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

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

func getGroupListFetch(userID: String, completion: @escaping (NetworkResult<Any>) -> Void) {
groupProvider.request(.groupListFetch(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)
}
}
}

func deleteGroup(groupID: Int, completion: @escaping (NetworkResult<Any>) -> Void) {
groupProvider.request(.groupDelete(groupID: groupID)) { (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 postGroupAdd(groupRequest: GroupAddRequest, completion: @escaping (NetworkResult<Any>) -> Void) {
groupProvider.request(.groupAdd(groupRequest: groupRequest)) { (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 putGroupEdit(groupRequest: GroupEditRequest, completion: @escaping (NetworkResult<Any>) -> Void) {
groupProvider.request(.groupEdit(groupRequest: groupRequest)) { (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 postCardAddInGroup(cardRequest: CardAddInGroupRequest, completion: @escaping (NetworkResult<Any>) -> Void) {
groupProvider.request(.cardAddInGroup(cardRequest: cardRequest)) { (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 getCardListFetch(cardListRequest: CardListRequest, completion: @escaping (NetworkResult<Any>) -> Void) {
groupProvider.request(.cardListFetch(cardListRequest: cardListRequest)) { (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)
}
}
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

judgeStatus 함수에서 Groups 으로 디코딩하는데 혹시 통신되는지 확인하셨나요?
위에 getGroupListFetch 에서는 되는 디코딩일텐데 getCardListFetch 여기서는 다른 judgeStatus 메서드를 만드셔야할거 같아요..!

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

어라라 서버 통신 되는거 확인했었는데 ... 제가 한번 다시 확인해보겠슴다!

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이상허다... 이거 왜.. 되져?
image

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이상허다 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
아 고것은 위에 결과는 모야플러그인으로 제가 만든 인터페이스에서 서버에서 가져온 결과를 뿌려준거에영
혹시 ----END HTTP--- 이거 위에 있지 않았나여?
groups 로 judgeStatus 가 디코딩을 하니까 저 그룹아이디 뭐 이렇게 구성된 데이터모델인데 저게 출력될리는 없을거에용 아마도 아무것도 print 가 안될거야 디코딩이 안되서
한번 다시해서 출력해볼래요? 그러면 위에 인터페이스말고도 출력이 될겁니당

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

아하 아하 역시 교수님.. 다시 데이터 모델 새로 만들어서 judgeStatus 이름 안겹치게 새로 만들어서 출력되는거 확인했습니당 !!
image

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

굳굳 멋집니다!!


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

let decoder = JSONDecoder()
guard let decodedData = try? decoder.decode(GenericResponse<Groups>.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
}
}

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

let decoder = JSONDecoder()
Expand Down
Loading