@@ -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