feat(sprint7): Phase 2.5 — Club Event Calendar
- Flyway V14: club_events + event_rsvps tables with reminder_sent tracking - Enums: EventType, RsvpStatus, RecurrenceRule + extend AuditEventType/NotificationType - Entities: ClubEvent (extends AbstractTenantEntity), EventRsvp (unique event+member) - Repositories: ClubEventRepository, EventRsvpRepository with date-range and status queries - EventService: CRUD, RSVP with maxAttendees enforcement (409 if full), iCal RFC 5545 generation, recurring event virtual expansion, notifications on create/cancel, auto-post to Info Board - EventReminderScheduler: hourly check, 24h reminder to ACCEPTED/MAYBE attendees - EventController: admin CRUD (MANAGE_INFO_BOARD permission), portal upcoming events, RSVP endpoint, iCal download (text/calendar), attendee list - Frontend: events.ts service (React Query hooks matching apiClient pattern), admin calendar page (month grid with event dots, create dialog, event cards), portal events page (RSVP buttons, capacity display) - Navigation: added Kalender with Calendar icon - i18n: events.* keys in de.json and en.json - UI: added @radix-ui/react-switch + Switch component
This commit is contained in:
@@ -717,5 +717,41 @@
|
||||
"noPosts": "No posts yet. Create the first one!",
|
||||
"confirmDelete": "Are you sure you want to delete this post?",
|
||||
"unreadCount": "{count} unread"
|
||||
},
|
||||
"events": {
|
||||
"title": "Calendar",
|
||||
"description": "Club events and appointments",
|
||||
"portalTitle": "Events",
|
||||
"portalDescription": "Upcoming events from your club",
|
||||
"createEvent": "Create Event",
|
||||
"upcomingEvents": "Upcoming Events",
|
||||
"noUpcomingEvents": "No upcoming events",
|
||||
"noEventsOnDay": "No events on this day",
|
||||
"cancel": "Cancel",
|
||||
"full": "Fully booked",
|
||||
"form": {
|
||||
"title": "Title",
|
||||
"type": "Type",
|
||||
"start": "Start",
|
||||
"end": "End",
|
||||
"location": "Location",
|
||||
"description": "Description",
|
||||
"maxAttendees": "Max Attendees",
|
||||
"recurring": "Recurring",
|
||||
"recurrenceRule": "Recurrence",
|
||||
"recurrenceEnd": "End Date"
|
||||
},
|
||||
"rsvp": {
|
||||
"accept": "Accept",
|
||||
"decline": "Decline",
|
||||
"maybe": "Maybe"
|
||||
},
|
||||
"types": {
|
||||
"MEETING": "Member Meeting",
|
||||
"HARVEST_FESTIVAL": "Harvest Festival",
|
||||
"BOARD_MEETING": "Board Meeting",
|
||||
"WORKSHOP": "Workshop",
|
||||
"OTHER": "Other"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user