An AI-powered travel management app leveraging DDD, design patterns, CQRS, and AI integration for dynamic itinerary planning.
Read about the full idea for this project here!
- Bounded Context Definition
- How to Install and Run the Project
- How to Use the Project
- How to Test the Project
This Bounded Context is responsible for user authentication and management. It includes functionalities such as user registration, login, and profile management. Its primary focus is on maintaining user accounts, ensuring secure access, and managing user-related data.
Domain analysis
Entities and Aggregates:
- User: Represents the user's account information, including email, password, and other relevant details.
Value Objects:
- Email: Represents the email address associated with a user's account.
- Password: Encrypted user password stored securely.
Domain Events:
- User Registered: Fired when a new user successfully registers an account.
- User Logged In: Triggered upon successful user login.
- User Profile Updated: Raised when a user's profile information is updated.
Use Cases:
- Register User: Handles the process of user registration by validating input and creating a new user account.
- Login User: Manages user authentication, verifying credentials and granting access upon successful login.
- Update User Profile: Allows users to modify their profile information, such as changing their avatar or updating preferences.
Validations:
- User Registration: Verification of email availability, password strength, confirmation of matching passwords, and duplicate registration prevention.
- Login: Verify user-provided credentials to ensure they match stored records.
- Profile Update: Implement validations to ensure that profile updates are consistent and secure, and that changes are valid.
This Bounded Context collaborates closely with "Itinerary Planning" for personalized travel planning. It ensures a secure and seamless user experience by managing user accounts, authentication, and related processes.
This Bounded Context is dedicated to the process of planning travel itineraries for users. It revolves around assisting users in creating well-structured travel plans based on their preferences, destinations, and available time. The context involves interactions with an AI system to suggest optimal plans.
Domain analysis
Entities and Aggregates:
- User: Represents the user who is planning the travel itinerary.
- Itinerary: Contains information about the planned travel schedule, including destinations, activities, and time frames.
Value Objects:
- Destination: Represents a travel destination, including information like location, name, and attractions.
- Activity: Describes an activity or event to be included in the itinerary, such as sightseeing, dining, or adventure.
Domain Events:
- Itinerary Created: Raised when a user successfully creates a new travel itinerary.
- Itinerary Updated: Triggered upon modifications to an existing itinerary.
- AI Query Requested: Fired when a user requests AI suggestions for itinerary planning.
Use Cases:
- Create Itinerary: Manages the process of creating a new travel itinerary, including selecting destinations, activities, and time frames.
- Update Itinerary: Allows users to modify an existing itinerary by adding or removing destinations and activities.
- Get AI Suggestions: Interacts with the AI system to retrieve itinerary suggestions based on user preferences and constraints.
Validations:
- Validation of Dates and Times: Ensure that the dates and times entered for the TimeFrames are consistent and that the planned activities do not overlap in time.
- Destination Validation: Verify that the destinations entered exist.
- Validation of Activities: Verify that the activities entered are valid and available at the selected destination.
npm install
npm run start
-
You can access to this route in your browser:
- Local: http://localhost:3000/ping
- Web Server: https://orbitea-service.onrender.com/ping
-
or import this cURL into your Postman:
curl --location 'http://localhost:3000/ping'
The request reponse is going to be a message like this: "pong".
npm run test
npm run test:e2e