Skip to content

Commit 8342b71

Browse files
committed
チャット中の相手を取得し表示する
1 parent 8316d54 commit 8342b71

File tree

4 files changed

+98
-3
lines changed

4 files changed

+98
-3
lines changed

chat-iOS/Views/SelectChat/SelectChatModel.swift

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,63 @@
55
// Created by 松木周 on 2020/07/15.
66
//
77

8-
import Foundation
8+
import Firebase
99

1010
protocol SelectChatModelProtocol {
1111
var presenter: SelectChatModelOutput! { get set }
12+
func setUpFirestore()
13+
func fetchCurrentChatRoom()
1214
}
1315

1416
protocol SelectChatModelOutput: class {
17+
func successFetchCurrentChatRooms(currentChatRooms rooms: [Room])
18+
func onError(error: Error?)
1519
}
1620

1721
final class SelectChatModel: SelectChatModelProtocol {
1822

1923
weak var presenter: SelectChatModelOutput!
24+
private var firestore: Firestore!
25+
private var listener: ListenerRegistration?
26+
27+
init() {
28+
self.setUpFirestore()
29+
}
30+
31+
deinit {
32+
listener?.remove()
33+
}
34+
35+
func setUpFirestore() {
36+
self.firestore = Firestore.firestore()
37+
let settings = FirestoreSettings()
38+
self.firestore.settings = settings
39+
}
40+
41+
func fetchCurrentChatRoom() {
42+
43+
guard let curretnUserId = Auth.auth().currentUser?.uid else { return }
44+
45+
self.listener = self.firestore.collection("rooms").whereField("members", arrayContains: curretnUserId).addSnapshotListener { [weak self] (documentSnapshot, error) in
46+
47+
if let error = error {
48+
self?.presenter.onError(error: error)
49+
return
50+
}
51+
52+
guard let documents = documentSnapshot?.documents else {
53+
print("The document doesn't exist.")
54+
return
55+
}
56+
57+
let rooms = documents.compactMap { queryDocumentSnapshot -> Room? in
58+
return try? queryDocumentSnapshot.data(as: Room.self)
59+
}
60+
61+
self?.presenter.successFetchCurrentChatRooms(currentChatRooms: rooms)
62+
}
63+
64+
}
65+
2066
}
67+

chat-iOS/Views/SelectChat/SelectChatTableViewCell.swift

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,5 +24,11 @@ class SelectChatTableViewCell: UITableViewCell {
2424

2525
// Configure the view for the selected state
2626
}
27+
28+
func generateCell(withRoom room: Room) {
29+
userNameLabel.text = room.name
30+
lastMessageLabel.text = room.name
31+
//TODO:- Storageから画像を取得して表示する
32+
}
2733

2834
}

chat-iOS/Views/SelectChat/SelectChatViewController.swift

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,14 @@ class SelectChatViewController: UIViewController {
1212
@IBOutlet weak var selectChatTableView: UITableView!
1313

1414
private let reuseCellId = "SelectChatTableViewCell"
15+
private var currentChatRooms: [Room] = []
1516
private var presenter: SelectChatViewPresenterProtocol!
1617

1718
override func viewDidLoad() {
1819
super.viewDidLoad()
1920

2021
setupSelectChatTableView()
22+
self.presenter.didLoadViewController()
2123
}
2224

2325
func inject(with presenter: SelectChatViewPresenterProtocol) {
@@ -44,17 +46,30 @@ extension SelectChatViewController: UITableViewDelegate {
4446
extension SelectChatViewController: UITableViewDataSource {
4547

4648
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
47-
return 10
49+
return currentChatRooms.count
4850
}
4951

5052
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
5153
let cell = tableView.dequeueReusableCell(withIdentifier: reuseCellId) as! SelectChatTableViewCell
52-
54+
cell.generateCell(withRoom: currentChatRooms[indexPath.row])
5355
return cell
5456
}
5557

5658
}
5759

5860
extension SelectChatViewController: SelectChatViewPresenterOutput {
61+
62+
func setCurrentChatUsers() {
63+
self.currentChatRooms = self.presenter.currentChatRooms
64+
self.selectChatTableView.reloadData()
65+
}
66+
67+
func showAlert(withMessage message: String) {
68+
let alert = UIAlertController(title: "エラーが発生しました", message: message, preferredStyle: .alert)
69+
let defaultAction: UIAlertAction = UIAlertAction(title: "OK", style: .default, handler: nil)
70+
71+
alert.addAction(defaultAction)
72+
present(alert, animated: false, completion: nil)
73+
}
5974

6075
}

chat-iOS/Views/SelectChat/SelectChatViewPresenter.swift

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,45 @@ import Foundation
99

1010
protocol SelectChatViewPresenterProtocol {
1111
var view: SelectChatViewPresenterOutput! { get set }
12+
var currentChatRooms: [Room] { get }
13+
func didLoadViewController()
1214
}
1315

1416
protocol SelectChatViewPresenterOutput: class {
17+
func setCurrentChatUsers()
18+
func showAlert(withMessage message: String)
1519
}
1620

1721
final class SelectChatViewPresenter: SelectChatViewPresenterProtocol, SelectChatModelOutput {
1822

1923
weak var view: SelectChatViewPresenterOutput!
2024
private var model: SelectChatModelProtocol
2125

26+
private(set) var _currentChatRooms: [Room] = []
27+
2228
init(model: SelectChatModelProtocol) {
2329
self.model = model
30+
self.model.presenter = self
31+
}
32+
33+
var currentChatRooms: [Room] {
34+
return _currentChatRooms
35+
}
36+
37+
func didLoadViewController() {
38+
self.model.fetchCurrentChatRoom()
39+
}
40+
41+
func successFetchCurrentChatRooms(currentChatRooms rooms: [Room]) {
42+
self._currentChatRooms = rooms
43+
self.view.setCurrentChatUsers()
44+
}
45+
46+
func onError(error: Error?) {
47+
DispatchQueue.main.async { [weak self] in
48+
let message = error?.localizedDescription ?? "チャット相手を取得できませんでした"
49+
self?.view.showAlert(withMessage: message)
50+
}
2451
}
2552

2653
}

0 commit comments

Comments
 (0)