ShadowHokageForge / event-management-system

0 stars 0 forks source link

Complete Requirement #1

Open SixPathsSage opened 1 month ago

SixPathsSage commented 1 month ago

Project Title: Event Management System

Project Overview:

Create a robust Event Management System that allows users to create, manage, and attend events. The system will utilize microservices to handle different functionalities such as user management, event creation, ticketing, and notifications.

Core Features:

  1. User Authentication and Management:

    • Use Keycloak for user authentication and authorization.
    • Implement roles (admin, organizer, attendee) with fine-grained access control.
  2. Event Creation and Management:

    • Allow users to create, edit, and delete events.
    • Use a microservice to handle event details, stored in PostgreSQL.
  3. Ticketing System:

    • Implement a ticketing service where users can purchase tickets for events.
    • User should be able to select the seat.
    • Store ticket information and user purchases in PostgreSQL.
  4. Real-time Notifications:

    • Use Kafka for messaging to handle real-time notifications (e.g., ticket purchases, event reminders).
    • Integrate with a notification service that can send emails or SMS.
  5. Caching for Performance:

    • Utilize Redis to cache frequently accessed data, such as popular events or user sessions, to improve response times.
  6. Search and Analytics:

    • Use Elasticsearch to provide powerful search capabilities for events (by date, location, type).
    • Implement analytics to track user interactions and event popularity.
  7. Microservices Architecture:

    • Separate the application into microservices:
      • User Service
      • Event Service
      • Ticket Service
      • Notification Service
      • Search Service

Technical Implementation:

Bonus Features:

Project Phases:

  1. Design: Create architecture diagrams, database schemas, and API specifications.
  2. Implementation: Develop each microservice, configure communication between them, and set up your database.
  3. Testing: Write unit tests and integration tests for your services.
  4. Deployment: Use Docker for containerization and orchestrate using Kubernetes or Docker Compose.
  5. Documentation: Document your APIs and provide user instructions.

Here’s the functional and non-functional requirements for the Event Management System:

Functional Requirements

  1. User Management:

    • Users can register and create an account.
    • Users can log in and log out using Keycloak.
    • Users can manage their profiles (update details, change passwords).
  2. Role Management:

    • Admins can create and manage user roles (admin, organizer, attendee).
    • Different functionalities are accessible based on user roles.
  3. Event Creation and Management:

    • Organizers can create, edit, and delete events.
    • Event details include title, description, date, time, location, and capacity.
    • Users can view a list of events with filters (date, category, location).
  4. Ticketing System:

    • Users can purchase tickets for events.
    • The system tracks ticket availability and prevents overselling.
    • Users can view their purchased tickets and event details.
  5. Discussion Forum:

    • Users can post questions and comments related to events.
    • Organizers can respond to user inquiries.
  6. Notifications:

    • Users receive notifications for event updates, reminders, and ticket purchases via email or SMS.
    • Real-time notifications for upcoming events using Kafka.
  7. Search Functionality:

    • Users can search for events using keywords or filters (date, location, type).
    • The search results are retrieved from Elasticsearch.
  8. Analytics Dashboard (Admin Feature):

    • Admins can view analytics on user engagement, popular events, and ticket sales.

Non-Functional Requirements

  1. Performance:

    • The system should handle up to 500 concurrent users without significant performance degradation.
    • Search results should return in less than 2 seconds.
  2. Scalability:

    • The architecture should support horizontal scaling of services to accommodate increased loads during peak times (e.g., event launches).
  3. Availability:

    • The system should have 99.9% uptime to ensure users can access it whenever needed.
  4. Security:

    • All sensitive user data must be encrypted (both at rest and in transit).
    • Implement OAuth2 for secure authentication using Keycloak.
    • User input must be validated and sanitized to prevent SQL injection and other attacks.
  5. Usability:

    • The user interface should be intuitive and easy to navigate for all user roles.
    • The system should provide responsive design to support access from various devices (desktops, tablets, mobile).
  6. Maintainability:

    • The codebase should be modular and follow best practices for microservices architecture.
    • Each service should have clear documentation for easier updates and maintenance.
  7. Data Backup and Recovery:

    • Regular backups of the database and important configurations must be implemented.
    • The system should have a disaster recovery plan to restore services quickly in case of failure.
  8. Compliance:

    • The system should comply with relevant data protection regulations (e.g., GDPR) regarding user data storage and processing.
SixPathsSage commented 1 month ago
SixPathsSage commented 1 month ago

HLD

HLD drawio(1)

SixPathsSage commented 1 month ago

Back end Tech Stack

  1. Java 21
  2. Spring Boot 3
  3. PostgreSQL 16
  4. Keycloak 25
  5. Openresty
  6. Nginx
  7. Elastic Search
  8. Kafka
  9. Jaeger 1.61
  10. Hashicorp Vault
RudhraBharathy commented 1 month ago

Front end Tech Stack

Category Technology Purpose
Frontend Core Library React.js JavaScript library for building user interfaces
Framework Next.js Built on top of React, providing additional features
Styling Tailwind CSS UI design and responsive layout
UI Library Material UI MUI provides a simple, customizable, and accessible library of React components
State Management React Query & Zustand React Query for server data fetching and Zustand for managing local or global client-side state.
Routing React Router Client-side navigation
HTTP Client Apollo Client (GraphQL) Handle GraphQL queries and mutations for flexible data fetching
HTTP Client (for REST) Axios Make HTTP requests to microservices (when GraphQL is not used)
Authentication Keycloak JS Adapter OAuth2-based authentication and role management
Notifications React Toastify Real-time notifications
Forms React Hook Form Efficient form handling and validation
GraphQL GraphQL API (Apollo Client) Flexible querying of data (events, tickets, user info, admin data)
Build Tool Vite Fast build, module bundling, and hot-reload during development
Design & Prototyping Figma UI/UX design, wireframing, and prototyping
SixPathsSage commented 1 month ago

Requirement for MVP 1

  1. User should be able to get on boarded.
  2. User should be able to login.
  3. User shall CRUD events
    • No user groups are there
    • User can create events with event name, description (Markup), event location, event occurrence, event thumbnail and tag
  4. User shall register for an event and able to unregistered for an event
  5. All attendees should be able to add comment, like and unlike and reply to a comment