Skip to content

Commit

Permalink
Merge pull request #184 from OMZigak/fix/#181-readyBeforeAPI
Browse files Browse the repository at this point in the history
[feat] 내 모임 화면 서비스 타입 구현 및 디자인 QA 반영
  • Loading branch information
mmaybei committed Jul 15, 2024
2 parents 79e0f40 + 6980e48 commit 0cc3bc4
Show file tree
Hide file tree
Showing 11 changed files with 107 additions and 73 deletions.
44 changes: 22 additions & 22 deletions KkuMulKum.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -65,16 +65,16 @@
78BD61272C446A97005752FD /* LoginTargetType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78BD61262C446A97005752FD /* LoginTargetType.swift */; };
78BD612B2C4550A6005752FD /* Bundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78BD612A2C4550A6005752FD /* Bundle.swift */; };
A3DD9C3D2C41BAD000E58A13 /* MeetingTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3DD9C322C41BAD000E58A13 /* MeetingTableViewCell.swift */; };
A3DD9C3E2C41BAD000E58A13 /* MeetingDummyModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3DD9C342C41BAD000E58A13 /* MeetingDummyModel.swift */; };
A3DD9C3F2C41BAD000E58A13 /* MeetingListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3DD9C362C41BAD000E58A13 /* MeetingListView.swift */; };
A3DD9C402C41BAD000E58A13 /* MeetingListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3DD9C382C41BAD000E58A13 /* MeetingListViewController.swift */; };
A3DD9C412C41BAD000E58A13 /* MeetingListViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3DD9C3A2C41BAD000E58A13 /* MeetingListViewModel.swift */; };
A3DD9C5A2C43F99800E58A13 /* SetReadyInfoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3DD9C592C43F99700E58A13 /* SetReadyInfoView.swift */; };
A3DD9C5C2C43F9A800E58A13 /* SetReadyInfoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3DD9C5B2C43F9A800E58A13 /* SetReadyInfoViewController.swift */; };
A3DD9C5F2C441F8E00E58A13 /* SetReadyInfoViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3DD9C5E2C441F8E00E58A13 /* SetReadyInfoViewModel.swift */; };
A3DD9C622C455E3300E58A13 /* MeetingListService.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3DD9C612C455E3300E58A13 /* MeetingListService.swift */; };
A3FB184D2C3BF45F001483E5 /* MakeMeetingsRequestModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3FB184C2C3BF45F001483E5 /* MakeMeetingsRequestModel.swift */; };
A3FB184F2C3BF4BC001483E5 /* MakeMeetingsResponseModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3FB184E2C3BF4BB001483E5 /* MakeMeetingsResponseModel.swift */; };
A3FB18512C3BF531001483E5 /* RegisterMeetingsResponseModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3FB18502C3BF531001483E5 /* RegisterMeetingsResponseModel.swift */; };
A3FB18512C3BF531001483E5 /* RegisterMeetingsResquestModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3FB18502C3BF531001483E5 /* RegisterMeetingsResquestModel.swift */; };
A3FB18572C3BF704001483E5 /* MeetingListResponseModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3FB18562C3BF704001483E5 /* MeetingListResponseModel.swift */; };
A3FB18592C3BF77D001483E5 /* MeetingInfoResponseModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3FB18582C3BF77D001483E5 /* MeetingInfoResponseModel.swift */; };
A3FB185B2C3BF7DF001483E5 /* MeetingMembersResponseModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3FB185A2C3BF7DF001483E5 /* MeetingMembersResponseModel.swift */; };
Expand Down Expand Up @@ -211,16 +211,16 @@
78BD61262C446A97005752FD /* LoginTargetType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginTargetType.swift; sourceTree = "<group>"; };
78BD612A2C4550A6005752FD /* Bundle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Bundle.swift; sourceTree = "<group>"; };
A3DD9C322C41BAD000E58A13 /* MeetingTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MeetingTableViewCell.swift; sourceTree = "<group>"; };
A3DD9C342C41BAD000E58A13 /* MeetingDummyModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MeetingDummyModel.swift; sourceTree = "<group>"; };
A3DD9C362C41BAD000E58A13 /* MeetingListView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MeetingListView.swift; sourceTree = "<group>"; };
A3DD9C382C41BAD000E58A13 /* MeetingListViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MeetingListViewController.swift; sourceTree = "<group>"; };
A3DD9C3A2C41BAD000E58A13 /* MeetingListViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MeetingListViewModel.swift; sourceTree = "<group>"; };
A3DD9C592C43F99700E58A13 /* SetReadyInfoView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SetReadyInfoView.swift; sourceTree = "<group>"; };
A3DD9C5B2C43F9A800E58A13 /* SetReadyInfoViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SetReadyInfoViewController.swift; sourceTree = "<group>"; };
A3DD9C5E2C441F8E00E58A13 /* SetReadyInfoViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SetReadyInfoViewModel.swift; sourceTree = "<group>"; };
A3DD9C612C455E3300E58A13 /* MeetingListService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeetingListService.swift; sourceTree = "<group>"; };
A3FB184C2C3BF45F001483E5 /* MakeMeetingsRequestModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MakeMeetingsRequestModel.swift; sourceTree = "<group>"; };
A3FB184E2C3BF4BB001483E5 /* MakeMeetingsResponseModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MakeMeetingsResponseModel.swift; sourceTree = "<group>"; };
A3FB18502C3BF531001483E5 /* RegisterMeetingsResponseModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RegisterMeetingsResponseModel.swift; sourceTree = "<group>"; };
A3FB18502C3BF531001483E5 /* RegisterMeetingsResquestModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RegisterMeetingsResquestModel.swift; sourceTree = "<group>"; };
A3FB18562C3BF704001483E5 /* MeetingListResponseModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeetingListResponseModel.swift; sourceTree = "<group>"; };
A3FB18582C3BF77D001483E5 /* MeetingInfoResponseModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeetingInfoResponseModel.swift; sourceTree = "<group>"; };
A3FB185A2C3BF7DF001483E5 /* MeetingMembersResponseModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeetingMembersResponseModel.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -568,6 +568,7 @@
isa = PBXGroup;
children = (
A3DD9C362C41BAD000E58A13 /* MeetingListView.swift */,
A3DD9C322C41BAD000E58A13 /* MeetingTableViewCell.swift */,
);
path = View;
sourceTree = "<group>";
Expand All @@ -591,11 +592,9 @@
A3DD9C3C2C41BAD000E58A13 /* MeetingList */ = {
isa = PBXGroup;
children = (
A3DD9C332C41BAD000E58A13 /* Cell */,
A3DD9C352C41BAD000E58A13 /* Model */,
A3DD9C372C41BAD000E58A13 /* View */,
A3DD9C392C41BAD000E58A13 /* ViewController */,
A3DD9C3B2C41BAD000E58A13 /* ViewModel */,
A3DD9C392C41BAD000E58A13 /* ViewController */,
A3DD9C372C41BAD000E58A13 /* View */,
);
path = MeetingList;
sourceTree = "<group>";
Expand All @@ -608,6 +607,14 @@
path = ViewModel;
sourceTree = "<group>";
};
A3DD9C642C45B30600E58A13 /* Service */ = {
isa = PBXGroup;
children = (
A3DD9C612C455E3300E58A13 /* MeetingListService.swift */,
);
path = Service;
sourceTree = "<group>";
};
DD3976692C41769900E2A4C4 /* ViewModel */ = {
isa = PBXGroup;
children = (
Expand Down Expand Up @@ -652,10 +659,9 @@
isa = PBXGroup;
children = (
DD3976762C41C2AD00E2A4C4 /* ViewModel */,
DD3976782C41C2AD00E2A4C4 /* Cell */,
DD39767A2C41C2AD00E2A4C4 /* Model */,
DD39767C2C41C2AD00E2A4C4 /* View */,
DD3976812C41C2AD00E2A4C4 /* ViewController */,
DD39767C2C41C2AD00E2A4C4 /* View */,
DD39767A2C41C2AD00E2A4C4 /* Model */,
);
path = Home;
sourceTree = "<group>";
Expand All @@ -668,14 +674,6 @@
path = ViewModel;
sourceTree = "<group>";
};
DD3976782C41C2AD00E2A4C4 /* Cell */ = {
isa = PBXGroup;
children = (
DD3976792C41C2AD00E2A4C4 /* UpcomingPromiseCollecitonViewCell.swift */,
);
path = Cell;
sourceTree = "<group>";
};
DD39767A2C41C2AD00E2A4C4 /* Model */ = {
isa = PBXGroup;
children = (
Expand All @@ -691,6 +689,7 @@
DD39767E2C41C2AD00E2A4C4 /* TodayPromiseView.swift */,
DD39767F2C41C2AD00E2A4C4 /* UpcomingEmptyView.swift */,
DD3976802C41C2AD00E2A4C4 /* TodayEmptyView.swift */,
DD3976792C41C2AD00E2A4C4 /* UpcomingPromiseCollecitonViewCell.swift */,
);
path = View;
sourceTree = "<group>";
Expand Down Expand Up @@ -1069,6 +1068,7 @@
isa = PBXGroup;
children = (
78BD612C2C455680005752FD /* Bundle */,
A3DD9C642C45B30600E58A13 /* Service */,
DEBA03302C3C2972002ED8F2 /* ViewController.swift */,
DD39768B2C41C36B00E2A4C4 /* Color.xcassets */,
78B928742C29402E006D9942 /* Assets.xcassets */,
Expand Down Expand Up @@ -1256,7 +1256,7 @@
children = (
A3FB184C2C3BF45F001483E5 /* MakeMeetingsRequestModel.swift */,
A3FB184E2C3BF4BB001483E5 /* MakeMeetingsResponseModel.swift */,
A3FB18502C3BF531001483E5 /* RegisterMeetingsResponseModel.swift */,
A3FB18502C3BF531001483E5 /* RegisterMeetingsResquestModel.swift */,
A3FB18562C3BF704001483E5 /* MeetingListResponseModel.swift */,
A3FB18582C3BF77D001483E5 /* MeetingInfoResponseModel.swift */,
A3FB185A2C3BF7DF001483E5 /* MeetingMembersResponseModel.swift */,
Expand Down Expand Up @@ -1467,7 +1467,7 @@
78BD61232C440AD5005752FD /* AuthService.swift in Sources */,
DD931B722C3DA92700526452 /* EnterReadyInfoButtonView.swift in Sources */,
DD41BEFF2C41DAA40095A068 /* TardyEmptyView.swift in Sources */,
A3FB18512C3BF531001483E5 /* RegisterMeetingsResponseModel.swift in Sources */,
A3FB18512C3BF531001483E5 /* RegisterMeetingsResquestModel.swift in Sources */,
789AD4B32C3C0093002E2688 /* SocialLoginResponseModel.swift in Sources */,
DD43937F2C41357800EC1799 /* InviteCodeViewModel.swift in Sources */,
DE9E188B2C3BC92500DB76B4 /* EmptyModel.swift in Sources */,
Expand Down Expand Up @@ -1514,7 +1514,6 @@
DE254AAE2C31193600A4015E /* UIFont+.swift in Sources */,
DE6D4D152C3F14D80005584B /* InvitationCodePopUpViewController.swift in Sources */,
DD4393792C412F4500EC1799 /* JoinButtonView.swift in Sources */,
A3DD9C3E2C41BAD000E58A13 /* MeetingDummyModel.swift in Sources */,
DD3976832C41C2AD00E2A4C4 /* HomeViewModel.swift in Sources */,
DD41BF012C41DE4F0095A068 /* TardyCollectionViewCell.swift in Sources */,
DE9E189A2C3BCCBE00DB76B4 /* UtilsTemp.swift in Sources */,
Expand Down Expand Up @@ -1553,6 +1552,7 @@
DE9E18892C3BC91000DB76B4 /* ResponseBodyDTO.swift in Sources */,
DD931B6B2C3D9EBB00526452 /* ReadyStatusView.swift in Sources */,
DD3976682C41769400E2A4C4 /* CreateMeetingViewModel.swift in Sources */,
A3DD9C622C455E3300E58A13 /* MeetingListService.swift in Sources */,
A3DD9C3D2C41BAD000E58A13 /* MeetingTableViewCell.swift in Sources */,
DD39766B2C41995A00E2A4C4 /* FinishCreateNavigationView.swift in Sources */,
DD3072202C3C0D4500416D9F /* MyReadyStatusResponseModel.swift in Sources */,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
{
"originHash" : "6f65ada45f770fae6123df6430e807e91049442b2f17b5aa0f91df3077eedc5a",
"pins" : [
{
"identity" : "abseil-cpp-binary",
Expand Down Expand Up @@ -174,7 +175,7 @@
{
"identity" : "rxswift",
"kind" : "remoteSourceControl",
"location" : "https://github.com/ReactiveX/RxSwift",
"location" : "https://github.com/ReactiveX/RxSwift.git",
"state" : {
"revision" : "b06a8c8596e4c3e8e7788e08e720e3248563ce6a",
"version" : "6.7.1"
Expand Down Expand Up @@ -217,5 +218,5 @@
}
}
],
"version" : 2
"version" : 3
}
29 changes: 29 additions & 0 deletions KkuMulKum/Resource/Service/MeetingListService.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
//
// MeetingListService.swift
// KkuMulKum
//
// Created by 예삐 on 7/15/24.
//

import Foundation

protocol MeetingListServiceType {
func fetchMeetingList() -> MeetingListModel?
}

final class MockMeetingListService: MeetingListServiceType {
func fetchMeetingList() -> MeetingListModel? {
let mockData = MeetingListModel(
count: 6,
meetings: [
Meeting(id: 1, name: "꾸물이들", memberCount: 14),
Meeting(id: 2, name: "아요레디", memberCount: 28),
Meeting(id: 3, name: "안드가자", memberCount: 26),
Meeting(id: 4, name: "난이서버", memberCount: 30),
Meeting(id: 5, name: "캔디팟", memberCount: 24),
Meeting(id: 6, name: "열기팟", memberCount: 24)
]
)
return mockData
}
}
5 changes: 4 additions & 1 deletion KkuMulKum/Source/Core/MainTabBarController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,10 @@ final class MainTabBarController: UITabBarController {
$0.tabBarItem.image = .iconHome
}

let meetingListViewController: MeetingListViewController = MeetingListViewController().then {
let meetingListViewController = MeetingListViewController(
viewModel: MeetingListViewModel(
service: MockMeetingListService()
)).then {
$0.tabBarItem.title = "내 모임"
$0.tabBarItem.image = .iconGroup
}
Expand Down
29 changes: 0 additions & 29 deletions KkuMulKum/Source/MeetingList/Model/MeetingDummyModel.swift

This file was deleted.

8 changes: 3 additions & 5 deletions KkuMulKum/Source/MeetingList/View/MeetingListView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,7 @@ final class MeetingListView: BaseView {

private let header = UIView()

private let infoLabel = UILabel().then {
$0.setText("꾸물리안이 가입한 모임은\n총 3개예요!", style: .head01, color: .gray8)
}
let infoLabel = UILabel()

let addButton = UIButton().then {
$0.backgroundColor = .green2
Expand Down Expand Up @@ -65,7 +63,7 @@ final class MeetingListView: BaseView {
}

addButton.snp.makeConstraints {
$0.top.equalTo(infoLabel.snp.bottom).offset(16)
$0.top.equalTo(infoLabel.snp.bottom).offset(24)
$0.leading.trailing.equalToSuperview()
$0.height.equalTo(Screen.height(48))
}
Expand All @@ -83,7 +81,7 @@ final class MeetingListView: BaseView {
header.snp.makeConstraints {
$0.top.equalToSuperview()
$0.width.equalTo(UIScreen.main.bounds.width-40)
$0.height.equalTo(Screen.height(170))
$0.height.equalTo(Screen.height(174))
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ final class MeetingTableViewCell: BaseTableViewCell {
override func setupAutoLayout() {
cellView.snp.makeConstraints {
$0.top.leading.trailing.equalToSuperview()
$0.height.equalTo(76)
$0.height.equalTo(Screen.height(76))
}

nameLabel.snp.makeConstraints {
Expand All @@ -62,8 +62,8 @@ final class MeetingTableViewCell: BaseTableViewCell {
// MARK: - Data Bind

extension MeetingTableViewCell {
func dataBind(_ contentData: MeetingDummyModel) {
func dataBind(_ contentData: Meeting) {
nameLabel.setText(contentData.name, style: .body03, color: .gray8)
countLabel.setText("\(contentData.count)명 참여 중", style: .caption02, color: .gray5)
countLabel.setText("\(contentData.memberCount)명 참여 중", style: .caption02, color: .gray5)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,24 @@ class MeetingListViewController: BaseViewController {
// MARK: - Property

private let rootView = MeetingListView()
private let viewModel = MeetingListViewModel()

private let viewModel: MeetingListViewModel


// MARK: - Initializer

init(viewModel: MeetingListViewModel) {
self.viewModel = viewModel
super.init(nibName: nil, bundle: nil)
}

required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}


// MARK: - LifeCycle

override func loadView() {
self.view = rootView
}
Expand All @@ -32,7 +45,7 @@ class MeetingListViewController: BaseViewController {
register()

updateMeetingList()
viewModel.dummy()
viewModel.requestMeetingList()
}


Expand All @@ -49,31 +62,49 @@ class MeetingListViewController: BaseViewController {
rootView.tableView.dataSource = self
}

private func updateInfoLabel() {

}

private func updateMeetingList() {
viewModel.meetingListData.bind { [weak self] _ in
viewModel.meetingList.bind { [weak self] _ in
DispatchQueue.main.async {
self?.rootView.tableView.reloadData()
self?.rootView.infoLabel.setText(
"꾸물리안이 가입한 모임은\n\(self?.viewModel.meetingList.value?.count ?? 0)개예요!",
style: .head01,
color: .gray8
)
}
}
}
}


// MARK: - UITableViewDelegate

extension MeetingListViewController: UITableViewDelegate {
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return Screen.height(88)
}
}


// MARK: - UITableViewDataSource

extension MeetingListViewController: UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return viewModel.meetingListData.value.count
return viewModel.meetingList.value?.count ?? 0
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cell = rootView.tableView.dequeueReusableCell(
withIdentifier: MeetingTableViewCell.reuseIdentifier, for: indexPath
) as? MeetingTableViewCell else { return UITableViewCell() }
cell.dataBind(viewModel.meetingListData.value[indexPath.item])
if let data = viewModel.meetingList.value?.meetings[indexPath.item] {
cell.dataBind(data)
}
//cell.dataBind(viewModel.meetingList.value?[indexPath.item])
cell.selectionStyle = .none
return cell
}
Expand Down
Loading

0 comments on commit 0cc3bc4

Please sign in to comment.