Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
6 changes: 3 additions & 3 deletions backend/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions backend/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -54,5 +54,8 @@
"ts-node": "^10.9.2",
"typescript": "^5.7.2",
"vitest": "^4.0.18"
},
"overrides": {
"ip-address": "^10.4.0"
}
}
56 changes: 56 additions & 0 deletions backend/prisma/activityCatalog.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
export const ACTIVITY_CATEGORIES = [
'Academic / Study',
'Sports',
'Fitness & Wellness',
'Social & Events',
'Gaming',
'Volunteering',
'Food',
'Music & Arts',
] as const;

export const ACTIVITY_CATALOG = [
{ id: '72d0fe6d-53f3-46f3-96ef-036e4abb2e1c', title: 'Study group', description: 'Meet classmates for a focused study session. Put the class or subject in the pod title.', category: 'Academic / Study', defaultLocation: 'Thompson Library', artworkKey: 'study-group', sortOrder: 1 },
{ id: 'e39c7e9d-beb9-4a97-b6a8-23e67c870747', title: 'Reading / book club', description: 'Read together or meet to discuss a book, article, or series.', category: 'Academic / Study', defaultLocation: 'Thompson Library', artworkKey: 'reading-book-club', sortOrder: 2 },
{ id: '1d155e8f-1f8d-4c6d-a2f6-835c6326ff70', title: 'Pickup basketball', description: 'Start a casual basketball game for any skill level.', category: 'Sports', defaultLocation: 'RPAC', artworkKey: 'pickup-basketball', sortOrder: 3 },
{ id: 'cbf6ccf6-8865-498d-9b2a-8a7299f6207d', title: 'Pickup soccer', description: 'Get a group together for a casual soccer game or kickaround.', category: 'Sports', defaultLocation: 'Lincoln Tower Fields', artworkKey: 'pickup-soccer', sortOrder: 4 },
{ id: '8092ae28-02aa-4cd3-98ca-0546eaf4ed6e', title: 'Pickup volleyball', description: 'Play a casual indoor, grass, or sand volleyball game.', category: 'Sports', defaultLocation: 'RPAC', artworkKey: 'pickup-volleyball', sortOrder: 5 },
{ id: '679b4e61-84d7-40c5-bdf3-8d5034732800', title: 'Tennis / pickleball', description: 'Find a partner or group for tennis or pickleball.', category: 'Sports', defaultLocation: 'RPAC', artworkKey: 'tennis-pickleball', sortOrder: 6 },
{ id: '28b42d34-e447-4abf-bbed-8d69564ac345', title: 'Running / jogging', description: 'Meet for a run or jog at the pace named in the pod title.', category: 'Sports', defaultLocation: 'The Oval', artworkKey: 'running-jogging', sortOrder: 7 },
{ id: '9728004d-2e19-45bb-884b-25ac34f3fa85', title: 'Swimming', description: 'Swim laps, train, or enjoy the pool with other students.', category: 'Sports', defaultLocation: 'Aquatic Center', artworkKey: 'swimming', sortOrder: 8 },
{ id: 'cd08f480-6715-4f50-8a02-1c6bed0f1a6a', title: 'Golf', description: 'Find people for a round, the driving range, or putting practice.', category: 'Sports', defaultLocation: 'OSU Golf Club', artworkKey: 'golf', sortOrder: 9 },
{ id: 'f22d21db-de3d-4e34-9abb-4ab6081c30c0', title: 'Bowling', description: 'Meet up for a casual game or a full night at the lanes.', category: 'Sports', defaultLocation: 'Columbus Square Bowling Palace', artworkKey: 'bowling', sortOrder: 10 },
{ id: '9349d2fa-681b-4362-abfb-1184e0b3b56e', title: 'Frisbee', description: 'Toss a disc or organize a casual ultimate game.', category: 'Sports', defaultLocation: 'The Oval', artworkKey: 'frisbee', sortOrder: 11 },
{ id: 'a54f0bb9-f422-4264-ad52-97b65859b98d', title: 'Gym partner', description: 'Find a partner for lifting, cardio, or a shared workout plan.', category: 'Fitness & Wellness', defaultLocation: 'RPAC', artworkKey: 'gym-partner', sortOrder: 12 },
{ id: '685728ff-703c-4069-92e9-c960254aa849', title: 'Yoga', description: 'Practice yoga together at the style and level named in the pod title.', category: 'Fitness & Wellness', defaultLocation: 'RPAC – Mind Body Studio', artworkKey: 'yoga', sortOrder: 13 },
{ id: '61eab34d-b1ed-47b8-9717-72614dab36a1', title: 'Meditation', description: 'Meet for guided or quiet meditation and reflection.', category: 'Fitness & Wellness', defaultLocation: 'RPAC – Wellness Space', artworkKey: 'meditation', sortOrder: 14 },
{ id: '3e6d1eb8-6836-4012-8f3b-d178a743d5dd', title: 'Nature walk', description: 'Take a relaxed walk through a trail, park, or green space.', category: 'Fitness & Wellness', defaultLocation: 'Olentangy Trail', artworkKey: 'nature-walk', sortOrder: 15 },
{ id: 'd90ef6da-2d3f-42b8-9b77-e475de983a2b', title: 'Casual hangout', description: 'Make a low-pressure plan to meet, talk, and spend time together.', category: 'Social & Events', defaultLocation: 'Ohio Union', artworkKey: 'casual-hangout', sortOrder: 16 },
{ id: '7e3da896-a1c5-49b2-b035-590ddca48b0a', title: 'Movie / watch party', description: 'Watch a movie, show, game, or special event together.', category: 'Social & Events', defaultLocation: 'Ohio Union', artworkKey: 'movie-watch-party', sortOrder: 17 },
{ id: 'd202b3ec-71f6-4e51-a80d-f2cddcdef4bd', title: 'Go to an event', description: 'Find people to join you at a campus event, show, festival, or game.', category: 'Social & Events', defaultLocation: 'Ohio Union', artworkKey: 'go-to-event', sortOrder: 18 },
{ id: '383ecbb2-64d5-4b10-ad4f-5ca933449b9f', title: 'Video games', description: 'Play console or PC games together, online or in person.', category: 'Gaming', defaultLocation: 'Ohio Union – Esports Arena', artworkKey: 'video-games', sortOrder: 19 },
{ id: '6b14c650-68ff-4fa5-b86f-9e8fcfde8b80', title: 'Board games', description: 'Meet for a board game session from party games to strategy games.', category: 'Gaming', defaultLocation: 'Ohio Union – Game Room', artworkKey: 'board-games', sortOrder: 20 },
{ id: '1661a3f8-ba69-4df3-8477-3b1d2e6ba146', title: 'Card games', description: 'Play traditional, party, or trading card games together.', category: 'Gaming', defaultLocation: 'Ohio Union – Game Room', artworkKey: 'card-games', sortOrder: 21 },
{ id: 'e927a37b-5f02-4683-9b8a-645707528aad', title: 'Tabletop RPGs', description: 'Start or join a tabletop role-playing session, including D&D and other systems.', category: 'Gaming', defaultLocation: 'Ohio Union – Game Room', artworkKey: 'tabletop-rpgs', sortOrder: 22 },
{ id: 'a39d73d8-1450-4173-974f-80d977453c42', title: 'Mobile games', description: 'Play multiplayer mobile games together in person or online.', category: 'Gaming', defaultLocation: 'Ohio Union', artworkKey: 'mobile-games', sortOrder: 23 },
{ id: 'effe238b-8544-44c8-9272-ba1d01ee8300', title: 'Trivia', description: 'Form a team for trivia or host a casual question night.', category: 'Gaming', defaultLocation: 'Ohio Union', artworkKey: 'trivia', sortOrder: 24 },
{ id: '36291822-ce76-4cb5-85bf-aa6c2132cfb7', title: 'Chess', description: 'Play casual or competitive chess at any experience level.', category: 'Gaming', defaultLocation: 'Ohio Union – Game Room', artworkKey: 'chess', sortOrder: 25 },
{ id: '82e17e62-90fd-4cd1-b1a2-900f78ec42b8', title: 'Food bank volunteering', description: 'Volunteer together sorting, packing, or distributing food.', category: 'Volunteering', defaultLocation: 'Ohio Union – Service Hub', artworkKey: 'food-bank-volunteering', sortOrder: 26 },
{ id: '66db8b24-0096-448e-b694-0deed5a37788', title: 'Animal shelter volunteering', description: 'Volunteer together to support shelter animals and staff.', category: 'Volunteering', defaultLocation: 'Ohio Union – Service Hub', artworkKey: 'animal-shelter-volunteering', sortOrder: 27 },
{ id: 'a765a5eb-586c-4723-8981-0e0c6f6ab73d', title: 'Medical center volunteering', description: 'Coordinate an approved volunteer opportunity at a medical center.', category: 'Volunteering', defaultLocation: 'Wexner Medical Center', artworkKey: 'medical-center-volunteering', sortOrder: 28 },
{ id: 'bcd2c629-0871-4e9b-bc5f-749c14fc5178', title: 'Other volunteering', description: 'Organize another service opportunity and name it in the pod title.', category: 'Volunteering', defaultLocation: 'Ohio Union – Service Hub', artworkKey: 'other-volunteering', sortOrder: 29 },
{ id: '56a9cab0-330c-489b-b77a-792b433e29df', title: 'Cook together', description: 'Plan and cook a meal together in a shared kitchen.', category: 'Food', defaultLocation: 'Residence Hall – Community Kitchen', artworkKey: 'cook-together', sortOrder: 30 },
{ id: '3f8d1ccf-b120-4275-9db8-238e082fe312', title: 'Eat at a restaurant', description: 'Choose a restaurant and meet for a meal together.', category: 'Food', defaultLocation: 'High Street', artworkKey: 'eat-at-restaurant', sortOrder: 31 },
{ id: '71578f3e-2d48-4707-a36e-583d5fe4caa9', title: 'Eat at a dining hall', description: 'Meet for breakfast, lunch, or dinner at a campus dining hall.', category: 'Food', defaultLocation: 'Traditions at Scott', artworkKey: 'eat-at-dining-hall', sortOrder: 32 },
{ id: 'fb5a4165-6947-483d-a2d7-9b1627c58c9d', title: 'Grab coffee or tea', description: 'Meet at a café for coffee, tea, or conversation.', category: 'Food', defaultLocation: 'Berry Café', artworkKey: 'grab-coffee-tea', sortOrder: 33 },
{ id: '6bf75ec3-0f5f-412c-b945-3292ef362b57', title: 'Bake something', description: 'Bake a dessert, bread, or snack together.', category: 'Food', defaultLocation: 'Residence Hall – Community Kitchen', artworkKey: 'bake-something', sortOrder: 34 },
{ id: '7041a05d-2346-4d19-bc24-7909e1b53dd1', title: 'Picnic', description: 'Bring food or snacks and meet for a picnic outdoors.', category: 'Food', defaultLocation: 'The Oval', artworkKey: 'picnic', sortOrder: 35 },
{ id: 'c2132a3d-2c08-4668-bb42-e4f9bdfaba63', title: 'Draw / paint together', description: 'Bring art supplies and make visual art together at any skill level.', category: 'Music & Arts', defaultLocation: 'Hopkins Hall', artworkKey: 'draw-paint', sortOrder: 36 },
{ id: 'dd90d5bc-46d1-47e2-97b3-47a85978ff0c', title: 'Crafting', description: 'Meet to make, build, sew, or craft something together.', category: 'Music & Arts', defaultLocation: 'Ohio Union', artworkKey: 'crafting', sortOrder: 37 },
{ id: '5749bd6e-295d-4a8e-b9ef-7ab225c18638', title: 'Creative writing', description: 'Write, share, or workshop stories, poetry, and other creative work.', category: 'Music & Arts', defaultLocation: 'Denney Hall', artworkKey: 'creative-writing', sortOrder: 38 },
{ id: 'fa8b556c-ced4-4722-9dbe-1ded282eb2a7', title: 'Play / practice music', description: 'Practice, jam, or make music together with instruments or voice.', category: 'Music & Arts', defaultLocation: 'Hughes Hall', artworkKey: 'play-practice-music', sortOrder: 39 },
{ id: 'c7c364fd-1583-4788-9747-f4323437789a', title: 'Photography', description: 'Take photos together, practice techniques, or go on a photo walk.', category: 'Music & Arts', defaultLocation: 'The Oval', artworkKey: 'photography', sortOrder: 40 },
{ id: '9be77ee1-8b32-424b-b32d-e9885ff2af92', title: 'Dance', description: 'Practice, learn, or freestyle a dance style together.', category: 'Music & Arts', defaultLocation: 'Sullivant Hall', artworkKey: 'dance', sortOrder: 41 },
] as const;

export type ActivityCatalogEntry = (typeof ACTIVITY_CATALOG)[number];
6 changes: 2 additions & 4 deletions backend/prisma/cleanup-screenshots.ts
Original file line number Diff line number Diff line change
Expand Up @@ -71,10 +71,8 @@ async function main() {
const threads = await prisma.directMessageThread.deleteMany(inIds(m.dmThreads));
const friendships = await prisma.friendship.deleteMany(inIds(m.friendships));
const friendRequests = await prisma.friendRequest.deleteMany(inIds(m.friendRequests ?? []));
// Pod.activityId is onDelete: Restrict, so only delete manifest activities
// that no remaining (real) pod still references. The seed also reuses
// pre-existing activities by title, so some manifest activities may be
// shared with the main seed — skipping in-use ones keeps those intact.
// Current screenshot seeds never create activities. This remains for cleanup
// of older manifests and only removes explicitly recorded, now-unreferenced rows.
const activities = await prisma.activity.deleteMany({
where: { id: { in: m.activities }, pods: { none: {} } },
});
Expand Down
Loading
Loading