Skip to content

Commit b4f36d0

Browse files
committed
revisions
1 parent 3126603 commit b4f36d0

8 files changed

Lines changed: 182 additions & 545 deletions

File tree

.env.example

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,4 @@ FIREBASE_SERVICE_ACCOUNT_PATH=./firebase-service-account.json
1919
# Logging Configuration
2020
PRISMA_LOG_QUERIES=true
2121
PRISMA_LOG_ERRORS=true
22-
PRISMA_LOG_WARNINGS=true
23-
24-
# Digital Ocean Spaces Configuration
25-
SPACES_ENDPOINT=
26-
SPACES_BUCKET=
27-
SPACES_ACCESS_KEY=
28-
SPACES_SECRET_KEY=
29-
SPACES_REGION=
30-
SPACES_PUBLIC_URL=
22+
PRISMA_LOG_WARNINGS=true

package.json

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,7 @@
1212
"lint": "eslint '{src,test}/**/*.ts' --fix",
1313
"format": "prettier --write '{src,test}/**/*.ts'",
1414
"scrape": "tsx prisma/scraper.ts",
15-
"test:scraper": "TEST_MODE=true tsx prisma/scraper.ts",
16-
"migrate:static-images": "tsx prisma/migrateStaticImages.ts",
17-
"migrate:static-images:dry-run": "DRY_RUN=true tsx prisma/migrateStaticImages.ts",
15+
"scrape:scheduled": "SCHEDULED_MODE=true tsx prisma/scraper.ts",
1816
"studio": "prisma studio"
1917
},
2018
"repository": {
@@ -29,7 +27,6 @@
2927
},
3028
"homepage": "https://github.com/cuappdev/eatery-blue-backend#readme",
3129
"dependencies": {
32-
"@aws-sdk/client-s3": "^3.930.0",
3330
"@prisma/client": "^6.16.2",
3431
"dotenv": "^17.2.3",
3532
"express": "^5.1.0",

prisma/mappers.ts

Lines changed: 53 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import {
66
EventType,
77
PaymentMethod,
88
} from '@prisma/client';
9+
import { EATERY_IMAGES_BASE_URL, Weekday, WEEKDAY_TO_DAY_OF_WEEK } from '../src/constants.js';
910

1011
export function mapCampusArea(area: RawCampusArea): CampusArea {
1112
// Only consider descrshort for mapping
@@ -99,85 +100,76 @@ export function mapEventType(eventDescription: string): EventType {
99100
}
100101
}
101102

102-
// Mapping from cornellId to Digital Ocean Spaces image URL
103-
const CORNELL_ID_TO_IMAGE_URL: Record<number, string> = {
104-
31: 'https://appdev-upload.nyc3.digitaloceanspaces.com/eatery-images/104-West.jpg',
105-
7: 'https://appdev-upload.nyc3.digitaloceanspaces.com/eatery-images/Amit-Bhatia-Libe-Cafe.jpg',
106-
8: 'https://appdev-upload.nyc3.digitaloceanspaces.com/eatery-images/Atrium-Cafe.jpg',
107-
1: 'https://appdev-upload.nyc3.digitaloceanspaces.com/eatery-images/Bear-Necessities.jpg',
108-
25: 'https://appdev-upload.nyc3.digitaloceanspaces.com/eatery-images/Becker-House-Dining.jpg',
109-
10: 'https://appdev-upload.nyc3.digitaloceanspaces.com/eatery-images/Big-Red-Barn.jpg',
110-
11: 'https://appdev-upload.nyc3.digitaloceanspaces.com/eatery-images/Bug-Stop-Bagels.jpg',
111-
12: 'https://appdev-upload.nyc3.digitaloceanspaces.com/eatery-images/Cafe-Jennie.jpg',
112-
26: 'https://appdev-upload.nyc3.digitaloceanspaces.com/eatery-images/Cook-House-Dining.jpg',
113-
14: 'https://appdev-upload.nyc3.digitaloceanspaces.com/eatery-images/Cornell-Dairy-Bar.jpg',
114-
41: 'https://appdev-upload.nyc3.digitaloceanspaces.com/eatery-images/Crossings-Cafe.jpg',
115-
32: 'https://appdev-upload.nyc3.digitaloceanspaces.com/eatery-images/frannys.jpg',
116-
16: 'https://appdev-upload.nyc3.digitaloceanspaces.com/eatery-images/Goldies-Cafe.jpg',
117-
15: 'https://appdev-upload.nyc3.digitaloceanspaces.com/eatery-images/Green-Dragon.jpg',
118-
24: 'https://appdev-upload.nyc3.digitaloceanspaces.com/eatery-images/Hot-Dog-Cart.jpg',
119-
34: 'https://appdev-upload.nyc3.digitaloceanspaces.com/eatery-images/icecreamcart.jpg',
120-
27: 'https://appdev-upload.nyc3.digitaloceanspaces.com/eatery-images/Jansens-Dining.jpg',
121-
28: 'https://appdev-upload.nyc3.digitaloceanspaces.com/eatery-images/Jansens-Market.jpg',
122-
29: 'https://appdev-upload.nyc3.digitaloceanspaces.com/eatery-images/Keeton-House-Dining.jpg',
123-
42: 'https://appdev-upload.nyc3.digitaloceanspaces.com/eatery-images/Mann-Cafe.jpg',
124-
18: 'https://appdev-upload.nyc3.digitaloceanspaces.com/eatery-images/Marthas-Cafe.jpg',
125-
19: 'https://appdev-upload.nyc3.digitaloceanspaces.com/eatery-images/Mattins-Cafe.jpg',
126-
33: 'https://appdev-upload.nyc3.digitaloceanspaces.com/eatery-images/mccormicks.jpg',
127-
3: 'https://appdev-upload.nyc3.digitaloceanspaces.com/eatery-images/North-Star.jpg',
128-
20: 'https://appdev-upload.nyc3.digitaloceanspaces.com/eatery-images/Okenshields.jpg',
129-
4: 'https://appdev-upload.nyc3.digitaloceanspaces.com/eatery-images/Risley-Dining.jpg',
130-
5: 'https://appdev-upload.nyc3.digitaloceanspaces.com/eatery-images/Risley-Dining.jpg', // RPCC uses same image
131-
30: 'https://appdev-upload.nyc3.digitaloceanspaces.com/eatery-images/Rose-House-Dining.jpg',
132-
21: 'https://appdev-upload.nyc3.digitaloceanspaces.com/eatery-images/Rustys.jpg',
133-
13: 'https://appdev-upload.nyc3.digitaloceanspaces.com/eatery-images/StraightMarket.jpg',
134-
23: 'https://appdev-upload.nyc3.digitaloceanspaces.com/eatery-images/Trillium.jpg',
135-
43: 'https://appdev-upload.nyc3.digitaloceanspaces.com/eatery-images/Morrison-Dining.jpg',
136-
44: 'https://appdev-upload.nyc3.digitaloceanspaces.com/eatery-images/novicks-cafe.jpg',
137-
45: 'https://appdev-upload.nyc3.digitaloceanspaces.com/eatery-images/vets-cafe.jpg',
138-
// Static eateries (negative IDs)
139-
[-33]: 'https://appdev-upload.nyc3.digitaloceanspaces.com/eatery-images/Terrace.jpg',
140-
[-34]: 'https://appdev-upload.nyc3.digitaloceanspaces.com/eatery-images/Macs-Cafe.jpg',
141-
[-35]: 'https://appdev-upload.nyc3.digitaloceanspaces.com/eatery-images/Zeus.jpg',
142-
[-36]: 'https://appdev-upload.nyc3.digitaloceanspaces.com/eatery-images/Gimme-Coffee.jpg',
143-
[-37]: 'https://appdev-upload.nyc3.digitaloceanspaces.com/eatery-images/Louies-Lunch.jpg',
144-
[-38]: 'https://appdev-upload.nyc3.digitaloceanspaces.com/eatery-images/Anabels-Grocery.jpg',
145-
[-46]: 'https://appdev-upload.nyc3.digitaloceanspaces.com/eatery-images/Freege.jpg',
103+
// Mapping from cornellId to image filename (relative to base URL)
104+
const CORNELL_ID_TO_IMAGE_FILENAME: Record<number, string> = {
105+
31: '104-West.jpg',
106+
7: 'Amit-Bhatia-Libe-Cafe.jpg',
107+
8: 'Atrium-Cafe.jpg',
108+
1: 'Bear-Necessities.jpg',
109+
25: 'Becker-House-Dining.jpg',
110+
10: 'Big-Red-Barn.jpg',
111+
11: 'Bug-Stop-Bagels.jpg',
112+
12: 'Cafe-Jennie.jpg',
113+
26: 'Cook-House-Dining.jpg',
114+
14: 'Cornell-Dairy-Bar.jpg',
115+
41: 'Crossings-Cafe.jpg',
116+
32: 'frannys.jpg',
117+
16: 'Goldies-Cafe.jpg',
118+
15: 'Green-Dragon.jpg',
119+
24: 'Hot-Dog-Cart.jpg',
120+
34: 'icecreamcart.jpg',
121+
27: 'Jansens-Dining.jpg',
122+
28: 'Jansens-Market.jpg',
123+
29: 'Keeton-House-Dining.jpg',
124+
42: 'Mann-Cafe.jpg',
125+
18: 'Marthas-Cafe.jpg',
126+
19: 'Mattins-Cafe.jpg',
127+
33: 'mccormicks.jpg',
128+
3: 'North-Star.jpg',
129+
20: 'Okenshields.jpg',
130+
4: 'Risley-Dining.jpg',
131+
5: 'Risley-Dining.jpg',
132+
30: 'Rose-House-Dining.jpg',
133+
21: 'Rustys.jpg',
134+
13: 'StraightMarket.jpg',
135+
23: 'Trillium.jpg',
136+
43: 'Morrison-Dining.jpg',
137+
44: 'novicks-cafe.jpg',
138+
45: 'vets-cafe.jpg',
139+
// Static eateries
140+
[-33]: 'Terrace.jpg',
141+
[-34]: 'Macs-Cafe.jpg',
142+
[-35]: 'Zeus.jpg',
143+
[-36]: 'Gimme-Coffee.jpg',
144+
[-37]: 'Louies-Lunch.jpg',
145+
[-38]: 'Anabels-Grocery.jpg',
146+
[-46]: 'Freege.jpg',
146147
};
147148

148149
export function mapImageUrl(cornellId: number): string {
149-
const imageUrl = CORNELL_ID_TO_IMAGE_URL[cornellId];
150-
if (!imageUrl) {
150+
const imageFilename = CORNELL_ID_TO_IMAGE_FILENAME[cornellId];
151+
if (!imageFilename) {
151152
throw new Error(`No image URL mapping found for cornellId: ${cornellId}`);
152153
}
153-
return imageUrl;
154+
return `${EATERY_IMAGES_BASE_URL}${imageFilename}`;
154155
}
155156

156157
export function weekdayToDayOfWeek(weekday: string): number {
157-
const weekdays: Record<string, number> = {
158-
Sunday: 0,
159-
Monday: 1,
160-
Tuesday: 2,
161-
Wednesday: 3,
162-
Thursday: 4,
163-
Friday: 5,
164-
Saturday: 6,
165-
};
166-
return weekdays[weekday] ?? 1; // Default to Monday if not found
158+
if (Object.values(Weekday).includes(weekday as Weekday)) {
159+
return WEEKDAY_TO_DAY_OF_WEEK[weekday as Weekday];
160+
}
161+
// default to Monday if not found
162+
return WEEKDAY_TO_DAY_OF_WEEK[Weekday.MONDAY];
167163
}
168164

169165
export function parseTime(timeStr: string): { hours: number; minutes: number } {
170166
const [hours, minutes] = timeStr.split(':').map(Number);
171167
return { hours: hours ?? 0, minutes: minutes ?? 0 };
172168
}
173169

174-
/**
175-
* Create a date for a specific weekday and time (for recurring weekly events)
176-
*/
177170
export function createWeeklyDate(weekday: string, timeStr: string, baseDate: Date = new Date()): Date {
178171
const dayOfWeek = weekdayToDayOfWeek(weekday);
179172
const { hours, minutes } = parseTime(timeStr);
180-
181173
const date = new Date(baseDate);
182174
const currentDay = date.getDay();
183175
const daysUntilTarget = (dayOfWeek - currentDay + 7) % 7;

0 commit comments

Comments
 (0)