/EventSchedulerCLI

An event scheduler/organizer Java CLI program made by a team of 5. Includes a robust messenger system with group chat functionality created by me. See README.txt for instructions.

Primary LanguageHTML

Hi there!

Upon starting the program, you would be provided with 3 options:
(1) Login (2) Explore as a Guest (3) Exit and Save the Program

You can choose to explore as a Guest without logging in. The only function you can enjoy is to browse all scheduled
events.

Alternatively, you can use any of the following credentials to log in and interact more with our program (e.g. sign up
for an event, add friend, send message, etc.):

Organizer Role - Email: organizer1@conference.com / Password: organizer1
               - Email: jessica@coldmail.com / Password: jessica1

Speaker Role   - Email: speaker1@conference.com / Password: speaker1

Attendee Role  - Email: attendee1@conference.com / Password: attendee1
               - Email: attendee2@conference.com / Password: attendee2
               - Email: andrew@coldmail.com / Password: andrew1
               - Email: calvin@coldmail.com / Password: calvin1
               - Email: irene@coldmail.com / Password: irene1
               - Email: laxan@coldmail.com / Password: laxan1
               - Email: nate@coldmail.com / Password: nate1
               - Email: nina@coldmail.com / Password: nina1
               - Email: sebin@coldmail.com / Password: sebin1
               - Email: sophie@coldmail.com / Password: sophie1
               Note: Everyone from our group should be friends with everyone else on our group.
               Note: Everyone from our group should be enrolled in at least 1 event, without duplicates.

[Added]VIP Role - Email: vip1@conference.com / Password: vip1


After you successfully log in, you will be provided a menu of options and you can select the option using the index
and/or typing the name of the option. We try to make the option self-explanatory and everything from this point should
be straightforward.


Please make sure to use the "Exit and Save the Program" option when closing the program as that will preserve and save
the data.

Note:
We pre-generate sample users, events, rooms, friends, and conversations data on first launch. We save ALL program
information if you Exit and Save the Program successfully.


Additional Files:

1. The list of features in Phase 2 under "AdditionalFiles" folder

2. The demo video of our program was sent to you by Sebin.

3. The UML and Javadoc diagrams can be found under the "apidocs" folder

4. The text file explaining major improvements can be found under "AdditionalFiles" folder

5. The text file explaining design patterns we used and not can be found under "AdditionalFiles" folder.

Thank you for your time. We hope you like the program!

- group 0161

========================
Different Users Instructions
========================

About Attendee

    Attendee is the basic user type in our program. Attendees are able to access messenger, view events and register/cancel
    an event when they are logged in. Detailed functions will be shown in the menu.


About Organizer

    Organizer inherits all the functions from Attendee. Additionally, Organizer can manage events, manage users, manage
    user requests and view summary data of conferences. Detailed functions will be shown in the menu.


About Speaker

    Speaker inherits all the functions from Attendee. Additionally, Speaker can view the events he gives as well as view
    the attendees and send message to them.


About Guest

    Guest does not inherits functions from Attendee. Guests can be either interpreted as users, or non-users. It really
    depend on how we view them. The idea is that we won't need to login if we want to use a program as a guest. However,
    unlike other users that require you to login, guests have heavier restrictions on what actions they can take.

    Basically, guests will only be able to explore the program. In other words, the guests can view events,
    including viewing events by speakers and days. No other actions are provided.

    How? Simply select Explore as a Guest. For further actions, we encourage to log-in!


About Vip User

    Vips have access to all the actions that any other Attendees can take, but also with extra features.
    Let us introduce the main features of Vip!

    1. Vip users can manage their own interested event list. They can show their interest in some events and
     keep them as a wishlist to sign up in the future or just to remember which they liked. Similarly, they
     can remove an event from their interested events, whenever they want to. They can view their list
     to see what they liked, maybe to recommend to their friends about some of them, or to look up for
     speakers if they want to!

     How? Select "Manage Interested Events" and choose the relevant options.


    2. Vips also can manage their favourite speakers list. They can add/remove a speaker as their favourites
     and view whenever they want. You might notice that this list works almost the same as the interested events,
     except that it acts like a "following" list in social media. That is, vips will get notified when there
     are new events schedules with their favourite speakers. This is done by a messenger.

     How? Select "Manage Favourite Speakers" and choose the relevant options.


    3. Vips can hold a party. Note that it is restricted as a party particularly, so they cannot invite
     speakers, even if they are their favourites. They get to choose which rooms they want
     to have a party at, time, duration, and etc.

     How? This is done by the menu option: Host a Party


========================
Messenger Instructions
========================

The first option presented to all users is 'Enter Messenger'. Upon selection, the user enters the messenger subprogram.
Here you can view all of your (i.e. the logged in user's) conversations and their messages, along with your friends list.
The messenger subprogram has it's own list of options and all future input prompts (preceded by '[Messenger]') will be
for selecting actions from this list. To exit the subprogram and return to the main menu, enter the exit option ('8').

A few users have demo conversations included with this build. Note that all demo messages will have the same time (the
time of program execution).

To create a new conversation you can send a message to a user (or users) that you do not currently have a conversation
with. Attendees must both have each other on their respective friends lists to start a conversation, organizers and
speakers have no such requirement.

When prompts ask for an index (such as a conversation or recipient index), look at the number to the left of the desired
item when viewing your conversations/friends list. This is the index. If you want to message a user that's not on your
friends list (and if you have the permissions to do so), you can alternatively enter the recipient's email.

Special messenger functions only accessible by Organizers and Speakers (such as the ability to message all attendees of
an event) are accessed outside of the messenger subprogram, listed as additional options in the main menu.


========================
Events Instructions
========================

Each event has its unique ID, attendees list, room, capacity, speaker(s), event date and time, and duration of event.

Event can be created or cancelled by an organizer. Room, capacity, speaker(s), event date and time, and duration of
event are set when organizer creates an event.

- Room: Organizers need to specify a room and may request special features in the room when creating an event.
- Capacity: Each event has a maximum number of people who can attend it. This amount can be set when the event is
created and also changed later, by an organizer. our program should check the maximum capacity for the room where the
event will be held, and prevent the number of attendees from going above the room's capacity.
- Speaker: This is optional as there are many types of events: one-speaker event, multi-speaker events, and no-speaker
events.
- Event date and time: The date should be entered in the format of dd/mm/yyyy HH:MM
- Event duration: Events can last from 1 to 23 hours and it must be increment in hour, e.g. an event cannot be 1 hour
and 40 minutes


========================
Room Instructions
========================

Room is the place where every event is held. Each room has its unique ID, name, capacity, opening hours, the schedule,
list of features.

Room can be created by an organizer. Name, capacity and opening hours are set when organizer creates a room.

- Opening hours: Rooms also have its own opening and closing time and all events must start and end during this period.
Longest room can open for each day is from 00:00 to 23:00 (can be shorter of course, depending on how the room is
created by organizer). There will be at least 1 hour down time everyday from 23:00 to 00:00 where no events can be
scheduled for.