Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
afcf756
[FEAT] error alert
coby5502 Apr 21, 2025
d82d0cd
[FEAT] shop empty message
coby5502 Apr 21, 2025
da05825
[CHORE] change map view
coby5502 Apr 21, 2025
56c6aae
[FIX] fix message timing
coby5502 Apr 21, 2025
3532b6c
[FEAT] deboucing
coby5502 Apr 21, 2025
352aa67
[CHORE] change map model
coby5502 Apr 21, 2025
f64cac6
[CHORE] delete equtable
coby5502 Apr 21, 2025
7c55366
[CHORE] fix MapStore
coby5502 Apr 21, 2025
4e60ff8
[CHORE] fix message logic
coby5502 Apr 21, 2025
7b423b7
[FEAT] mapview carousel
coby5502 Apr 21, 2025
5d00215
[CHORE] Complete ShopDetailView Design
coby5502 Apr 21, 2025
10644de
[FEAT] set index
coby5502 Apr 21, 2025
1f25548
[FEAT] marker focusing
coby5502 Apr 21, 2025
57391f6
[FIX] image load
coby5502 Apr 21, 2025
99d10df
[FEAT] set genre
coby5502 Apr 21, 2025
adb45ef
[CHORE] filter
coby5502 Apr 21, 2025
56c9624
[FEAT] genre
coby5502 Apr 21, 2025
1e43cb2
[FEAT] budgets
coby5502 Apr 21, 2025
d4e76bd
[FEAT] set filters
coby5502 Apr 21, 2025
6ebd592
[FEAT] set location
coby5502 Apr 22, 2025
cdefe12
[FEAT] add data
coby5502 Apr 22, 2025
3fbf07e
[FEAT] complete detail view
coby5502 Apr 22, 2025
fd06676
[CHOER] fix button style
coby5502 Apr 22, 2025
432cdee
[FEAT] seperate filter
coby5502 Apr 22, 2025
d571357
[CHORE] fix
coby5502 Apr 22, 2025
c8b30d9
[FEAT] complete search design
coby5502 Apr 22, 2025
5eb13a4
[FEAT] complete all design
coby5502 Apr 22, 2025
b975f1f
[FEAT] init search
coby5502 Apr 22, 2025
aa2102f
[CHORE] remove paging model
coby5502 Apr 22, 2025
6b32523
[FIX] fix icons
coby5502 Apr 22, 2025
5c7a76e
[FIX] set search
coby5502 Apr 22, 2025
eb1368d
[ADD] add logo
coby5502 Apr 22, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
18 changes: 18 additions & 0 deletions HotSpot/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json
Original file line number Diff line number Diff line change
@@ -1,91 +1,109 @@
{
"images" : [
{
"filename" : "40.png",
"idiom" : "iphone",
"scale" : "2x",
"size" : "20x20"
},
{
"filename" : "60.png",
"idiom" : "iphone",
"scale" : "3x",
"size" : "20x20"
},
{
"filename" : "58.png",
"idiom" : "iphone",
"scale" : "2x",
"size" : "29x29"
},
{
"filename" : "87.png",
"idiom" : "iphone",
"scale" : "3x",
"size" : "29x29"
},
{
"filename" : "80.png",
"idiom" : "iphone",
"scale" : "2x",
"size" : "40x40"
},
{
"filename" : "120.png",
"idiom" : "iphone",
"scale" : "3x",
"size" : "40x40"
},
{
"filename" : "120 1.png",
"idiom" : "iphone",
"scale" : "2x",
"size" : "60x60"
},
{
"filename" : "180.png",
"idiom" : "iphone",
"scale" : "3x",
"size" : "60x60"
},
{
"filename" : "20.png",
"idiom" : "ipad",
"scale" : "1x",
"size" : "20x20"
},
{
"filename" : "40 1.png",
"idiom" : "ipad",
"scale" : "2x",
"size" : "20x20"
},
{
"filename" : "29.png",
"idiom" : "ipad",
"scale" : "1x",
"size" : "29x29"
},
{
"filename" : "58 1.png",
"idiom" : "ipad",
"scale" : "2x",
"size" : "29x29"
},
{
"filename" : "40 2.png",
"idiom" : "ipad",
"scale" : "1x",
"size" : "40x40"
},
{
"filename" : "80 1.png",
"idiom" : "ipad",
"scale" : "2x",
"size" : "40x40"
},
{
"filename" : "76.png",
"idiom" : "ipad",
"scale" : "1x",
"size" : "76x76"
},
{
"filename" : "152.png",
"idiom" : "ipad",
"scale" : "2x",
"size" : "76x76"
},
{
"filename" : "167.png",
"idiom" : "ipad",
"scale" : "2x",
"size" : "83.5x83.5"
},
{
"filename" : "appstore.png",
"idiom" : "ios-marketing",
"scale" : "1x",
"size" : "1024x1024"
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import Foundation
import ComposableArchitecture

private enum ShopRepositoryKey: DependencyKey {
Expand Down
76 changes: 76 additions & 0 deletions HotSpot/Sources/Common/Dependency/UserDefaults+Dependency.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
import Foundation
import ComposableArchitecture

private enum UserDefaultsKey: DependencyKey {

Check warning on line 4 in HotSpot/Sources/Common/Dependency/UserDefaults+Dependency.swift

View workflow job for this annotation

GitHub Actions / run-unitTest

conformance of 'UserDefaults' to 'Sendable' is unavailable
static let liveValue = UserDefaults.standard
}

extension DependencyValues {
var userDefaults: UserDefaults {
get { self[UserDefaultsKey.self] }
set { self[UserDefaultsKey.self] = newValue }
}
}

// MARK: - Filter Keys
extension UserDefaults {
private enum FilterKey: String {
case range = "range"
case budgets = "budgets"
case genres = "genres"
case wifi = "wifi"
case privateRoom = "privateRoom"
case nonSmoking = "nonSmoking"
case parking = "parking"
case location = "location"
}

var range: Int {
get { integer(forKey: FilterKey.range.rawValue) == 0 ? 3 : integer(forKey: FilterKey.range.rawValue) }
set { set(newValue, forKey: FilterKey.range.rawValue) }
}

var location: MapCoordinate {
get {
let lat = double(forKey: "\(FilterKey.location.rawValue)_lat")
let lng = double(forKey: "\(FilterKey.location.rawValue)_lng")
return lat == 0 && lng == 0
? MapCoordinate(latitude: 34.6937, longitude: 135.5023) // Osaka coordinates
: MapCoordinate(latitude: lat, longitude: lng)
}
set {
set(newValue.latitude, forKey: "\(FilterKey.location.rawValue)_lat")
set(newValue.longitude, forKey: "\(FilterKey.location.rawValue)_lng")
}
}

var budgets: [String] {
get { stringArray(forKey: FilterKey.budgets.rawValue) ?? [] }
set { set(newValue, forKey: FilterKey.budgets.rawValue) }
}

var genres: [String] {
get { stringArray(forKey: FilterKey.genres.rawValue) ?? [] }
set { set(newValue, forKey: FilterKey.genres.rawValue) }
}

var wifi: Int {
get { integer(forKey: FilterKey.wifi.rawValue) }
set { set(newValue, forKey: FilterKey.wifi.rawValue) }
}

var privateRoom: Int {
get { integer(forKey: FilterKey.privateRoom.rawValue) }
set { set(newValue, forKey: FilterKey.privateRoom.rawValue) }
}

var nonSmoking: Int {
get { integer(forKey: FilterKey.nonSmoking.rawValue) }
set { set(newValue, forKey: FilterKey.nonSmoking.rawValue) }
}

var parking: Int {
get { integer(forKey: FilterKey.parking.rawValue) }
set { set(newValue, forKey: FilterKey.parking.rawValue) }
}
}
72 changes: 0 additions & 72 deletions HotSpot/Sources/Common/Extensions/ShopGenre.swift

This file was deleted.

2 changes: 1 addition & 1 deletion HotSpot/Sources/Common/Extensions/UIImage+Kingfisher.swift
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ extension UIImage {
return
}

let processor = DownsamplingImageProcessor(size: CGSize(width: 200, height: 200))
let processor = DownsamplingImageProcessor(size: CGSize(width: 100, height: 100))
KingfisherManager.shared.retrieveImage(
with: url,
options: [
Expand Down
34 changes: 15 additions & 19 deletions HotSpot/Sources/Data/DTO/Request/ShopSearchRequestDTO.swift
Original file line number Diff line number Diff line change
Expand Up @@ -5,36 +5,32 @@ struct ShopSearchRequestDTO {
let lng: Double // Longitude
let range: Int // Search range (1–5)
let count: Int? // Number of results (1–100)
let keyword: String? // Keyword search
let genre: String? // Genre code
let order: Int? // Order: 1=recommend, 2=popularity
let name: String? // Name search
let genres: [String]? // Genre codes
let start: Int? // Starting index for paging
let budget: String? // Budget code
let privateRoom: Bool? // Private room availability
let wifi: Bool? // Wi-Fi availability
let nonSmoking: Bool? // Non-smoking availability
let coupon: Bool? // Coupon availability
let openNow: Bool? // Currently open filter
let budgets: [String]? // Budget codes
let privateRoom: Int // Private room availability (0 or 1)
let wifi: Int // Wi-Fi availability (0 or 1)
let nonSmoking: Int // Non-smoking availability (0 or 1)
let parking: Int // Parking availability (0 or 1)

/// Converts the DTO into a dictionary of parameters for Moya or URL encoding
var asParameters: [String: Any] {
var params: [String: Any] = [
"lat": lat,
"lng": lng,
"range": range
"range": range,
"private_room": privateRoom,
"wifi": wifi,
"non_smoking": nonSmoking,
"parking": parking
]

if let count = count { params["count"] = count }
if let keyword = keyword { params["keyword"] = keyword }
if let genre = genre { params["genre"] = genre }
if let order = order { params["order"] = order }
if let name = name { params["name"] = name }
if let genres = genres, !genres.isEmpty { params["genre"] = genres.joined(separator: ",") }
if let start = start { params["start"] = start }
if let budget = budget { params["budget"] = budget }
if let privateRoom = privateRoom { params["private_room"] = privateRoom ? 1 : 0 }
if let wifi = wifi { params["wifi"] = wifi ? 1 : 0 }
if let nonSmoking = nonSmoking { params["non_smoking"] = nonSmoking ? 1 : 0 }
if let coupon = coupon { params["coupon"] = coupon ? 1 : 0 }
if let openNow = openNow, openNow { params["open"] = "now" }
if let budgets = budgets, !budgets.isEmpty { params["budget"] = budgets.joined(separator: ",") }

return params
}
Expand Down
Loading
Loading