Skip to content

Commit

Permalink
Featrue/likeview (#28)
Browse files Browse the repository at this point in the history
* discover 상단 터치 이슈 수정

* Like 관련 API, Model 추가

* like 버튼 동작 추가 (터치이슈 있음)

* message cell subview들 contentview에 추가하도록 변경

* Like 모델 임시수정.
  • Loading branch information
wan088 authored Jan 5, 2021
1 parent a8a3b82 commit 21322be
Show file tree
Hide file tree
Showing 5 changed files with 178 additions and 82 deletions.
8 changes: 8 additions & 0 deletions Dear-World/Dear-World.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@
1263E0D425A1F5F800E3F121 /* Message.API.MessageCount.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1263E0D325A1F5F800E3F121 /* Message.API.MessageCount.swift */; };
128313E32598A08700BDF8A3 /* Message.swift in Sources */ = {isa = PBXBuildFile; fileRef = 128313E22598A08700BDF8A3 /* Message.swift */; };
128313EE2598A14E00BDF8A3 /* Message.API.Messages.swift in Sources */ = {isa = PBXBuildFile; fileRef = 128313ED2598A14E00BDF8A3 /* Message.API.Messages.swift */; };
12A05EFF25A353700089EF1C /* Message.API.Like.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12A05EFE25A353700089EF1C /* Message.API.Like.swift */; };
12A05F0425A3542F0089EF1C /* Message.Model.Like.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12A05F0325A3542F0089EF1C /* Message.Model.Like.swift */; };
3902F1052596F26D00A3DF8C /* CheeringMapViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3902F1042596F26D00A3DF8C /* CheeringMapViewController.swift */; };
3902F1132597049D00A3DF8C /* SendMessageViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3902F1122597049D00A3DF8C /* SendMessageViewController.swift */; };
3902F118259704AF00A3DF8C /* AboutViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3902F117259704AF00A3DF8C /* AboutViewController.swift */; };
Expand Down Expand Up @@ -113,6 +115,8 @@
1263E0D325A1F5F800E3F121 /* Message.API.MessageCount.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Message.API.MessageCount.swift; sourceTree = "<group>"; };
128313E22598A08700BDF8A3 /* Message.swift */ = {isa = PBXFileReference; indentWidth = 2; lastKnownFileType = sourcecode.swift; name = Message.swift; path = "Dear-World/Source/Domain/Message/Message.swift"; sourceTree = SOURCE_ROOT; tabWidth = 2; };
128313ED2598A14E00BDF8A3 /* Message.API.Messages.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Message.API.Messages.swift; sourceTree = "<group>"; };
12A05EFE25A353700089EF1C /* Message.API.Like.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Message.API.Like.swift; sourceTree = "<group>"; };
12A05F0325A3542F0089EF1C /* Message.Model.Like.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Message.Model.Like.swift; sourceTree = "<group>"; };
3902F1042596F26D00A3DF8C /* CheeringMapViewController.swift */ = {isa = PBXFileReference; indentWidth = 2; lastKnownFileType = sourcecode.swift; path = CheeringMapViewController.swift; sourceTree = "<group>"; tabWidth = 2; };
3902F1122597049D00A3DF8C /* SendMessageViewController.swift */ = {isa = PBXFileReference; indentWidth = 2; lastKnownFileType = sourcecode.swift; path = SendMessageViewController.swift; sourceTree = "<group>"; tabWidth = 2; };
3902F117259704AF00A3DF8C /* AboutViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AboutViewController.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -240,6 +244,7 @@
3971EB36259A9C550084E6DC /* Message.API.SendMessage.swift */,
1263E09625A1C87400E3F121 /* Message.API.Countries.swift */,
1263E0D325A1F5F800E3F121 /* Message.API.MessageCount.swift */,
12A05EFE25A353700089EF1C /* Message.API.Like.swift */,
);
path = API;
sourceTree = "<group>";
Expand All @@ -251,6 +256,7 @@
3914D9E5259F3FA1009765B0 /* Message.Model.Messages.swift */,
1263E09B25A1C8DD00E3F121 /* Message.Model.Countries.swift */,
1263E0CE25A1F5ED00E3F121 /* Message.Model.MessageCount.swift */,
12A05F0325A3542F0089EF1C /* Message.Model.Like.swift */,
);
path = Model;
sourceTree = "<group>";
Expand Down Expand Up @@ -762,6 +768,7 @@
395826332596E693007325AB /* Logger.swift in Sources */,
1263E09725A1C87400E3F121 /* Message.API.Countries.swift in Sources */,
39F0C19025987A2B00A7001F /* ServiceAPI.swift in Sources */,
12A05EFF25A353700089EF1C /* Message.API.Like.swift in Sources */,
3958257B25948E41007325AB /* AppDelegate.swift in Sources */,
39F465822597811900621327 /* CheerButton.swift in Sources */,
128313EE2598A14E00BDF8A3 /* Message.API.Messages.swift in Sources */,
Expand All @@ -774,6 +781,7 @@
39658F8D259AD9900050D180 /* SplashViewController.swift in Sources */,
3971EB29259A7D720084E6DC /* SendMessageReactor.swift in Sources */,
1263E0D425A1F5F800E3F121 /* Message.API.MessageCount.swift in Sources */,
12A05F0425A3542F0089EF1C /* Message.Model.Like.swift in Sources */,
39F0C19B2598860100A7001F /* ResponseWrapper.swift in Sources */,
39E9F7E625A1C80300BC2CC2 /* WorldMap.swift in Sources */,
3971EB3C259A9C860084E6DC /* Message.Model.SendMessage.swift in Sources */,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
//
// Message.API.Like.swift
// Dear-World
//
// Created by rookie.w on 2021/01/04.
//

import Alamofire
import Foundation

extension Message.API {
struct Like: ServiceAPI {
typealias Response = Message.Model.Like

// MARK: Parameters
private let messageId: Int

var method: HTTPMethod { .post }
var path: String { "api/v1/messages/\(messageId)/like" }
var parameters: [String: Any?]? { nil }

init(messageId: Int) {
self.messageId = messageId
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
//
// Message.Model.Like.swift
// Dear-World
//
// Created by rookie.w on 2021/01/04.
//

import Foundation

extension Message.Model {
struct Like: Decodable {
let like: Bool
//FIXME :왜 평범한 메세지랑 이모지부분이 다른지 확인 후 수정할 것
let data: TmpMessage
}
}
extension Message.Model {
struct TmpMessage: Decodable {
let id: Int
// let TmpUser: User
let isLiked: Bool
let likeCount: Int
let content: String
let createdAt: String

enum CodingKeys: String, CodingKey {
case id
// case TmpUser = "anonymousUser"
case isLiked = "like"
case likeCount
case content
case createdAt
}
}

struct TmpUUser: Decodable {
let id: Int
let country: TmpCountry
let nickname: String
let emojiId: Int
}

struct TmpCountry: Decodable {
let code: String?
let fullName: String
let emojiUnicode: String
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,12 @@
// Created by rookie.w on 2020/12/26.
//

import RxCocoa
import RxSwift
import UIKit

final class MessageTableViewCell: UITableViewCell {

let disposeBag: DisposeBag = DisposeBag()
// MARK: 🖼 UI
let emojiLabel: UILabel = UILabel()
let nameLabel: UILabel = UILabel()
Expand All @@ -17,6 +19,18 @@ final class MessageTableViewCell: UITableViewCell {
let likeView: UIImageView = UIImageView()
let likeCountLabel: UILabel = UILabel()
let shareButton: UIButton = UIButton()
var likeCount: Int = 0 {
didSet {
self.likeCountLabel.text = "\(likeCount)"
}
}
var isLike: Bool = false {
//FIXME : 내려올 때 isLiked가 항상 false로 내려옴
didSet {
self.likeView.image = isLike ? UIImage(named: "heart_liked") : UIImage(named: "heart")
}
}
var messageId: Int?

// MARK: 🏁 Initialize
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
Expand All @@ -38,7 +52,7 @@ final class MessageTableViewCell: UITableViewCell {
$0.backgroundColor = .breathingWhite
}
let headerView: UIView = UIView()
self.addSubview(headerView)
self.contentView.addSubview(headerView)
headerView.snp.makeConstraints {
$0.height.equalTo(20)
$0.top.trailing.leading.equalToSuperview()
Expand All @@ -48,7 +62,7 @@ final class MessageTableViewCell: UITableViewCell {
$0.layer.masksToBounds = true
$0.layer.cornerRadius = 20
}
self.addSubview(mainView)
self.contentView.addSubview(mainView)
mainView.snp.makeConstraints {
$0.top.equalTo(headerView.snp.bottom)
$0.leading.trailing.equalToSuperview().inset(20)
Expand Down Expand Up @@ -128,12 +142,10 @@ final class MessageTableViewCell: UITableViewCell {
self.likeCountLabel.do {
$0.font = .boldSystemFont(ofSize: 12)
$0.textColor = .grayWhite
$0.text = "32"
}
mainView.addSubview(self.likeCountLabel)
self.likeCountLabel.snp.makeConstraints {
$0.centerY.equalTo(likeView.snp.centerY)
$0.width.equalTo(16)
$0.height.equalTo(14)
$0.leading.equalTo(likeView.snp.trailing).offset(5)
}
Expand All @@ -157,6 +169,27 @@ final class MessageTableViewCell: UITableViewCell {

// MARK: 🔗 Bind
func bind() {
self.shareButton
.rx.tap
.bind{ _ in print("!") }

self.likeView
.rx.tapGesture()
.filter{[weak self] _ in self?.isLike == false }
.flatMap {[weak self] _ -> Observable<Bool?> in
guard let id = self?.messageId else {
return Observable.just(false)
}
return Network.request(Message.API.Like(messageId: id))
.map {$0?.like}
}
.filter {$0 == true}
.bind {[weak self] _ in
self?.isLike = true
self?.likeCount += 1
}
.disposed(by: self.disposeBag)
// .bind(to: self.likeCountLabel.rx.text)
// .disposed(by: self.disposeBag)
}
}
Loading

0 comments on commit 21322be

Please sign in to comment.