diff --git a/NADA-iOS-forRelease/Sources/Cells/GroupCell/CardInGroupCollectionViewCell.swift b/NADA-iOS-forRelease/Sources/Cells/GroupCell/CardInGroupCollectionViewCell.swift index 588c9696..92238586 100644 --- a/NADA-iOS-forRelease/Sources/Cells/GroupCell/CardInGroupCollectionViewCell.swift +++ b/NADA-iOS-forRelease/Sources/Cells/GroupCell/CardInGroupCollectionViewCell.swift @@ -21,8 +21,8 @@ class CardInGroupCollectionViewCell: UICollectionViewCell { @IBOutlet weak var instagramIcon: UIImageView! @IBOutlet weak var urlIcon: UIImageView! - var groupId: Int? - var cardId: String? + var groupID: Int? + var cardUUID: String? override func awakeFromNib() { super.awakeFromNib() diff --git a/NADA-iOS-forRelease/Sources/NetworkModel/Group/CardListInGroupRequest.swift b/NADA-iOS-forRelease/Sources/NetworkModel/Group/CardListInGroupRequest.swift index fffd0065..b091c38e 100644 --- a/NADA-iOS-forRelease/Sources/NetworkModel/Group/CardListInGroupRequest.swift +++ b/NADA-iOS-forRelease/Sources/NetworkModel/Group/CardListInGroupRequest.swift @@ -8,7 +8,7 @@ import Foundation struct CardListInGroupRequest: Codable { - var userId: String - var groupId: Int - var offset: Int + var cardGroupId: Int + var pageNo: Int + var pageSize: Int } diff --git a/NADA-iOS-forRelease/Sources/NetworkModel/Group/CardsInGroupResponse.swift b/NADA-iOS-forRelease/Sources/NetworkModel/Group/CardsInGroupResponse.swift index 473ee6db..60269d25 100644 --- a/NADA-iOS-forRelease/Sources/NetworkModel/Group/CardsInGroupResponse.swift +++ b/NADA-iOS-forRelease/Sources/NetworkModel/Group/CardsInGroupResponse.swift @@ -19,12 +19,18 @@ struct CardsInGroupResponse: Codable { // MARK: - Cards struct FrontCard: Codable { - let cardID, background, title, name, birthDate, mbti: String - let instagram, link, cardDescription: String? - - enum CodingKeys: String, CodingKey { - case cardID = "cardId" - case background, title, name, birthDate, mbti, instagram, link - case cardDescription = "description" - } + let birth: String + let cardID: Int + let cardImage, cardName, cardType, cardUUID: String + let departmentName, instagram, mailAddress, mbti: String + let phoneNumber, tmi, twitter, urls: String + let userName: String + + enum CodingKeys: String, CodingKey { + case birth + case cardID = "cardId" + case cardImage, cardName, cardType + case cardUUID = "cardUuid" + case departmentName, instagram, mailAddress, mbti, phoneNumber, tmi, twitter, urls, userName + } } diff --git a/NADA-iOS-forRelease/Sources/NetworkModel/Group/Groups.swift b/NADA-iOS-forRelease/Sources/NetworkModel/Group/Groups.swift index 5322b005..a2e44a9c 100644 --- a/NADA-iOS-forRelease/Sources/NetworkModel/Group/Groups.swift +++ b/NADA-iOS-forRelease/Sources/NetworkModel/Group/Groups.swift @@ -20,11 +20,6 @@ struct Groups: Codable { // MARK: - Group struct Group: Codable { - var groupID: Int - var groupName: String - - enum CodingKeys: String, CodingKey { - case groupID = "groupId" - case groupName - } + var cardGroupId: Int + var cardGroupName: String } diff --git a/NADA-iOS-forRelease/Sources/NetworkService/Group/GroupAPI.swift b/NADA-iOS-forRelease/Sources/NetworkService/Group/GroupAPI.swift index 2e58c6f9..d1d0a4ab 100644 --- a/NADA-iOS-forRelease/Sources/NetworkService/Group/GroupAPI.swift +++ b/NADA-iOS-forRelease/Sources/NetworkService/Group/GroupAPI.swift @@ -22,7 +22,7 @@ public class GroupAPI { let statusCode = response.statusCode let data = response.data - let networkResult = self.judgeStatus(by: statusCode, data) + let networkResult = self.judgeStatus(by: statusCode, data: data, type: String.self) completion(networkResult) case .failure(let err): @@ -38,7 +38,7 @@ public class GroupAPI { let statusCode = response.statusCode let data = response.data - let networkResult = self.judgeStatus(by: statusCode, data) + let networkResult = self.judgeStatus(by: statusCode, data: data, type: String.self) completion(networkResult) case .failure(let err): @@ -48,13 +48,13 @@ public class GroupAPI { } func groupListFetch(userID: String, completion: @escaping (NetworkResult) -> Void) { - groupProvider.request(.groupListFetch(userID: userID)) { (result) in + groupProvider.request(.groupListFetch) { (result) in switch result { case .success(let response): let statusCode = response.statusCode let data = response.data - let networkResult = self.judgeGroupListFetchStatus(by: statusCode, data) + let networkResult = self.judgeStatus(by: statusCode, data: data, type: [Group].self) completion(networkResult) case .failure(let err): @@ -70,7 +70,7 @@ public class GroupAPI { let statusCode = response.statusCode let data = response.data - let networkResult = self.judgeStatus(by: statusCode, data) + let networkResult = self.judgeStatus(by: statusCode, data: data, type: String.self) completion(networkResult) case .failure(let err): @@ -86,7 +86,7 @@ public class GroupAPI { let statusCode = response.statusCode let data = response.data - let networkResult = self.judgeStatus(by: statusCode, data) + let networkResult = self.judgeStatus(by: statusCode, data: data, type: String.self) completion(networkResult) case .failure(let err): @@ -102,7 +102,7 @@ public class GroupAPI { let statusCode = response.statusCode let data = response.data - let networkResult = self.judgeStatus(by: statusCode, data) + let networkResult = self.judgeStatus(by: statusCode, data: data, type: String.self) completion(networkResult) case .failure(let err): @@ -118,7 +118,7 @@ public class GroupAPI { let statusCode = response.statusCode let data = response.data - let networkResult = self.judgeStatus(by: statusCode, data) + let networkResult = self.judgeStatus(by: statusCode, data: data, type: String.self) completion(networkResult) case .failure(let err): @@ -134,7 +134,7 @@ public class GroupAPI { let statusCode = response.statusCode let data = response.data - let networkResult = self.judgeCardListFetchInGroupStatus(by: statusCode, data) + let networkResult = self.judgeStatus(by: statusCode, data: data, type: [Card].self) completion(networkResult) case .failure(let err): @@ -150,7 +150,7 @@ public class GroupAPI { let statusCode = response.statusCode let data = response.data - let networkResult = self.judgeStatus(by: statusCode, data) + let networkResult = self.judgeStatus(by: statusCode, data: data, type: String.self) completion(networkResult) case .failure(let err): @@ -201,10 +201,9 @@ public class GroupAPI { } } - private func judgeStatus(by statusCode: Int, _ data: Data) -> NetworkResult { - + private func judgeStatus(by statusCode: Int, data: Data, type: T.Type) -> NetworkResult { let decoder = JSONDecoder() - guard let decodedData = try? decoder.decode(GenericResponse.self, from: data) + guard let decodedData = try? decoder.decode(GenericResponse.self, from: data) else { return .pathErr } switch statusCode { diff --git a/NADA-iOS-forRelease/Sources/NetworkService/Group/GroupService.swift b/NADA-iOS-forRelease/Sources/NetworkService/Group/GroupService.swift index 591be957..468bfc62 100644 --- a/NADA-iOS-forRelease/Sources/NetworkService/Group/GroupService.swift +++ b/NADA-iOS-forRelease/Sources/NetworkService/Group/GroupService.swift @@ -9,7 +9,7 @@ import Foundation import Moya enum GroupService { - case groupListFetch(userID: String) + case groupListFetch case groupDelete(groupID: Int, defaultGroupId: Int) case groupAdd(groupRequest: GroupAddRequest) case groupEdit(groupRequest: GroupEditRequest) @@ -37,15 +37,15 @@ extension GroupService: TargetType { var path: String { switch self { case .groupListFetch, .groupReset: - return "/groups" + return "/card-group/list" case .groupDelete(let groupID, _): return "/group/\(groupID)" case .groupAdd, .groupEdit: return "/group" case .cardAddInGroup, .changeCardGroup: return "/groups/card" - case .cardListFetchInGroup: - return "/groups/cards" + case .cardListFetchInGroup(let cardListInGroupRequest): + return "/card-group/\(cardListInGroupRequest.cardGroupId)/cards" case .cardDeleteInGroup(let groupID, let cardID): return "/group/\(groupID)/\(cardID)" } @@ -70,9 +70,8 @@ extension GroupService: TargetType { var task: Task { switch self { - case .groupListFetch(let userID): - return .requestParameters(parameters: ["userId": userID], - encoding: URLEncoding.queryString) + case .groupListFetch: + return .requestPlain case .cardDeleteInGroup, .groupReset: return .requestPlain case .groupDelete(_, let defaultGroupId): @@ -85,9 +84,8 @@ extension GroupService: TargetType { case .cardAddInGroup(let cardRequest): return .requestJSONEncodable(cardRequest) case .cardListFetchInGroup(let cardListInGroupRequest): - return .requestParameters(parameters: ["userId": cardListInGroupRequest.userId, - "groupId": cardListInGroupRequest.groupId, - "offset": cardListInGroupRequest.offset], encoding: URLEncoding.queryString) + return .requestParameters(parameters: ["pageNo": cardListInGroupRequest.pageNo, + "pageSize": cardListInGroupRequest.pageSize], encoding: URLEncoding.queryString) case .changeCardGroup(let requestModel): return .requestJSONEncodable(requestModel) } diff --git a/NADA-iOS-forRelease/Sources/ViewControllers/BottomSheet/GroupNameEditBottomSheetViewController.swift b/NADA-iOS-forRelease/Sources/ViewControllers/BottomSheet/GroupNameEditBottomSheetViewController.swift index 7207362c..76bbb0b3 100644 --- a/NADA-iOS-forRelease/Sources/ViewControllers/BottomSheet/GroupNameEditBottomSheetViewController.swift +++ b/NADA-iOS-forRelease/Sources/ViewControllers/BottomSheet/GroupNameEditBottomSheetViewController.swift @@ -89,7 +89,7 @@ class GroupNameEditBottomSheetViewController: CommonBottomSheetViewController, U extension GroupNameEditBottomSheetViewController { func textFieldShouldReturn(_ textField: UITextField) -> Bool { textField.resignFirstResponder() - groupEditWithAPI(groupRequest: GroupEditRequest(groupId: nowGroup?.groupID ?? 0, groupName: addGroupTextField.text ?? "")) + groupEditWithAPI(groupRequest: GroupEditRequest(groupId: nowGroup?.cardGroupId ?? 0, groupName: addGroupTextField.text ?? "")) nowHideBottomSheetAndGoBack() return true diff --git a/NADA-iOS-forRelease/Sources/ViewControllers/BottomSheet/SelectGroupBottomSheetViewController.swift b/NADA-iOS-forRelease/Sources/ViewControllers/BottomSheet/SelectGroupBottomSheetViewController.swift index a6ff86fb..0f36ed67 100644 --- a/NADA-iOS-forRelease/Sources/ViewControllers/BottomSheet/SelectGroupBottomSheetViewController.swift +++ b/NADA-iOS-forRelease/Sources/ViewControllers/BottomSheet/SelectGroupBottomSheetViewController.swift @@ -54,7 +54,7 @@ class SelectGroupBottomSheetViewController: CommonBottomSheetViewController { private func setupUI() { view.addSubview(groupPicker) view.addSubview(doneButton) - selectedGroup = serverGroups?.groups[0].groupID ?? 0 + selectedGroup = serverGroups?.groups[0].cardGroupId ?? 0 groupPicker.delegate = self groupPicker.dataSource = self setupLayout() @@ -113,16 +113,16 @@ extension SelectGroupBottomSheetViewController: UIPickerViewDelegate, UIPickerVi label.textAlignment = .center if pickerView.selectedRow(inComponent: component) == row { - label.attributedText = NSAttributedString(string: serverGroups?.groups[row].groupName ?? "", attributes: [NSAttributedString.Key.font: UIFont.textBold01, NSAttributedString.Key.foregroundColor: UIColor.mainColorNadaMain]) + label.attributedText = NSAttributedString(string: serverGroups?.groups[row].cardGroupName ?? "", attributes: [NSAttributedString.Key.font: UIFont.textBold01, NSAttributedString.Key.foregroundColor: UIColor.mainColorNadaMain]) } else { - label.attributedText = NSAttributedString(string: serverGroups?.groups[row].groupName ?? "", attributes: [NSAttributedString.Key.font: UIFont.textRegular03, NSAttributedString.Key.foregroundColor: UIColor.quaternary]) + label.attributedText = NSAttributedString(string: serverGroups?.groups[row].cardGroupName ?? "", attributes: [NSAttributedString.Key.font: UIFont.textRegular03, NSAttributedString.Key.foregroundColor: UIColor.quaternary]) } return label } func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { - selectedGroup = serverGroups?.groups[row].groupID ?? 0 + selectedGroup = serverGroups?.groups[row].cardGroupId ?? 0 selectedGroupIndex = row pickerView.reloadAllComponents() } diff --git a/NADA-iOS-forRelease/Sources/ViewControllers/Group/GroupViewController.swift b/NADA-iOS-forRelease/Sources/ViewControllers/Group/GroupViewController.swift index c529d3e9..c9d3c3f1 100644 --- a/NADA-iOS-forRelease/Sources/ViewControllers/Group/GroupViewController.swift +++ b/NADA-iOS-forRelease/Sources/ViewControllers/Group/GroupViewController.swift @@ -52,7 +52,8 @@ class GroupViewController: UIViewController { // 중간 그룹 이름들 나열된 뷰 @IBAction func pushToGroupEdit(_ sender: Any) { guard let nextVC = UIStoryboard.init(name: Const.Storyboard.Name.groupEdit, bundle: nil).instantiateViewController(withIdentifier: Const.ViewController.Identifier.groupEditViewController) as? GroupEditViewController else { return } - nextVC.serverGroups = self.serverGroups + //nextVC.serverGroups = self.serverGroups + //TODO: 고치세요 navigationController?.pushViewController(nextVC, animated: true) } @@ -82,7 +83,7 @@ class GroupViewController: UIViewController { @IBOutlet weak var emptyView: UIView! // 그룹 이름들을 담을 변수 생성 - var serverGroups: Groups? + var serverGroups: [Group]? = [] var frontCards: [FrontCard]? = [] var serverCardsWithBack: Card? var groupId: Int? @@ -172,17 +173,19 @@ extension GroupViewController { GroupAPI.shared.groupListFetch(userID: userID) { response in switch response { case .success(let data): - if let group = data as? Groups { + if let group = data as? [Group] { self.serverGroups = group self.groupCollectionView.reloadData() - self.groupId = group.groups[self.selectedRow].groupID - self.cardListInGroupWithAPI(cardListInGroupRequest: CardListInGroupRequest(userId: UserDefaults.standard.string(forKey: Const.UserDefaultsKey.userID) ?? "", groupId: group.groups[self.selectedRow].groupID, offset: 0)) { + self.groupId = group[self.selectedRow].cardGroupId + print("✅", self.groupId) + self.cardListInGroupWithAPI(cardListInGroupRequest: CardListInGroupRequest(cardGroupId: self.groupId ?? 0, pageNo: 1, pageSize: 1)) { if self.frontCards?.count != 0 { self.cardsCollectionView.scrollToItem(at: IndexPath(item: 0, section: 0), at: .top, animated: false) } self.isInfiniteScroll = true } } + print("groupListFetchWithAPI - success") case .requestErr(let message): print("groupListFetchWithAPI - requestErr: \(message)") case .pathErr: @@ -202,8 +205,8 @@ extension GroupViewController { self.activityIndicator.stopAnimating() self.loadingBgView.removeFromSuperview() - if let cards = data as? CardsInGroupResponse { - self.frontCards?.append(contentsOf: cards.cards) + if let cards = data as? [FrontCard] { + self.frontCards = cards if self.frontCards?.count == 0 { self.emptyView.isHidden = false } else { @@ -211,7 +214,8 @@ extension GroupViewController { } self.cardsCollectionView.reloadData() } - completion() + //completion() + print("cardListInGroupWithAPI - success") case .requestErr(let message): print("cardListInGroupWithAPI - requestErr: \(message)") case .pathErr: @@ -233,7 +237,8 @@ extension GroupViewController { nextVC.cardDataModel = card nextVC.groupId = self.groupId - nextVC.serverGroups = self.serverGroups + //nextVC.serverGroups = self.serverGroups + //TODO: 고치세요 self.navigationController?.pushViewController(nextVC, animated: true) } case .requestErr(let message): @@ -257,10 +262,11 @@ extension GroupViewController: UICollectionViewDelegate { if isInfiniteScroll { isInfiniteScroll = false offset += 1 - - cardListInGroupWithAPI(cardListInGroupRequest: CardListInGroupRequest(userId: UserDefaults.standard.string(forKey: Const.UserDefaultsKey.userID) ?? "", groupId: serverGroups?.groups[self.selectedRow].groupID ?? -1, offset: offset)) { + /* + cardListInGroupWithAPI(cardListInGroupRequest: CardListInGroupRequest(userId: UserDefaults.standard.string(forKey: Const.UserDefaultsKey.userID) ?? "", groupId: serverGroups?.groups[self.selectedRow].cardGroupId ?? -1, offset: offset)) { self.isInfiniteScroll = true } + */ } } } @@ -272,7 +278,7 @@ extension GroupViewController: UICollectionViewDataSource { func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { switch collectionView { case groupCollectionView: - return serverGroups?.groups.count ?? 0 + return serverGroups?.count ?? 0 case cardsCollectionView: return frontCards?.count ?? 0 default: @@ -286,7 +292,7 @@ extension GroupViewController: UICollectionViewDataSource { guard let groupCell = collectionView.dequeueReusableCell(withReuseIdentifier: Const.Xib.groupCollectionViewCell, for: indexPath) as? GroupCollectionViewCell else { return UICollectionViewCell() } - groupCell.groupName.text = serverGroups?.groups[indexPath.row].groupName + groupCell.groupName.text = serverGroups?[indexPath.row].cardGroupName if indexPath.row == selectedRow { collectionView.selectItem(at: indexPath, animated: true, scrollPosition: .init()) @@ -297,20 +303,20 @@ extension GroupViewController: UICollectionViewDataSource { return UICollectionViewCell() } guard let frontCards = frontCards else { return UICollectionViewCell() } - cardCell.backgroundImageView.updateServerImage(frontCards[indexPath.row].background) - cardCell.cardId = frontCards[indexPath.row].cardID - cardCell.titleLabel.text = frontCards[indexPath.row].title - cardCell.descriptionLabel.text = frontCards[indexPath.row].cardDescription - cardCell.userNameLabel.text = frontCards[indexPath.row].name - cardCell.birthLabel.text = frontCards[indexPath.row].birthDate + cardCell.backgroundImageView.updateServerImage(frontCards[indexPath.row].cardImage) + cardCell.cardUUID = frontCards[indexPath.row].cardUUID + cardCell.titleLabel.text = frontCards[indexPath.row].cardName + cardCell.descriptionLabel.text = frontCards[indexPath.row].departmentName + cardCell.userNameLabel.text = frontCards[indexPath.row].userName + cardCell.birthLabel.text = frontCards[indexPath.row].birth cardCell.mbtiLabel.text = frontCards[indexPath.row].mbti cardCell.instagramIDLabel.text = frontCards[indexPath.row].instagram - cardCell.lineURLLabel.text = frontCards[indexPath.row].link + cardCell.lineURLLabel.text = frontCards[indexPath.row].urls if frontCards[indexPath.row].instagram == "" { cardCell.instagramIcon.isHidden = true } - if frontCards[indexPath.row].link == "" { + if frontCards[indexPath.row].urls == "" { cardCell.urlIcon.isHidden = true } @@ -324,7 +330,7 @@ extension GroupViewController: UICollectionViewDataSource { switch collectionView { case groupCollectionView: selectedRow = indexPath.row - groupId = serverGroups?.groups[indexPath.row].groupID + groupId = serverGroups?[indexPath.row].cardGroupId offset = 0 frontCards?.removeAll() @@ -334,14 +340,14 @@ extension GroupViewController: UICollectionViewDataSource { DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { self.cardListInGroupWithAPI(cardListInGroupRequest: - CardListInGroupRequest(userId: UserDefaults.standard.string(forKey: Const.UserDefaultsKey.userID) ?? "", - groupId: self.serverGroups?.groups[indexPath.row].groupID ?? 0, - offset: 0)) { + CardListInGroupRequest(cardGroupId: self.groupId ?? 0, + pageNo: 1, + pageSize: 1)) { self.isInfiniteScroll = true } } case cardsCollectionView: - cardDetailFetchWithAPI(cardUUID: frontCards?[indexPath.row].cardID ?? "") + cardDetailFetchWithAPI(cardUUID: frontCards?[indexPath.row].cardUUID ?? "") default: return } @@ -360,7 +366,7 @@ extension GroupViewController: UICollectionViewDelegateFlowLayout { guard let cell = groupCollectionView.dequeueReusableCell(withReuseIdentifier: Const.Xib.groupCollectionViewCell, for: indexPath) as? GroupCollectionViewCell else { return .zero } - cell.groupName.text = serverGroups?.groups[indexPath.row].groupName + cell.groupName.text = serverGroups?[indexPath.row].cardGroupName cell.groupName.sizeToFit() width = cell.groupName.frame.width + 30 height = collectionView.frame.size.height diff --git a/NADA-iOS-forRelease/Sources/ViewControllers/GroupEdit/GroupEditViewController.swift b/NADA-iOS-forRelease/Sources/ViewControllers/GroupEdit/GroupEditViewController.swift index 55558bb0..f17e1f1b 100644 --- a/NADA-iOS-forRelease/Sources/ViewControllers/GroupEdit/GroupEditViewController.swift +++ b/NADA-iOS-forRelease/Sources/ViewControllers/GroupEdit/GroupEditViewController.swift @@ -72,7 +72,7 @@ extension GroupEditViewController: UITableViewDelegate { // 취소 눌렀을 때 액션이 들어갈 부분 }, deleteAction: { _ in self.groupDeleteWithAPI( - groupID: self.serverGroups?.groups[indexPath.row].groupID ?? 0, + groupID: self.serverGroups?.groups[indexPath.row].cardGroupId ?? 0, defaultGroupId: self.unClass ?? 0) self.groupEditTableView.reloadData() NotificationCenter.default.post(name: Notification.Name.passDataToGroup, object: 0, userInfo: nil) @@ -93,7 +93,7 @@ extension GroupEditViewController: UITableViewDelegate { .setTitle("그룹명 변경") .setHeight(184) nextVC.modalPresentationStyle = .overFullScreen - nextVC.text = serverGroups?.groups[indexPath.row].groupName ?? "" + nextVC.text = serverGroups?.groups[indexPath.row].cardGroupName ?? "" nextVC.returnToGroupEditViewController = { self.groupListFetchWithAPI(userID: UserDefaults.standard.string(forKey: Const.UserDefaultsKey.userID) ?? "") } @@ -121,7 +121,7 @@ extension GroupEditViewController: UITableViewDataSource { } else { guard let serviceCell = tableView.dequeueReusableCell(withIdentifier: Const.Xib.groupEditTableViewCell, for: indexPath) as? GroupEditTableViewCell else { return UITableViewCell() } - serviceCell.initData(title: serverGroups?.groups[indexPath.row].groupName ?? "") + serviceCell.initData(title: serverGroups?.groups[indexPath.row].cardGroupName ?? "") return serviceCell } } @@ -130,7 +130,7 @@ extension GroupEditViewController: UITableViewDataSource { // MARK: - Extensions extension GroupEditViewController { func serverGroupList() { - self.unClass = serverGroups?.groups[0].groupID + self.unClass = serverGroups?.groups[0].cardGroupId serverGroups?.groups.remove(at: 0) } } @@ -143,7 +143,7 @@ extension GroupEditViewController { case .success(let data): if let group = data as? Groups { self.serverGroups = group - self.unClass = self.serverGroups?.groups[0].groupID + self.unClass = self.serverGroups?.groups[0].cardGroupId self.serverGroups?.groups.remove(at: 0) self.groupEditTableView.reloadData() }