Skip to content

Commit

Permalink
Merge pull request #14 from Jeon0976/develop
Browse files Browse the repository at this point in the history
[feat]: Realm 추가, [fix]: 버그 #1, #2
  • Loading branch information
Jeon0976 committed Oct 12, 2023
2 parents 15c2374 + c541070 commit 3b8dc87
Show file tree
Hide file tree
Showing 17 changed files with 267 additions and 86 deletions.
1 change: 1 addition & 0 deletions .swiftlint.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
disabled_rules:
- trailing_whitespace
- identifier_name
- force_try

function_parameter_count:
- 8
Expand Down
14 changes: 9 additions & 5 deletions AVIRO.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@
C51AED1F2A8B2BC80015FBC2 /* HomeTopButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = C51AED1E2A8B2BC80015FBC2 /* HomeTopButton.swift */; };
C51AED212A8B2BDB0015FBC2 /* HomeMapReferButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = C51AED202A8B2BDB0015FBC2 /* HomeMapReferButton.swift */; };
C51AED232A8B7B000015FBC2 /* UIViewController+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = C51AED222A8B7B000015FBC2 /* UIViewController+Extension.swift */; };
C51B09B82A82155200916BBD /* LocalMarkerData.swift in Sources */ = {isa = PBXBuildFile; fileRef = C51B09B72A82155200916BBD /* LocalMarkerData.swift */; };
C51B09B82A82155200916BBD /* MarkerModelCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = C51B09B72A82155200916BBD /* MarkerModelCache.swift */; };
C51B09BA2A8215D800916BBD /* MarkerModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C51B09B92A8215D800916BBD /* MarkerModel.swift */; };
C51B09BC2A82397800916BBD /* Marker+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = C51B09BB2A82397800916BBD /* Marker+Extension.swift */; };
C51BBAD52A78D53D00BF5B7C /* AVIROCheckPlace+DTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = C51BBAD42A78D53D00BF5B7C /* AVIROCheckPlace+DTO.swift */; };
Expand Down Expand Up @@ -93,6 +93,7 @@
C5351B7A2A1B439000116D50 /* KakaoCoordinateSearchDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5351B792A1B439000116D50 /* KakaoCoordinateSearchDTO.swift */; };
C53856B12ABC13ED00D52DEC /* AVIROMyContributionCount+DTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = C53856B02ABC13ED00D52DEC /* AVIROMyContributionCount+DTO.swift */; };
C53893162A5EC0C500CB9A54 /* GenderButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = C53893152A5EC0C500CB9A54 /* GenderButton.swift */; };
C53C54D22AD67E8800C3662A /* LocalDBMarker.swift in Sources */ = {isa = PBXBuildFile; fileRef = C53C54D12AD67E8800C3662A /* LocalDBMarker.swift */; };
C541521D2AC125E100F39826 /* TutorialTopLabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C541521C2AC125E100F39826 /* TutorialTopLabel.swift */; };
C54657882ABF2DBA003A0BCB /* API.plist in Resources */ = {isa = PBXBuildFile; fileRef = C54657872ABF2DBA003A0BCB /* API.plist */; };
C547A8BA2A17D8D4004D1339 /* KakaoAPIManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C547A8B92A17D8D4004D1339 /* KakaoAPIManager.swift */; };
Expand Down Expand Up @@ -261,7 +262,7 @@
C51AED1E2A8B2BC80015FBC2 /* HomeTopButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeTopButton.swift; sourceTree = "<group>"; };
C51AED202A8B2BDB0015FBC2 /* HomeMapReferButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeMapReferButton.swift; sourceTree = "<group>"; };
C51AED222A8B7B000015FBC2 /* UIViewController+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIViewController+Extension.swift"; sourceTree = "<group>"; };
C51B09B72A82155200916BBD /* LocalMarkerData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalMarkerData.swift; sourceTree = "<group>"; };
C51B09B72A82155200916BBD /* MarkerModelCache.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MarkerModelCache.swift; sourceTree = "<group>"; };
C51B09B92A8215D800916BBD /* MarkerModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MarkerModel.swift; sourceTree = "<group>"; };
C51B09BB2A82397800916BBD /* Marker+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Marker+Extension.swift"; sourceTree = "<group>"; };
C51BBAD42A78D53D00BF5B7C /* AVIROCheckPlace+DTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AVIROCheckPlace+DTO.swift"; sourceTree = "<group>"; };
Expand Down Expand Up @@ -298,6 +299,7 @@
C5351B792A1B439000116D50 /* KakaoCoordinateSearchDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KakaoCoordinateSearchDTO.swift; sourceTree = "<group>"; };
C53856B02ABC13ED00D52DEC /* AVIROMyContributionCount+DTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AVIROMyContributionCount+DTO.swift"; sourceTree = "<group>"; };
C53893152A5EC0C500CB9A54 /* GenderButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GenderButton.swift; sourceTree = "<group>"; };
C53C54D12AD67E8800C3662A /* LocalDBMarker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalDBMarker.swift; sourceTree = "<group>"; };
C541521C2AC125E100F39826 /* TutorialTopLabel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TutorialTopLabel.swift; sourceTree = "<group>"; };
C54657862ABF2D82003A0BCB /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
C54657872ABF2DBA003A0BCB /* API.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; name = API.plist; path = AVIRO/Utils/API.plist; sourceTree = SOURCE_ROOT; };
Expand Down Expand Up @@ -691,7 +693,8 @@
C51B09B62A82046000916BBD /* LocalDataModel */ = {
isa = PBXGroup;
children = (
C51B09B72A82155200916BBD /* LocalMarkerData.swift */,
C51B09B72A82155200916BBD /* MarkerModelCache.swift */,
C53C54D12AD67E8800C3662A /* LocalDBMarker.swift */,
C5A9899A2A95A6B50021B7C3 /* LocalBookmarkData.swift */,
);
path = LocalDataModel;
Expand Down Expand Up @@ -1114,9 +1117,9 @@
C5A9899C2A95A7820021B7C3 /* FacadeManager */ = {
isa = PBXGroup;
children = (
C510005B2AB9C39500F65C1F /* MarkerModelManager.swift */,
C520662C2A7CE1CC0038ECCD /* SearchHistoryManager.swift */,
C5A9899D2A95A7940021B7C3 /* BookmarkManager.swift */,
C510005B2AB9C39500F65C1F /* MarkerModelManager.swift */,
);
path = FacadeManager;
sourceTree = "<group>";
Expand Down Expand Up @@ -1717,7 +1720,7 @@
C552D5342ABE8CA500933D8A /* AVIRODeleteAPI.swift in Sources */,
C510005E2ABAA3C700F65C1F /* Enum+.swift in Sources */,
C58FBF942AC2DB6D00AB6EFC /* KakaoKeywordResultDTO.swift in Sources */,
C51B09B82A82155200916BBD /* LocalMarkerData.swift in Sources */,
C51B09B82A82155200916BBD /* MarkerModelCache.swift in Sources */,
C5A9899B2A95A6B50021B7C3 /* LocalBookmarkData.swift in Sources */,
C520662D2A7CE1CC0038ECCD /* SearchHistoryManager.swift in Sources */,
C51AED232A8B7B000015FBC2 /* UIViewController+Extension.swift in Sources */,
Expand Down Expand Up @@ -1751,6 +1754,7 @@
C5A201B42A986EC300A54381 /* EditPlaceInfoViewController.swift in Sources */,
C51AED1D2A8A192D0015FBC2 /* ChangedViewAction.swift in Sources */,
C51B09BC2A82397800916BBD /* Marker+Extension.swift in Sources */,
C53C54D22AD67E8800C3662A /* LocalDBMarker.swift in Sources */,
C58FBF922AC2D87300AB6EFC /* KakaoAPIManagerProtocol.swift in Sources */,
C528E4BE2A5FB816002BD72E /* TermsTableCell.swift in Sources */,
C53856B12ABC13ED00D52DEC /* AVIROMyContributionCount+DTO.swift in Sources */,
Expand Down
1 change: 1 addition & 0 deletions AVIRO/Custom/Constants/Enum+.swift
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ enum APP: String {
// MARK: UserDefaults Key
enum UDKey: String {
case tutorial
case loadOnce
}

// MARK: NotificationCenter Name
Expand Down
4 changes: 2 additions & 2 deletions AVIRO/Manager/APIManager/AVIROManager/AVIROAPIManager.swift
Original file line number Diff line number Diff line change
Expand Up @@ -316,15 +316,15 @@ final class AVIROAPIManager: AVIROAPIMangerProtocol {
}

func editPlaceURL(
with url: AVIROEditURLDTO,
with urlData: AVIROEditURLDTO,
completionHandler: @escaping (Result<AVIROResultDTO, APIError>) -> Void
) {
guard let url = postAPI.editPlaceURL().url else {
completionHandler(.failure(.urlError))
return
}

guard let jsonData = try? JSONEncoder().encode(url) else {
guard let jsonData = try? JSONEncoder().encode(urlData) else {
completionHandler(.failure(.encodingError))
return
}
Expand Down
68 changes: 48 additions & 20 deletions AVIRO/Manager/FacadeManager/BookmarkManager.swift
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,29 @@

import Foundation

final class BookmarkFacadeManager {
private let bookmarkArray = LocalBookmarkData.shared
protocol BookmarkFacadeProtocol {
func fetchAllData(completionHandler: @escaping ((String) -> Void))
func loadAllData() -> [String]
func checkData(with placeId: String) -> Bool
func updateData(with placeId: String, completionHandler: @escaping ((String) -> Void))
func deleteData(with placeId: String, completionHandler: @escaping ((String) -> Void))
func deleteAllData()
}

final class BookmarkFacadeManager: BookmarkFacadeProtocol {
private let bookmarkArray: BookmarkDataProtocol

init(bookmarkArray: BookmarkDataProtocol = LocalBookmarkData.shared) {
self.bookmarkArray = bookmarkArray
}

func fetchAllData(completionHandler: @escaping ((String) -> Void)) {
AVIROAPIManager().loadBookmarkModels(with: MyData.my.id) { [weak self] result in
switch result {
case .success(let success):
if success.statusCode == 200 {
let dataArray = success.bookmarks
self?.bookmarkArray.updateAllData(dataArray)
self?.bookmarkArray.updateAllData(with: dataArray)
} else {
if let error = APIError.badRequest.errorDescription {
completionHandler(error)
Expand All @@ -34,10 +47,39 @@ final class BookmarkFacadeManager {
bookmarkArray.loadAllData()
}

func updateBookmark(_ placeId: String, completionHandler: @escaping ((String) -> Void)) {
func checkData(with placeId: String) -> Bool {
bookmarkArray.checkData(with: placeId)
}

func updateData(
with placeId: String,
completionHandler: @escaping ((String) -> Void)
) {
self.bookmarkArray.updateData(with: placeId)
self.updateBookmark(
with: placeId,
completionHandler: completionHandler
)
}

func deleteData(
with placeId: String,
completionHandler: @escaping ((String) -> Void)
) {
self.bookmarkArray.deleteData(with: placeId)
self.updateBookmark(
with: placeId,
completionHandler: completionHandler
)
}

private func updateBookmark(with placeId: String, completionHandler: @escaping ((String) -> Void)) {
let bookmarks = bookmarkArray.loadAllData()

let postModel = AVIROUpdateBookmarkDTO(placeList: bookmarks, userId: MyData.my.id)
let postModel = AVIROUpdateBookmarkDTO(
placeList: bookmarks,
userId: MyData.my.id
)

AVIROAPIManager().createBookmarkModel(with: postModel) { result in
switch result {
Expand All @@ -56,21 +98,7 @@ final class BookmarkFacadeManager {
}
}
}

func checkData(_ placeId: String) -> Bool {
bookmarkArray.checkData(placeId)
}

func updateData(_ placeId: String, completionHandler: @escaping ((String) -> Void)) {
self.bookmarkArray.updateData(placeId)
self.updateBookmark(placeId, completionHandler: completionHandler)
}

func deleteData(_ placeId: String, completionHandler: @escaping ((String) -> Void)) {
self.bookmarkArray.deleteData(placeId)
self.updateBookmark(placeId, completionHandler: completionHandler)
}


func deleteAllData() {
bookmarkArray.deleteAllBookmark()
}
Expand Down
77 changes: 74 additions & 3 deletions AVIRO/Manager/FacadeManager/MarkerModelManager.swift
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,84 @@
import Foundation

import NMapsMap
// realm 생성 및 기타 활동을 실행할때는 동일 쓰레드에서 진행해야함
import RealmSwift

protocol MarkerModelManagerProtocol {
func getAllMarkerData() -> [MarkerModel]
func getMarkerData()
func fetchAllData(completionHandler: @escaping (Result<[AVIROMarkerModel], APIError>) -> Void)

}

final class MarkerModelManager {
// TODO: Time Data HomeViewPresenter에서 옮기기
final class MarkerModelManager: MarkerModelManagerProtocol {
private var didLoadOnce: Bool {
get {
return UserDefaults.standard.bool(forKey: UDKey.loadOnce.rawValue)
}
set {
UserDefaults.standard.set(newValue, forKey: UDKey.loadOnce.rawValue)
}
}

func fetchAllData(
completionHandler: @escaping (Result<[AVIROMarkerModel], APIError>) -> Void
) {
if didLoadOnce {
fetchAllDataFromRealm(completionHandler: completionHandler)
} else {
fetchAllDataFromServer(completionHandler: completionHandler)
}
}

private func fetchAllDataFromRealm(
completionHandler: @escaping (Result<[AVIROMarkerModel], APIError>) -> Void
) {
let realm = try! Realm()
let realmResults = realm.objects(MarkerModelFromRealm.self)

let markerModels = Array(realmResults).map {
$0.toAVIROMarkerModel()
}

completionHandler(.success(markerModels))
}

private func fetchAllDataFromServer(
completionHandler: @escaping (Result<[AVIROMarkerModel], APIError>) -> Void
) {
let model = AVIROMapModelDTO(longitude: "0.0", latitude: "0.0", wide: "0.0", time: nil)

AVIROAPIManager().loadNerbyPlaceModels(with: model) { [weak self] result in
switch result {
case .success(let success):
if success.statusCode == 200 {
if let models = success.data.updatedPlace {
let realmModels = models.map { model -> MarkerModelFromRealm in
return MarkerModelFromRealm(
placeId: model.placeId,
latitude: model.y,
longitude: model.x,
isAll: model.allVegan,
isSome: model.someMenuVegan,
isRequest: model.ifRequestVegan)
}

let realm = try! Realm()

try! realm.write {
realm.add(realmModels, update: .modified)
}

self?.didLoadOnce = true

completionHandler(.success(models))
}
} else {
completionHandler(.failure(.badRequest))
}
case .failure(let error):
completionHandler(.failure(error))
}
}
}
}
5 changes: 4 additions & 1 deletion AVIRO/Model/HomeViewModel/MarkerModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,9 @@ import NMapsMap
struct MarkerModel: Equatable {
let placeId: String
var marker: NMFMarker
// MARK: 수정 중 일때만 Map Place 변경 가능

// MARK: 수정 중 일때만 Map Place 변경 가능
// 해당 변수는 지도에 표시될 마커 구분을 위한 변수
var mapPlace: MapPlace {
didSet {
if isStar {
Expand Down Expand Up @@ -44,6 +46,7 @@ struct MarkerModel: Equatable {
}
}

// edit할때 isSome, isRequest 중복이 있을 수 있으니 변수 생성
var isAll = false
var isSome = false
var isRequest = false
Expand Down
19 changes: 14 additions & 5 deletions AVIRO/Model/LocalDataModel/LocalBookmarkData.swift
Original file line number Diff line number Diff line change
Expand Up @@ -7,32 +7,41 @@

import Foundation

final class LocalBookmarkData {
protocol BookmarkDataProtocol {
func updateAllData(with list: [String])
func loadAllData() -> [String]
func checkData(with placeId: String) -> Bool
func updateData(with placeId: String)
func deleteData(with placeId: String)
func deleteAllBookmark()
}

final class LocalBookmarkData: BookmarkDataProtocol {
static let shared = LocalBookmarkData()

private var bookmarkList: [String] = []

private init() { }

func updateAllData(_ list: [String]) {
func updateAllData(with list: [String]) {
self.bookmarkList = list
}

func loadAllData() -> [String] {
bookmarkList
}

func checkData(_ placeId: String) -> Bool {
func checkData(with placeId: String) -> Bool {
bookmarkList.contains(placeId)
}

func updateData(_ placeId: String) {
func updateData(with placeId: String) {
if !bookmarkList.contains(placeId) {
bookmarkList.append(placeId)
}
}

func deleteData(_ placeId: String) {
func deleteData(with placeId: String) {
if let index = bookmarkList.firstIndex(of: placeId) {
bookmarkList.remove(at: index)
}
Expand Down
Loading

0 comments on commit 3b8dc87

Please sign in to comment.