diff --git a/NADA-iOS-forRelease/Resouces/Storyboards/CardDetail/CardDetail.storyboard b/NADA-iOS-forRelease/Resouces/Storyboards/CardDetail/CardDetail.storyboard index 159cfeda..e35791ed 100644 --- a/NADA-iOS-forRelease/Resouces/Storyboards/CardDetail/CardDetail.storyboard +++ b/NADA-iOS-forRelease/Resouces/Storyboards/CardDetail/CardDetail.storyboard @@ -118,6 +118,7 @@ + diff --git a/NADA-iOS-forRelease/Sources/Cells/CardCell/MainCardCell.swift b/NADA-iOS-forRelease/Sources/Cells/CardCell/MainCardCell.swift index 99073261..c86b11a0 100644 --- a/NADA-iOS-forRelease/Sources/Cells/CardCell/MainCardCell.swift +++ b/NADA-iOS-forRelease/Sources/Cells/CardCell/MainCardCell.swift @@ -89,9 +89,9 @@ extension MainCardCell { cardDataModel.isSoju, cardDataModel.isBoomuk, cardDataModel.isSauced, - cardDataModel.oneTMI ?? "", - cardDataModel.twoTMI ?? "", - cardDataModel.thirdTMI ?? "", + cardDataModel.oneTmi ?? "", + cardDataModel.twoTmi ?? "", + cardDataModel.threeTmi ?? "", isShareable: isShareable ?? false) contentView.addSubview(backCard) diff --git a/NADA-iOS-forRelease/Sources/Cells/GroupCell/CardInGroupCollectionViewCell.swift b/NADA-iOS-forRelease/Sources/Cells/GroupCell/CardInGroupCollectionViewCell.swift index 4d939376..5cddc132 100644 --- a/NADA-iOS-forRelease/Sources/Cells/GroupCell/CardInGroupCollectionViewCell.swift +++ b/NADA-iOS-forRelease/Sources/Cells/GroupCell/CardInGroupCollectionViewCell.swift @@ -19,6 +19,9 @@ class CardInGroupCollectionViewCell: UICollectionViewCell { @IBOutlet weak var instagramIDLabel: UILabel! @IBOutlet weak var lineURLLabel: UILabel! + var groupId: Int? + var cardId: String? + override func awakeFromNib() { super.awakeFromNib() setUI() diff --git a/NADA-iOS-forRelease/Sources/NetworkModel/Card/Card.swift b/NADA-iOS-forRelease/Sources/NetworkModel/Card/Card.swift index 8b0b6713..65ef1c70 100644 --- a/NADA-iOS-forRelease/Sources/NetworkModel/Card/Card.swift +++ b/NADA-iOS-forRelease/Sources/NetworkModel/Card/Card.swift @@ -7,18 +7,26 @@ import Foundation +// MARK: - DataClass +struct CardClass: Codable { + let card: Card +} + // MARK: - Card struct Card: Codable { - let cardID, background, title, name, birthDate, mbti: String - let instagram, link, cardDescription: String? + let cardID, background, title, name: String + let birthDate, mbti, instagram, link: String + let cardDescription: String let isMincho, isSoju, isBoomuk, isSauced: Bool - let oneTMI, twoTMI, thirdTMI: String? + let oneTmi, twoTmi, threeTmi: String enum CodingKeys: String, CodingKey { case cardID = "cardId" - case background, title, name, birthDate, mbti, instagram, link, isMincho, isSoju, isBoomuk, isSauced, oneTMI, twoTMI, thirdTMI + case background, title, name, birthDate, mbti, instagram, link case cardDescription = "description" + case isMincho, isSoju, isBoomuk, isSauced, oneTmi, twoTmi, threeTmi } +} // FIXME: - 메인에서 카드 정보 정적으로 생성하기 위한 주석 // init(from decoder: Decoder) throws { // let values = try decoder.container(keyedBy: CodingKeys.self) @@ -39,4 +47,4 @@ struct Card: Codable { // twoTMI = (try? values.decode(String.self, forKey: .twoTMI)) // thirdTMI = (try? values.decode(String.self, forKey: .thirdTMI)) // } -} +//} diff --git a/NADA-iOS-forRelease/Sources/NetworkService/Card/CardAPI.swift b/NADA-iOS-forRelease/Sources/NetworkService/Card/CardAPI.swift index 0f3c75bf..b0af41a1 100644 --- a/NADA-iOS-forRelease/Sources/NetworkService/Card/CardAPI.swift +++ b/NADA-iOS-forRelease/Sources/NetworkService/Card/CardAPI.swift @@ -98,7 +98,7 @@ public class CardAPI { private func judgeCardDetailFetchStatus(by statusCode: Int, _ data: Data) -> 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 } diff --git a/NADA-iOS-forRelease/Sources/NetworkService/Card/CardService.swift b/NADA-iOS-forRelease/Sources/NetworkService/Card/CardService.swift index 1b55bc4c..bbbdb8d0 100644 --- a/NADA-iOS-forRelease/Sources/NetworkService/Card/CardService.swift +++ b/NADA-iOS-forRelease/Sources/NetworkService/Card/CardService.swift @@ -110,7 +110,7 @@ extension CardService: TargetType { var headers: [String: String]? { switch self { case .cardDetailFetch, .cardListFetch, .cardDelete: - return .none + return Const.Header.bearerHeader case .cardCreation: return Const.Header.basicHeader case .cardListEdit: diff --git a/NADA-iOS-forRelease/Sources/ViewControllers/CardDetail/CardDetailViewController.swift b/NADA-iOS-forRelease/Sources/ViewControllers/CardDetail/CardDetailViewController.swift index 7d0c30fa..55de5115 100644 --- a/NADA-iOS-forRelease/Sources/ViewControllers/CardDetail/CardDetailViewController.swift +++ b/NADA-iOS-forRelease/Sources/ViewControllers/CardDetail/CardDetailViewController.swift @@ -36,6 +36,7 @@ class CardDetailViewController: UIViewController { @IBOutlet weak var optionButton: UIButton! @IBOutlet weak var cardView: UIView! @IBOutlet weak var backButton: UIButton! + @IBOutlet weak var idLabel: UILabel! public var cardDataModel: Card? private var isShareable: Bool = false @@ -61,6 +62,7 @@ extension CardDetailViewController { case .add: backButton.setImage(UIImage(named: "iconClear"), for: .normal) } + idLabel.text = cardDataModel?.cardID } private func setMenu() { let changeGroup = UIAction(title: "그룹 변경", @@ -126,9 +128,9 @@ extension CardDetailViewController { cardDataModel?.isSoju ?? true, cardDataModel?.isBoomuk ?? true, cardDataModel?.isSauced ?? true, - cardDataModel?.oneTMI ?? "", - cardDataModel?.twoTMI ?? "", - cardDataModel?.thirdTMI ?? "", + cardDataModel?.oneTmi ?? "", + cardDataModel?.twoTmi ?? "", + cardDataModel?.threeTmi ?? "", isShareable: isShareable) cardView.addSubview(backCard) diff --git a/NADA-iOS-forRelease/Sources/ViewControllers/Group/GroupViewController.swift b/NADA-iOS-forRelease/Sources/ViewControllers/Group/GroupViewController.swift index f09cabca..afd348d4 100644 --- a/NADA-iOS-forRelease/Sources/ViewControllers/Group/GroupViewController.swift +++ b/NADA-iOS-forRelease/Sources/ViewControllers/Group/GroupViewController.swift @@ -7,6 +7,7 @@ import Photos import UIKit +import Kingfisher class GroupViewController: UIViewController { @@ -59,24 +60,26 @@ class GroupViewController: UIViewController { @IBOutlet weak var cardsCollectionView: UICollectionView! // 그룹 이름들을 담을 변수 생성 - var groups = ["미분류", "SOPT", "그룹명엄청길어요이거", "인하대학교"] + var serverGroups: Groups? + var serverCards: CardsInGroupResponse? + var serverCardsWithBack: Card? override func viewDidLoad() { super.viewDidLoad() registerCell() setUI() // 그룹 리스트 조회 서버 테스트 -// groupListFetchWithAPI(userID: "nada") + groupListFetchWithAPI(userID: "nada") // 그룹 삭제 서버 테스트 // groupDeleteWithAPI(groupID: 1) // 그룹 추가 서버 테스트 -// groupAddWithAPI(groupRequest: GroupAddRequest(userId: "nada", groupName: "나다나다")) +// groupAddWithAPI(groupRequest: GroupAddRequest(userId: "nada", groupName: "대학교")) // 그룹 수정 서버 테스트 // groupEditWithAPI(groupRequest: GroupEditRequest(groupId: 5, groupName: "수정나다")) // 그룹 속 명함 추가 테스트 -// cardAddInGroupWithAPI(cardRequest: CardAddInGroupRequest(cardId: "cardA", userId: "nada", groupId: 1)) +// cardAddInGroupWithAPI(cardRequest: CardAddInGroupRequest(cardId: "cardC", userId: "nada", groupId: 18)) // 그룹 속 명함 조회 테스트 -// cardListInGroupWithAPI(cardListInGroupRequest: CardListInGroupRequest(userId: "nada2", groupId: 3, offset: 0)) +// cardListInGroupWithAPI(cardListInGroupRequest: CardListInGroupRequest(userId: "nada", groupId: 5, offset: 0)) // 명함 검색 테스트 // cardDetailFetchWithAPI(cardID: "cardA") @@ -108,8 +111,9 @@ extension GroupViewController { switch response { case .success(let data): if let group = data as? Groups { -// print(group) - // 그룹 리스트 조회 서버통신 성공했을때 + self.serverGroups = group + self.groupCollectionView.reloadData() + self.cardListInGroupWithAPI(cardListInGroupRequest: CardListInGroupRequest(userId: "nada", groupId: group.groups[0].groupID, offset: 0)) } case .requestErr(let message): print("groupListFetchWithAPI - requestErr: \(message)") @@ -126,11 +130,8 @@ extension GroupViewController { func groupDeleteWithAPI(groupID: Int) { GroupAPI.shared.groupDelete(groupID: groupID) { response in switch response { - case .success(let data): - if let group = data as? Groups { -// print(group) - // 그룹 삭제 서버 통신 성공했을 떄 - } + case .success: + print("groupDeleteWithAPI - success") case .requestErr(let message): print("groupDeleteWithAPI - requestErr: \(message)") case .pathErr: @@ -146,11 +147,8 @@ extension GroupViewController { func groupAddWithAPI(groupRequest: GroupAddRequest) { GroupAPI.shared.groupAdd(groupRequest: groupRequest) { response in switch response { - case .success(let data): - if let group = data as? Groups { -// print(group) - // 그룹 추가 서버 통신 성공했을 떄 - } + case .success: + print("groupAddWithAPI - success") case .requestErr(let message): print("groupAddWithAPI - requestErr: \(message)") case .pathErr: @@ -166,11 +164,8 @@ extension GroupViewController { func groupEditWithAPI(groupRequest: GroupEditRequest) { GroupAPI.shared.groupEdit(groupRequest: groupRequest) { response in switch response { - case .success(let data): - if let group = data as? Groups { -// print(group) - // 그룹 추가 서버 통신 성공했을 떄 - } + case .success: + print("groupEditWithAPI - success") case .requestErr(let message): print("groupEditWithAPI - requestErr: \(message)") case .pathErr: @@ -188,9 +183,8 @@ extension GroupViewController { switch response { case .success(let data): if let cards = data as? CardsInGroupResponse { -// print(group) - // 그룹 추가 서버 통신 성공했을 떄 - print(cards) + self.serverCards = cards + self.cardsCollectionView.reloadData() } case .requestErr(let message): print("cardListInGroupWithAPI - requestErr: \(message)") @@ -208,9 +202,26 @@ extension GroupViewController { CardAPI.shared.cardDetailFetch(cardID: cardID) { response in switch response { case .success(let data): - if let card = data as? Card { -// print(card) - // 통신 성공 + if let card = data as? CardClass { + guard let nextVC = UIStoryboard.init(name: Const.Storyboard.Name.cardDetail, bundle: nil).instantiateViewController(withIdentifier: Const.ViewController.Identifier.cardDetailViewController) as? CardDetailViewController else { return } + + nextVC.cardDataModel = Card(cardID: card.card.cardID, + background: card.card.background, + title: card.card.title, + name: card.card.name, + birthDate: card.card.birthDate, + mbti: card.card.mbti, + instagram: card.card.instagram, + link: card.card.link, + cardDescription: card.card.cardDescription, + isMincho: card.card.isMincho, + isSoju: card.card.isSoju, + isBoomuk: card.card.isBoomuk, + isSauced: card.card.isSauced, + oneTmi: card.card.oneTmi, + twoTmi: card.card.twoTmi, + threeTmi: card.card.threeTmi) + self.navigationController?.pushViewController(nextVC, animated: true) } case .requestErr(let message): print("cardDetailFetchWithAPI - requestErr: \(message)") @@ -223,6 +234,23 @@ extension GroupViewController { } } } + + func cardAddInGroupWithAPI(cardRequest: CardAddInGroupRequest) { + GroupAPI.shared.cardAddInGroup(cardRequest: cardRequest) { response in + switch response { + case .success: + print("postCardAddInGroupWithAPI - success") + case .requestErr(let message): + print("postCardAddInGroupWithAPI - requestErr", message) + case .pathErr: + print("postCardAddInGroupWithAPI - pathErr") + case .serverErr: + print("postCardAddInGroupWithAPI - serverErr") + case .networkFail: + print("postCardAddInGroupWithAPI - networkFail") + } + } + } } // MARK: - UICollectionViewDelegate @@ -235,9 +263,9 @@ extension GroupViewController: UICollectionViewDataSource { func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { switch collectionView { case groupCollectionView: - return groups.count + return serverGroups?.groups.count ?? 0 case cardsCollectionView: - return 5 + return serverCards?.cards.count ?? 0 default: return 0 } @@ -250,7 +278,8 @@ extension GroupViewController: UICollectionViewDataSource { return UICollectionViewCell() } - groupCell.groupName.text = groups[indexPath.row] + groupCell.groupName.text = serverGroups?.groups[indexPath.row].groupName + if indexPath.row == 0 { collectionView.selectItem(at: indexPath, animated: true, scrollPosition: .init()) } @@ -260,6 +289,16 @@ extension GroupViewController: UICollectionViewDataSource { return UICollectionViewCell() } + cardCell.backgroundImageView.updateServerImage(serverCards?.cards[indexPath.row].background ?? "") + cardCell.cardId = serverCards?.cards[indexPath.row].cardID + cardCell.titleLabel.text = serverCards?.cards[indexPath.row].title + cardCell.descriptionLabel.text = serverCards?.cards[indexPath.row].cardDescription + cardCell.userNameLabel.text = serverCards?.cards[indexPath.row].name + cardCell.birthLabel.text = serverCards?.cards[indexPath.row].birthDate + cardCell.mbtiLabel.text = serverCards?.cards[indexPath.row].mbti + cardCell.instagramIDLabel.text = serverCards?.cards[indexPath.row].instagram + cardCell.lineURLLabel.text = serverCards?.cards[indexPath.row].link + return cardCell default: return UICollectionViewCell() @@ -269,11 +308,9 @@ extension GroupViewController: UICollectionViewDataSource { func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { switch collectionView { case groupCollectionView: - print(indexPath.row) + cardListInGroupWithAPI(cardListInGroupRequest: CardListInGroupRequest(userId: "nada", groupId: serverGroups?.groups[indexPath.row].groupID ?? 0, offset: 0)) case cardsCollectionView: - guard let nextVC = UIStoryboard.init(name: Const.Storyboard.Name.cardDetail, bundle: nil).instantiateViewController(withIdentifier: Const.ViewController.Identifier.cardDetailViewController) as? CardDetailViewController else { return } - - navigationController?.pushViewController(nextVC, animated: true) + cardDetailFetchWithAPI(cardID: serverCards?.cards[indexPath.row].cardID ?? "") default: print(indexPath.row) } @@ -289,8 +326,8 @@ extension GroupViewController: UICollectionViewDelegateFlowLayout { switch collectionView { case groupCollectionView: - if groups[indexPath.row].count > 4 { - width = CGFloat(groups[indexPath.row].count) * 16 + if serverGroups?.groups[indexPath.row].groupName.count ?? 0 > 4 { + width = CGFloat(serverGroups?.groups[indexPath.row].groupName.count ?? 0) * 16 } else { width = 62 } @@ -316,8 +353,6 @@ extension GroupViewController: UICollectionViewDelegateFlowLayout { } func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat { switch collectionView { - case groupCollectionView: - return 5 case cardsCollectionView: return collectionView.frame.size.width * 15/327 default: @@ -326,6 +361,8 @@ extension GroupViewController: UICollectionViewDelegateFlowLayout { } func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat { switch collectionView { + case groupCollectionView: + return 5 case cardsCollectionView: return collectionView.frame.size.width * 15/327 default: diff --git a/NADA-iOS-forRelease/Sources/ViewControllers/Main/FrontViewController.swift b/NADA-iOS-forRelease/Sources/ViewControllers/Main/FrontViewController.swift index 34d557a0..1346b8d7 100644 --- a/NADA-iOS-forRelease/Sources/ViewControllers/Main/FrontViewController.swift +++ b/NADA-iOS-forRelease/Sources/ViewControllers/Main/FrontViewController.swift @@ -26,9 +26,9 @@ class FrontViewController: UIViewController { isSoju: true, isBoomuk: true, isSauced: true, - oneTMI: "첫번째", - twoTMI: "두번째", - thirdTMI: "세번째세번째세번째"), + oneTmi: "첫번째", + twoTmi: "두번째", + threeTmi: "세번째세번째세번째"), Card(cardID: "card", background: "card", title: "SOPT 명함", @@ -42,9 +42,9 @@ class FrontViewController: UIViewController { isSoju: true, isBoomuk: true, isSauced: true, - oneTMI: "첫번째", - twoTMI: "두번째", - thirdTMI: "세번째세번째세번째")] + oneTmi: "첫번째", + twoTmi: "두번째", + threeTmi: "세번째세번째세번째")] // var cardDataList: [Card]? = [] diff --git a/NADA-iOS-forRelease/Sources/ViewControllers/TeamNADA/TeamNADAViewController.swift b/NADA-iOS-forRelease/Sources/ViewControllers/TeamNADA/TeamNADAViewController.swift index 8709f776..79bc6fa2 100644 --- a/NADA-iOS-forRelease/Sources/ViewControllers/TeamNADA/TeamNADAViewController.swift +++ b/NADA-iOS-forRelease/Sources/ViewControllers/TeamNADA/TeamNADAViewController.swift @@ -25,9 +25,9 @@ class TeamNADAViewController: UIViewController { isSoju: false, isBoomuk: false, isSauced: true, - oneTMI: "먹는거 잠자는거 좋아해요", - twoTMI: "일벌리기도 좋아하는데 체력이..", - thirdTMI: "내가 바로 나다 기획자😎"), + oneTmi: "먹는거 잠자는거 좋아해요", + twoTmi: "일벌리기도 좋아하는데 체력이..", + threeTmi: "내가 바로 나다 기획자😎"), Card(cardID: "card", background: "imgChae", title: "NADA", @@ -41,9 +41,9 @@ class TeamNADAViewController: UIViewController { isSoju: true, isBoomuk: false, isSauced: false, - oneTMI: "카톡 임티 62개 + 이모티콘 플러스 구독", - twoTMI: "빵, 디저트 좋아해요 🥞🍞🍰🍦🍩🍪", - thirdTMI: "ENFP와 ENFJ 그 사이!"), + oneTmi: "카톡 임티 62개 + 이모티콘 플러스 구독", + twoTmi: "빵, 디저트 좋아해요 🥞🍞🍰🍦🍩🍪", + threeTmi: "ENFP와 ENFJ 그 사이!"), Card(cardID: "card", background: "imgHyun", title: "NADA", @@ -57,9 +57,9 @@ class TeamNADAViewController: UIViewController { isSoju: false, isBoomuk: true, isSauced: false, - oneTMI: "악으로 깡으로 악깡규", - twoTMI: "후드티 주세요 후드티", - thirdTMI: "스트로베리 문 한스쿱"), + oneTmi: "악으로 깡으로 악깡규", + twoTmi: "후드티 주세요 후드티", + threeTmi: "스트로베리 문 한스쿱"), Card(cardID: "card", background: "imgYi", title: "NADA", @@ -73,9 +73,9 @@ class TeamNADAViewController: UIViewController { isSoju: true, isBoomuk: false, isSauced: false, - oneTMI: "노는게제일좋아 친구들 모..이면 낯가려요", - twoTMI: "축구야구가좋아요 스포츠좋아", - thirdTMI: "난 슬플때 컵을 쌓아..."), + oneTmi: "노는게제일좋아 친구들 모..이면 낯가려요", + twoTmi: "축구야구가좋아요 스포츠좋아", + threeTmi: "난 슬플때 컵을 쌓아..."), Card(cardID: "card", background: "imgMin", title: "NADA", @@ -89,9 +89,9 @@ class TeamNADAViewController: UIViewController { isSoju: false, isBoomuk: false, isSauced: false, - oneTMI: "나다 만들고 국방의 의무", - twoTMI: "믿기지 않겠지만, 전 야구선수 출신", - thirdTMI: "천안-서울 쉽지않네;;"), + oneTmi: "나다 만들고 국방의 의무", + twoTmi: "믿기지 않겠지만, 전 야구선수 출신", + threeTmi: "천안-서울 쉽지않네;;"), Card(cardID: "card", background: "imgYe", title: "NADA", @@ -105,9 +105,9 @@ class TeamNADAViewController: UIViewController { isSoju: true, isBoomuk: false, isSauced: true, - oneTMI: "예옹. 에옹. 야옹. 에원. 에엉. 맘가는 대로..", - twoTMI: "제법 귀엽다.", - thirdTMI: "")] + oneTmi: "예옹. 에옹. 야옹. 에원. 에엉. 맘가는 대로..", + twoTmi: "제법 귀엽다.", + threeTmi: "")] // MARK: - @IBOutlet Properties @IBOutlet weak var cardSwiper: VerticalCardSwiper!