Skip to content

Commit f3b4dec

Browse files
committed
chore(place/demo/lockers): metadata changes
1 parent b91c70a commit f3b4dec

1 file changed

Lines changed: 45 additions & 24 deletions

File tree

drivers/place/demo/lockers.cr

Lines changed: 45 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -21,22 +21,55 @@ class Place::Demo::Lockers < PlaceOS::Driver
2121
end
2222

2323
getter locker_banks : Hash(String, LockerBank) do
24+
# Grab bank details
25+
banks = staff_api.metadata(building_id, "locker_banks").get.dig?("locker_banks", "details")
26+
return Hash(String, LockerBank).new unless banks
27+
28+
banks = begin
29+
Array(LockerBank).from_json(banks.to_json)
30+
rescue error
31+
message = "error parsing banks json on building #{building_id}:\n#{banks.to_pretty_json}"
32+
logger.warn(exception: error) { message }
33+
raise message
34+
end
35+
2436
lookup = {} of String => LockerBank
25-
levels.flat_map { |level_id|
26-
banks = lockers_details(level_id)
27-
banks.try(&.each { |bank|
28-
bank.level_id = level_id
29-
})
30-
banks
31-
}.each { |bank| lookup[bank.id] = bank }
37+
banks.each do |bank|
38+
bank.level_id = (levels & bank.zones).first?
39+
lookup[bank.id] = bank
40+
end
41+
42+
# Grab locker details:
43+
lockers = staff_api.metadata(building_id, "lockers").get.dig?("lockers", "details")
44+
return lookup unless lockers
45+
46+
lockers = begin
47+
Array(Locker).from_json(lockers.to_json)
48+
rescue error
49+
message = "error parsing locker json on building #{building_id}:\n#{lockers.to_pretty_json}"
50+
logger.warn(exception: error) { message }
51+
raise message
52+
end
53+
54+
lockers.each do |locker|
55+
begin
56+
bank = lookup[locker.bank_id]
57+
locker.level_id = bank.level_id
58+
bank.lockers << locker
59+
rescue error
60+
logger.warn(exception: error) { "config issue with locker #{locker.id} on bank #{locker.bank_id}" }
61+
end
62+
end
63+
3264
lookup
3365
end
3466

3567
class Locker
3668
include JSON::Serializable
3769

3870
getter id : String
39-
getter name : String
71+
getter name : String { id }
72+
getter bank_id : String
4073
getter bookable : Bool { false }
4174

4275
# for tracking, not part of metadata
@@ -74,9 +107,11 @@ class Place::Demo::Lockers < PlaceOS::Driver
74107
include JSON::Serializable
75108

76109
getter id : String
77-
getter name : String
78-
getter lockers : Array(Locker)
110+
getter name : String { id }
111+
getter zones : Array(String)
79112

113+
property level_id : String? = nil
114+
getter lockers : Array(Locker) = [] of Locker
80115
getter locker_hash : Hash(String, Locker) do
81116
lookup = {} of String => Locker
82117
level = self.level_id
@@ -86,20 +121,6 @@ class Place::Demo::Lockers < PlaceOS::Driver
86121
end
87122
lookup
88123
end
89-
90-
property level_id : String? = nil
91-
end
92-
93-
def lockers_details(level_id : String) : Array(LockerBank)
94-
lockers = staff_api.metadata(level_id, "lockers").get.dig?("lockers", "details")
95-
return [] of LockerBank unless lockers
96-
begin
97-
Array(LockerBank).from_json(lockers.to_json)
98-
rescue error
99-
message = "error parsing locker json on level #{level_id}:\n#{lockers.to_pretty_json}"
100-
logger.warn(exception: error) { message }
101-
raise message
102-
end
103124
end
104125

105126
class ::PlaceOS::Driver::Interface::Lockers::PlaceLocker

0 commit comments

Comments
 (0)