Add series management and ticketing features: Introduce series event functionality in event creation, enhance event display with series information, and implement ticketing options for public events. Update layouts and improve form handling for better user experience.

This commit is contained in:
Jennie Robinson Faber 2025-08-27 20:40:54 +01:00
parent c3a29fa47c
commit a88aa62198
24 changed files with 2897 additions and 44 deletions

View file

@ -0,0 +1,187 @@
import { connectDB } from '../server/utils/mongoose.js'
import Event from '../server/models/event.js'
async function seedSeriesEvents() {
try {
await connectDB()
console.log('Connected to database')
// Workshop Series: "Cooperative Game Development Fundamentals"
const workshopSeries = [
{
title: 'Cooperative Business Models in Game Development',
slug: 'coop-business-models-workshop',
tagline: 'Learn the foundations of cooperative business structures',
description: 'An introductory workshop covering the basic principles and structures of worker cooperatives in the game development industry.',
content: 'This workshop will cover the legal structures, governance models, and financial frameworks that make cooperative game studios successful.',
startDate: new Date('2024-10-15T19:00:00.000Z'),
endDate: new Date('2024-10-15T21:00:00.000Z'),
eventType: 'workshop',
location: '#workshop-fundamentals',
isOnline: true,
membersOnly: false,
registrationRequired: true,
maxAttendees: 50,
series: {
id: 'coop-dev-fundamentals',
title: 'Cooperative Game Development Fundamentals',
description: 'A comprehensive workshop series covering the essentials of building and running cooperative game studios',
type: 'workshop_series',
position: 1,
totalEvents: 4,
isSeriesEvent: true
},
createdBy: 'admin'
},
{
title: 'Democratic Decision Making in Creative Projects',
slug: 'democratic-decision-making-workshop',
tagline: 'Practical tools for collaborative project management',
description: 'Learn how to implement democratic decision-making processes that work for creative teams and game development projects.',
content: 'This workshop focuses on consensus building, conflict resolution, and collaborative project management techniques.',
startDate: new Date('2024-10-22T19:00:00.000Z'),
endDate: new Date('2024-10-22T21:00:00.000Z'),
eventType: 'workshop',
location: '#workshop-fundamentals',
isOnline: true,
membersOnly: false,
registrationRequired: true,
maxAttendees: 50,
series: {
id: 'coop-dev-fundamentals',
title: 'Cooperative Game Development Fundamentals',
description: 'A comprehensive workshop series covering the essentials of building and running cooperative game studios',
type: 'workshop_series',
position: 2,
totalEvents: 4,
isSeriesEvent: true
},
createdBy: 'admin'
},
{
title: 'Funding and Financial Models for Co-ops',
slug: 'coop-funding-workshop',
tagline: 'Sustainable financing for cooperative studios',
description: 'Explore funding options, revenue sharing models, and financial management strategies specific to cooperative game studios.',
content: 'This workshop covers grant opportunities, crowdfunding strategies, and internal financial management for worker cooperatives.',
startDate: new Date('2024-10-29T19:00:00.000Z'),
endDate: new Date('2024-10-29T21:00:00.000Z'),
eventType: 'workshop',
location: '#workshop-fundamentals',
isOnline: true,
membersOnly: false,
registrationRequired: true,
maxAttendees: 50,
series: {
id: 'coop-dev-fundamentals',
title: 'Cooperative Game Development Fundamentals',
description: 'A comprehensive workshop series covering the essentials of building and running cooperative game studios',
type: 'workshop_series',
position: 3,
totalEvents: 4,
isSeriesEvent: true
},
createdBy: 'admin'
},
{
title: 'Building Your Cooperative Studio',
slug: 'building-coop-studio-workshop',
tagline: 'From concept to reality: launching your co-op',
description: 'A practical guide to forming a cooperative game studio, covering legal formation, member recruitment, and launch strategies.',
content: 'This final workshop in the series provides a step-by-step guide to actually forming and launching a cooperative game studio.',
startDate: new Date('2024-11-05T19:00:00.000Z'),
endDate: new Date('2024-11-05T21:00:00.000Z'),
eventType: 'workshop',
location: '#workshop-fundamentals',
isOnline: true,
membersOnly: false,
registrationRequired: true,
maxAttendees: 50,
series: {
id: 'coop-dev-fundamentals',
title: 'Cooperative Game Development Fundamentals',
description: 'A comprehensive workshop series covering the essentials of building and running cooperative game studios',
type: 'workshop_series',
position: 4,
totalEvents: 4,
isSeriesEvent: true
},
createdBy: 'admin'
}
]
// Monthly Community Meetup Series
const meetupSeries = [
{
title: 'October Community Meetup',
slug: 'october-community-meetup',
tagline: 'Monthly gathering for cooperative game developers',
description: 'Join fellow cooperative game developers for informal networking, project sharing, and community building.',
content: 'Our monthly community meetup provides a relaxed environment to share your projects, get feedback, and connect with other developers interested in cooperative models.',
startDate: new Date('2024-10-12T18:00:00.000Z'),
endDate: new Date('2024-10-12T20:00:00.000Z'),
eventType: 'community',
location: '#community-meetup',
isOnline: true,
membersOnly: false,
registrationRequired: false,
series: {
id: 'monthly-meetups',
title: 'Monthly Community Meetups',
description: 'Regular monthly gatherings for the cooperative game development community',
type: 'recurring_meetup',
position: 1,
totalEvents: 12,
isSeriesEvent: true
},
createdBy: 'admin'
},
{
title: 'November Community Meetup',
slug: 'november-community-meetup',
tagline: 'Monthly gathering for cooperative game developers',
description: 'Join fellow cooperative game developers for informal networking, project sharing, and community building.',
content: 'Our monthly community meetup provides a relaxed environment to share your projects, get feedback, and connect with other developers interested in cooperative models.',
startDate: new Date('2024-11-09T18:00:00.000Z'),
endDate: new Date('2024-11-09T20:00:00.000Z'),
eventType: 'community',
location: '#community-meetup',
isOnline: true,
membersOnly: false,
registrationRequired: false,
series: {
id: 'monthly-meetups',
title: 'Monthly Community Meetups',
description: 'Regular monthly gatherings for the cooperative game development community',
type: 'recurring_meetup',
position: 2,
totalEvents: 12,
isSeriesEvent: true
},
createdBy: 'admin'
}
]
// Insert all series events
const allSeriesEvents = [...workshopSeries, ...meetupSeries]
for (const eventData of allSeriesEvents) {
const existingEvent = await Event.findOne({ slug: eventData.slug })
if (!existingEvent) {
const event = new Event(eventData)
await event.save()
console.log(`Created series event: ${event.title}`)
} else {
console.log(`Series event already exists: ${eventData.title}`)
}
}
console.log('Series events seeding completed!')
process.exit(0)
} catch (error) {
console.error('Error seeding series events:', error)
process.exit(1)
}
}
seedSeriesEvents()