square_sandbox_simulator 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +21 -0
  3. data/README.md +176 -0
  4. data/bin/simulate +388 -0
  5. data/lib/square_sandbox_simulator/configuration.rb +193 -0
  6. data/lib/square_sandbox_simulator/data/cafe_bakery/categories.json +54 -0
  7. data/lib/square_sandbox_simulator/data/cafe_bakery/combos.json +33 -0
  8. data/lib/square_sandbox_simulator/data/cafe_bakery/coupon_codes.json +133 -0
  9. data/lib/square_sandbox_simulator/data/cafe_bakery/discounts.json +113 -0
  10. data/lib/square_sandbox_simulator/data/cafe_bakery/items.json +55 -0
  11. data/lib/square_sandbox_simulator/data/cafe_bakery/modifiers.json +73 -0
  12. data/lib/square_sandbox_simulator/data/cafe_bakery/tax_rates.json +26 -0
  13. data/lib/square_sandbox_simulator/data/cafe_bakery/tenders.json +41 -0
  14. data/lib/square_sandbox_simulator/data/restaurant/categories.json +54 -0
  15. data/lib/square_sandbox_simulator/data/restaurant/combos.json +265 -0
  16. data/lib/square_sandbox_simulator/data/restaurant/coupon_codes.json +266 -0
  17. data/lib/square_sandbox_simulator/data/restaurant/discounts.json +198 -0
  18. data/lib/square_sandbox_simulator/data/restaurant/gift_cards.json +82 -0
  19. data/lib/square_sandbox_simulator/data/restaurant/items.json +388 -0
  20. data/lib/square_sandbox_simulator/data/restaurant/modifiers.json +62 -0
  21. data/lib/square_sandbox_simulator/data/restaurant/tax_rates.json +38 -0
  22. data/lib/square_sandbox_simulator/data/restaurant/tenders.json +41 -0
  23. data/lib/square_sandbox_simulator/data/salon_spa/categories.json +24 -0
  24. data/lib/square_sandbox_simulator/data/salon_spa/combos.json +88 -0
  25. data/lib/square_sandbox_simulator/data/salon_spa/coupon_codes.json +96 -0
  26. data/lib/square_sandbox_simulator/data/salon_spa/discounts.json +93 -0
  27. data/lib/square_sandbox_simulator/data/salon_spa/gift_cards.json +47 -0
  28. data/lib/square_sandbox_simulator/data/salon_spa/items.json +100 -0
  29. data/lib/square_sandbox_simulator/data/salon_spa/modifiers.json +49 -0
  30. data/lib/square_sandbox_simulator/data/salon_spa/tax_rates.json +17 -0
  31. data/lib/square_sandbox_simulator/data/salon_spa/tenders.json +41 -0
  32. data/lib/square_sandbox_simulator/database.rb +224 -0
  33. data/lib/square_sandbox_simulator/db/factories/api_requests.rb +95 -0
  34. data/lib/square_sandbox_simulator/db/factories/business_types.rb +178 -0
  35. data/lib/square_sandbox_simulator/db/factories/categories.rb +379 -0
  36. data/lib/square_sandbox_simulator/db/factories/daily_summaries.rb +56 -0
  37. data/lib/square_sandbox_simulator/db/factories/items.rb +1526 -0
  38. data/lib/square_sandbox_simulator/db/factories/simulated_orders.rb +112 -0
  39. data/lib/square_sandbox_simulator/db/factories/simulated_payments.rb +61 -0
  40. data/lib/square_sandbox_simulator/db/migrate/20260312000000_enable_pgcrypto.rb +7 -0
  41. data/lib/square_sandbox_simulator/db/migrate/20260312000001_create_business_types.rb +18 -0
  42. data/lib/square_sandbox_simulator/db/migrate/20260312000002_create_categories.rb +18 -0
  43. data/lib/square_sandbox_simulator/db/migrate/20260312000003_create_items.rb +23 -0
  44. data/lib/square_sandbox_simulator/db/migrate/20260312000004_create_simulated_orders.rb +36 -0
  45. data/lib/square_sandbox_simulator/db/migrate/20260312000005_create_simulated_payments.rb +26 -0
  46. data/lib/square_sandbox_simulator/db/migrate/20260312000006_create_api_requests.rb +27 -0
  47. data/lib/square_sandbox_simulator/db/migrate/20260312000007_create_daily_summaries.rb +24 -0
  48. data/lib/square_sandbox_simulator/generators/data_loader.rb +202 -0
  49. data/lib/square_sandbox_simulator/generators/entity_generator.rb +248 -0
  50. data/lib/square_sandbox_simulator/generators/order_generator.rb +632 -0
  51. data/lib/square_sandbox_simulator/models/api_request.rb +43 -0
  52. data/lib/square_sandbox_simulator/models/business_type.rb +25 -0
  53. data/lib/square_sandbox_simulator/models/category.rb +18 -0
  54. data/lib/square_sandbox_simulator/models/daily_summary.rb +68 -0
  55. data/lib/square_sandbox_simulator/models/item.rb +33 -0
  56. data/lib/square_sandbox_simulator/models/record.rb +16 -0
  57. data/lib/square_sandbox_simulator/models/simulated_order.rb +42 -0
  58. data/lib/square_sandbox_simulator/models/simulated_payment.rb +28 -0
  59. data/lib/square_sandbox_simulator/seeder.rb +242 -0
  60. data/lib/square_sandbox_simulator/services/base_service.rb +253 -0
  61. data/lib/square_sandbox_simulator/services/square/catalog_service.rb +203 -0
  62. data/lib/square_sandbox_simulator/services/square/customer_service.rb +130 -0
  63. data/lib/square_sandbox_simulator/services/square/order_service.rb +121 -0
  64. data/lib/square_sandbox_simulator/services/square/payment_service.rb +136 -0
  65. data/lib/square_sandbox_simulator/services/square/services_manager.rb +68 -0
  66. data/lib/square_sandbox_simulator/services/square/team_service.rb +108 -0
  67. data/lib/square_sandbox_simulator/version.rb +5 -0
  68. data/lib/square_sandbox_simulator.rb +47 -0
  69. metadata +348 -0
@@ -0,0 +1,198 @@
1
+ {
2
+ "discounts": [
3
+ {
4
+ "id": "happy_hour",
5
+ "name": "Happy Hour",
6
+ "percentage": 15,
7
+ "description": "15% off during happy hour (3-6 PM)",
8
+ "type": "time_based",
9
+ "time_rules": {
10
+ "start_hour": 15,
11
+ "end_hour": 18
12
+ },
13
+ "auto_apply": true
14
+ },
15
+ {
16
+ "id": "lunch_special",
17
+ "name": "Lunch Special",
18
+ "percentage": 10,
19
+ "description": "10% off during lunch (11 AM - 2 PM)",
20
+ "type": "time_based",
21
+ "time_rules": {
22
+ "start_hour": 11,
23
+ "end_hour": 14
24
+ },
25
+ "auto_apply": true
26
+ },
27
+ {
28
+ "id": "early_bird",
29
+ "name": "Early Bird",
30
+ "percentage": 12,
31
+ "description": "12% off for orders before 6 PM",
32
+ "type": "time_based",
33
+ "time_rules": {
34
+ "start_hour": 0,
35
+ "end_hour": 18
36
+ },
37
+ "auto_apply": false
38
+ },
39
+ {
40
+ "id": "senior_discount",
41
+ "name": "Senior Discount",
42
+ "percentage": 10,
43
+ "description": "10% off for seniors 65+",
44
+ "type": "customer",
45
+ "auto_apply": false
46
+ },
47
+ {
48
+ "id": "military_discount",
49
+ "name": "Military Discount",
50
+ "percentage": 15,
51
+ "description": "15% off for active duty and veterans",
52
+ "type": "customer",
53
+ "auto_apply": false
54
+ },
55
+ {
56
+ "id": "employee_discount",
57
+ "name": "Employee Discount",
58
+ "percentage": 25,
59
+ "description": "25% off for employees",
60
+ "type": "customer",
61
+ "auto_apply": false
62
+ },
63
+ {
64
+ "id": "birthday_special",
65
+ "name": "Birthday Special",
66
+ "percentage": 20,
67
+ "description": "20% off for birthday celebrations",
68
+ "type": "customer",
69
+ "auto_apply": false
70
+ },
71
+ {
72
+ "id": "five_off",
73
+ "name": "$5 Off",
74
+ "amount": 500,
75
+ "description": "$5 off orders over $30",
76
+ "type": "threshold",
77
+ "min_order_amount": 3000,
78
+ "auto_apply": false
79
+ },
80
+ {
81
+ "id": "ten_off",
82
+ "name": "$10 Off",
83
+ "amount": 1000,
84
+ "description": "$10 off orders over $50",
85
+ "type": "threshold",
86
+ "min_order_amount": 5000,
87
+ "auto_apply": false
88
+ },
89
+ {
90
+ "id": "twenty_off",
91
+ "name": "$20 Off",
92
+ "amount": 2000,
93
+ "description": "$20 off orders over $100",
94
+ "type": "threshold",
95
+ "min_order_amount": 10000,
96
+ "auto_apply": false
97
+ },
98
+ {
99
+ "id": "loyalty_bronze",
100
+ "name": "Loyalty - Bronze",
101
+ "percentage": 5,
102
+ "description": "5% off for 5+ visits",
103
+ "type": "loyalty",
104
+ "min_visits": 5,
105
+ "auto_apply": true
106
+ },
107
+ {
108
+ "id": "loyalty_silver",
109
+ "name": "Loyalty - Silver",
110
+ "percentage": 10,
111
+ "description": "10% off for 10+ visits",
112
+ "type": "loyalty",
113
+ "min_visits": 10,
114
+ "auto_apply": true
115
+ },
116
+ {
117
+ "id": "loyalty_gold",
118
+ "name": "Loyalty - Gold",
119
+ "percentage": 15,
120
+ "description": "15% off for 25+ visits",
121
+ "type": "loyalty",
122
+ "min_visits": 25,
123
+ "auto_apply": true
124
+ },
125
+ {
126
+ "id": "loyalty_platinum",
127
+ "name": "Loyalty - Platinum",
128
+ "percentage": 20,
129
+ "description": "20% off for 50+ visits",
130
+ "type": "loyalty",
131
+ "min_visits": 50,
132
+ "auto_apply": true
133
+ },
134
+ {
135
+ "id": "appetizer_half_off",
136
+ "name": "Appetizer 50% Off",
137
+ "percentage": 50,
138
+ "description": "50% off any appetizer with entree purchase",
139
+ "type": "line_item",
140
+ "applicable_categories": ["Appetizers"],
141
+ "requires_category": ["Entrees"],
142
+ "auto_apply": false
143
+ },
144
+ {
145
+ "id": "drink_discount",
146
+ "name": "Drink Discount",
147
+ "percentage": 25,
148
+ "description": "25% off drinks with any food purchase",
149
+ "type": "line_item",
150
+ "applicable_categories": ["Drinks", "Alcoholic Beverages"],
151
+ "requires_category": ["Entrees", "Appetizers"],
152
+ "auto_apply": false
153
+ },
154
+ {
155
+ "id": "dessert_dollar_off",
156
+ "name": "Dessert $2 Off",
157
+ "amount": 200,
158
+ "description": "$2 off any dessert",
159
+ "type": "line_item",
160
+ "applicable_categories": ["Desserts"],
161
+ "auto_apply": false
162
+ },
163
+ {
164
+ "id": "happy_hour_drinks",
165
+ "name": "Happy Hour Drinks",
166
+ "percentage": 30,
167
+ "description": "30% off alcoholic beverages during happy hour",
168
+ "type": "line_item_time_based",
169
+ "applicable_categories": ["Alcoholic Beverages"],
170
+ "time_rules": {
171
+ "start_hour": 15,
172
+ "end_hour": 18
173
+ },
174
+ "auto_apply": true
175
+ },
176
+ {
177
+ "id": "free_side",
178
+ "name": "Free Side",
179
+ "percentage": 100,
180
+ "description": "Free side with entree purchase",
181
+ "type": "line_item",
182
+ "applicable_categories": ["Sides"],
183
+ "requires_category": ["Entrees"],
184
+ "max_items": 1,
185
+ "auto_apply": false
186
+ },
187
+ {
188
+ "id": "first_order",
189
+ "name": "First Order Discount",
190
+ "percentage": 15,
191
+ "description": "15% off your first order",
192
+ "type": "loyalty",
193
+ "min_visits": 0,
194
+ "max_visits": 1,
195
+ "auto_apply": true
196
+ }
197
+ ]
198
+ }
@@ -0,0 +1,82 @@
1
+ {
2
+ "gift_cards": [
3
+ {
4
+ "card_number": "6012345678901234",
5
+ "initial_balance": 2500,
6
+ "current_balance": 2500,
7
+ "status": "ACTIVE",
8
+ "description": "$25 Gift Card - Full balance"
9
+ },
10
+ {
11
+ "card_number": "6023456789012345",
12
+ "initial_balance": 5000,
13
+ "current_balance": 5000,
14
+ "status": "ACTIVE",
15
+ "description": "$50 Gift Card - Full balance"
16
+ },
17
+ {
18
+ "card_number": "6034567890123456",
19
+ "initial_balance": 10000,
20
+ "current_balance": 10000,
21
+ "status": "ACTIVE",
22
+ "description": "$100 Gift Card - Full balance"
23
+ },
24
+ {
25
+ "card_number": "6045678901234567",
26
+ "initial_balance": 5000,
27
+ "current_balance": 3250,
28
+ "status": "ACTIVE",
29
+ "description": "$50 Gift Card - Partially used ($32.50 remaining)"
30
+ },
31
+ {
32
+ "card_number": "6056789012345678",
33
+ "initial_balance": 2500,
34
+ "current_balance": 875,
35
+ "status": "ACTIVE",
36
+ "description": "$25 Gift Card - Low balance ($8.75 remaining)"
37
+ },
38
+ {
39
+ "card_number": "6067890123456789",
40
+ "initial_balance": 7500,
41
+ "current_balance": 7500,
42
+ "status": "ACTIVE",
43
+ "description": "$75 Gift Card - Full balance"
44
+ },
45
+ {
46
+ "card_number": "6078901234567890",
47
+ "initial_balance": 2000,
48
+ "current_balance": 2000,
49
+ "status": "ACTIVE",
50
+ "description": "$20 Gift Card - Full balance"
51
+ },
52
+ {
53
+ "card_number": "6089012345678901",
54
+ "initial_balance": 5000,
55
+ "current_balance": 0,
56
+ "status": "DEPLETED",
57
+ "description": "$50 Gift Card - Fully redeemed"
58
+ },
59
+ {
60
+ "card_number": "6090123456789012",
61
+ "initial_balance": 10000,
62
+ "current_balance": 1500,
63
+ "status": "ACTIVE",
64
+ "description": "$100 Gift Card - Almost depleted ($15 remaining)"
65
+ },
66
+ {
67
+ "card_number": "6101234567890123",
68
+ "initial_balance": 5000,
69
+ "current_balance": 5000,
70
+ "status": "INACTIVE",
71
+ "description": "$50 Gift Card - Not yet activated"
72
+ }
73
+ ],
74
+ "purchase_denominations": [
75
+ { "amount": 2000, "label": "$20 Gift Card" },
76
+ { "amount": 2500, "label": "$25 Gift Card" },
77
+ { "amount": 5000, "label": "$50 Gift Card" },
78
+ { "amount": 7500, "label": "$75 Gift Card" },
79
+ { "amount": 10000, "label": "$100 Gift Card" }
80
+ ],
81
+ "note": "Sample gift cards for simulation. ACTIVE cards can be used for payments, DEPLETED have zero balance, INACTIVE need activation."
82
+ }
@@ -0,0 +1,388 @@
1
+ {
2
+ "items": [
3
+ {
4
+ "name": "Buffalo Wings",
5
+ "price": 1299,
6
+ "category": "Appetizers",
7
+ "description": "Crispy wings tossed in buffalo sauce"
8
+ },
9
+ {
10
+ "name": "Loaded Nachos",
11
+ "price": 1099,
12
+ "category": "Appetizers",
13
+ "description": "Tortilla chips with cheese, jalapeños, and salsa"
14
+ },
15
+ {
16
+ "name": "Mozzarella Sticks",
17
+ "price": 899,
18
+ "category": "Appetizers",
19
+ "description": "Golden fried with marinara sauce"
20
+ },
21
+ {
22
+ "name": "Spinach Artichoke Dip",
23
+ "price": 1199,
24
+ "category": "Appetizers",
25
+ "description": "Creamy dip with tortilla chips"
26
+ },
27
+ {
28
+ "name": "Calamari",
29
+ "price": 1399,
30
+ "category": "Appetizers",
31
+ "description": "Lightly fried with aioli"
32
+ },
33
+ {
34
+ "name": "Bruschetta",
35
+ "price": 999,
36
+ "category": "Appetizers",
37
+ "description": "Toasted bread with tomato, basil, and balsamic"
38
+ },
39
+ {
40
+ "name": "Shrimp Cocktail",
41
+ "price": 1599,
42
+ "category": "Appetizers",
43
+ "description": "Chilled jumbo shrimp with cocktail sauce"
44
+ },
45
+ {
46
+ "name": "Tomato Bisque",
47
+ "price": 699,
48
+ "category": "Soups & Salads",
49
+ "description": "Creamy tomato soup with croutons"
50
+ },
51
+ {
52
+ "name": "French Onion Soup",
53
+ "price": 849,
54
+ "category": "Soups & Salads",
55
+ "description": "Classic broth with gruyère crouton"
56
+ },
57
+ {
58
+ "name": "Garden Salad",
59
+ "price": 899,
60
+ "category": "Soups & Salads",
61
+ "description": "Mixed greens, tomato, cucumber, choice of dressing"
62
+ },
63
+ {
64
+ "name": "Wedge Salad",
65
+ "price": 1099,
66
+ "category": "Soups & Salads",
67
+ "description": "Iceberg wedge with blue cheese and bacon"
68
+ },
69
+ {
70
+ "name": "Clam Chowder",
71
+ "price": 899,
72
+ "category": "Soups & Salads",
73
+ "description": "New England style cream-based clam chowder"
74
+ },
75
+ {
76
+ "name": "Classic Burger",
77
+ "price": 1499,
78
+ "category": "Entrees",
79
+ "description": "8oz beef patty with lettuce, tomato, onion"
80
+ },
81
+ {
82
+ "name": "Bacon Cheeseburger",
83
+ "price": 1699,
84
+ "category": "Entrees",
85
+ "description": "Burger with bacon and cheddar"
86
+ },
87
+ {
88
+ "name": "Grilled Salmon",
89
+ "price": 2199,
90
+ "category": "Entrees",
91
+ "description": "Atlantic salmon with lemon herb butter"
92
+ },
93
+ {
94
+ "name": "NY Strip Steak",
95
+ "price": 2899,
96
+ "category": "Entrees",
97
+ "description": "12oz steak cooked to order"
98
+ },
99
+ {
100
+ "name": "Chicken Parmesan",
101
+ "price": 1899,
102
+ "category": "Entrees",
103
+ "description": "Breaded chicken with marinara and mozzarella"
104
+ },
105
+ {
106
+ "name": "Fettuccine Alfredo",
107
+ "price": 1599,
108
+ "category": "Entrees",
109
+ "description": "Creamy parmesan sauce over pasta"
110
+ },
111
+ {
112
+ "name": "Fish and Chips",
113
+ "price": 1699,
114
+ "category": "Entrees",
115
+ "description": "Beer-battered cod with fries"
116
+ },
117
+ {
118
+ "name": "BBQ Ribs",
119
+ "price": 2399,
120
+ "category": "Entrees",
121
+ "description": "Full rack with house BBQ sauce"
122
+ },
123
+ {
124
+ "name": "Caesar Salad",
125
+ "price": 1199,
126
+ "category": "Entrees",
127
+ "description": "Romaine, parmesan, croutons"
128
+ },
129
+ {
130
+ "name": "Grilled Chicken Salad",
131
+ "price": 1399,
132
+ "category": "Entrees",
133
+ "description": "Mixed greens with grilled chicken"
134
+ },
135
+ {
136
+ "name": "Mushroom Risotto",
137
+ "price": 1799,
138
+ "category": "Entrees",
139
+ "description": "Arborio rice with wild mushrooms and parmesan"
140
+ },
141
+ {
142
+ "name": "Shrimp Scampi",
143
+ "price": 2099,
144
+ "category": "Entrees",
145
+ "description": "Sautéed shrimp in garlic butter over linguine"
146
+ },
147
+ {
148
+ "name": "French Fries",
149
+ "price": 499,
150
+ "category": "Sides",
151
+ "description": "Crispy golden fries"
152
+ },
153
+ {
154
+ "name": "Sweet Potato Fries",
155
+ "price": 599,
156
+ "category": "Sides",
157
+ "description": "With honey drizzle"
158
+ },
159
+ {
160
+ "name": "Onion Rings",
161
+ "price": 549,
162
+ "category": "Sides",
163
+ "description": "Beer-battered and fried"
164
+ },
165
+ {
166
+ "name": "Coleslaw",
167
+ "price": 399,
168
+ "category": "Sides",
169
+ "description": "Creamy house-made coleslaw"
170
+ },
171
+ {
172
+ "name": "Mashed Potatoes",
173
+ "price": 499,
174
+ "category": "Sides",
175
+ "description": "Creamy with gravy"
176
+ },
177
+ {
178
+ "name": "Steamed Vegetables",
179
+ "price": 449,
180
+ "category": "Sides",
181
+ "description": "Seasonal vegetables"
182
+ },
183
+ {
184
+ "name": "Mac and Cheese Bites",
185
+ "price": 599,
186
+ "category": "Sides",
187
+ "description": "Crispy fried mac and cheese balls"
188
+ },
189
+ {
190
+ "name": "Garlic Bread",
191
+ "price": 449,
192
+ "category": "Sides",
193
+ "description": "Toasted with garlic butter and herbs"
194
+ },
195
+ {
196
+ "name": "Chicken Tenders",
197
+ "price": 799,
198
+ "category": "Kids Menu",
199
+ "description": "Hand-breaded chicken strips with fries"
200
+ },
201
+ {
202
+ "name": "Kids Mac and Cheese",
203
+ "price": 649,
204
+ "category": "Kids Menu",
205
+ "description": "Classic creamy macaroni"
206
+ },
207
+ {
208
+ "name": "Mini Burger",
209
+ "price": 699,
210
+ "category": "Kids Menu",
211
+ "description": "Small patty with fries"
212
+ },
213
+ {
214
+ "name": "Grilled Cheese",
215
+ "price": 599,
216
+ "category": "Kids Menu",
217
+ "description": "Melted cheddar on toasted bread with fries"
218
+ },
219
+ {
220
+ "name": "Kids Quesadilla",
221
+ "price": 649,
222
+ "category": "Kids Menu",
223
+ "description": "Cheese quesadilla with sour cream"
224
+ },
225
+ {
226
+ "name": "Eggs Benedict",
227
+ "price": 1499,
228
+ "category": "Brunch",
229
+ "description": "Poached eggs, ham, hollandaise on English muffin"
230
+ },
231
+ {
232
+ "name": "Avocado Toast",
233
+ "price": 1299,
234
+ "category": "Brunch",
235
+ "description": "Smashed avocado on sourdough with poached egg"
236
+ },
237
+ {
238
+ "name": "Pancake Stack",
239
+ "price": 1099,
240
+ "category": "Brunch",
241
+ "description": "Fluffy buttermilk pancakes with maple syrup"
242
+ },
243
+ {
244
+ "name": "French Toast",
245
+ "price": 1199,
246
+ "category": "Brunch",
247
+ "description": "Brioche dipped in vanilla custard with berries"
248
+ },
249
+ {
250
+ "name": "Breakfast Burrito",
251
+ "price": 1199,
252
+ "category": "Brunch",
253
+ "description": "Scrambled eggs, chorizo, cheese, salsa verde"
254
+ },
255
+ {
256
+ "name": "Chocolate Brownie",
257
+ "price": 699,
258
+ "category": "Desserts",
259
+ "description": "Warm brownie with ice cream"
260
+ },
261
+ {
262
+ "name": "New York Cheesecake",
263
+ "price": 799,
264
+ "category": "Desserts",
265
+ "description": "Classic creamy cheesecake"
266
+ },
267
+ {
268
+ "name": "Apple Pie",
269
+ "price": 749,
270
+ "category": "Desserts",
271
+ "description": "A la mode with vanilla ice cream"
272
+ },
273
+ {
274
+ "name": "Tiramisu",
275
+ "price": 899,
276
+ "category": "Desserts",
277
+ "description": "Italian coffee-flavored dessert"
278
+ },
279
+ {
280
+ "name": "Crème Brûlée",
281
+ "price": 949,
282
+ "category": "Desserts",
283
+ "description": "Vanilla custard with caramelized sugar crust"
284
+ },
285
+ {
286
+ "name": "Soft Drink",
287
+ "price": 299,
288
+ "category": "Drinks",
289
+ "description": "Coke, Sprite, Dr Pepper"
290
+ },
291
+ {
292
+ "name": "Iced Tea",
293
+ "price": 299,
294
+ "category": "Drinks",
295
+ "description": "Fresh brewed, sweetened or unsweetened"
296
+ },
297
+ {
298
+ "name": "Lemonade",
299
+ "price": 349,
300
+ "category": "Drinks",
301
+ "description": "Fresh squeezed lemonade"
302
+ },
303
+ {
304
+ "name": "Coffee",
305
+ "price": 349,
306
+ "category": "Drinks",
307
+ "description": "Regular or decaf"
308
+ },
309
+ {
310
+ "name": "Hot Tea",
311
+ "price": 299,
312
+ "category": "Drinks",
313
+ "description": "Assorted flavors"
314
+ },
315
+ {
316
+ "name": "Sparkling Water",
317
+ "price": 349,
318
+ "category": "Drinks",
319
+ "description": "San Pellegrino or Perrier"
320
+ },
321
+ {
322
+ "name": "Fresh Juice",
323
+ "price": 499,
324
+ "category": "Drinks",
325
+ "description": "Orange, apple, or cranberry"
326
+ },
327
+ {
328
+ "name": "Draft Beer",
329
+ "price": 599,
330
+ "category": "Alcoholic Beverages",
331
+ "description": "Rotating selection of craft beers"
332
+ },
333
+ {
334
+ "name": "Domestic Beer",
335
+ "price": 499,
336
+ "category": "Alcoholic Beverages",
337
+ "description": "Bud Light, Coors, Miller"
338
+ },
339
+ {
340
+ "name": "Import Beer",
341
+ "price": 649,
342
+ "category": "Alcoholic Beverages",
343
+ "description": "Corona, Heineken, Guinness"
344
+ },
345
+ {
346
+ "name": "House Wine",
347
+ "price": 799,
348
+ "category": "Alcoholic Beverages",
349
+ "description": "Red or white by the glass"
350
+ },
351
+ {
352
+ "name": "Premium Wine",
353
+ "price": 1199,
354
+ "category": "Alcoholic Beverages",
355
+ "description": "Cabernet, Chardonnay, Pinot Noir"
356
+ },
357
+ {
358
+ "name": "Margarita",
359
+ "price": 999,
360
+ "category": "Alcoholic Beverages",
361
+ "description": "House or frozen"
362
+ },
363
+ {
364
+ "name": "Long Island Iced Tea",
365
+ "price": 1099,
366
+ "category": "Alcoholic Beverages",
367
+ "description": "Classic cocktail"
368
+ },
369
+ {
370
+ "name": "Old Fashioned",
371
+ "price": 1299,
372
+ "category": "Alcoholic Beverages",
373
+ "description": "Bourbon, bitters, orange peel"
374
+ },
375
+ {
376
+ "name": "Chef's Special",
377
+ "price": 2499,
378
+ "category": "Specials",
379
+ "description": "Ask your server for today's special"
380
+ },
381
+ {
382
+ "name": "Soup of the Day",
383
+ "price": 599,
384
+ "category": "Specials",
385
+ "description": "Fresh made daily"
386
+ }
387
+ ]
388
+ }