Uploaded by mixed77752

Event-Management Tool Requirements

advertisement
Event-Management Project
(Seat Booking Tool)
OVERVIEW
Technical details
Frontend
Backend
1
1
1
1
TARGETS / ‘MILESTONES’
2
FEATURES
Basic Website/Tool
User attributes / data
UI-Mockups
Visitor-View Mainpage (not logged into an account)
Logged in, normal user; seeing an overview of the current event
Logged in admin; Viewing the normal site as a regular user. Additional options in
Navigation
Login-Form (light mode)
Registration form (light mode)
Permission system
Basic permission system
Events
Attributes
Token
Token Attributes
Basic seating
Creating a new seating plan (admin)
Seat plan attributes
Adding/Removing seats to seating plan (admin)
Other Admin-Stuff regarding seating
Seat attributes
Seat colors on grid in UI
Mockup
Advanced seating
Grouped seats
3
3
4
5
5
5
6
6
7
7
7
7
8
8
9
10
10
11
11
11
12
13
13
13
13
Documentation
14
OVERVIEW
A web application for planning events, including seat booking (a web-shop is NOT required to be
developed. When users are buying tickets, they get a ‘token’ (UUID sent via mail)), where users
are able to create an account and use the web app for all communication and actions while being
a guest at an event.
Pretty much all functions shall be doable within the web app, like the layout of the seat plan,
creating the Event-Object and basic user management (eg. re-seating a user) etc.
Of course not any user shall be able to create events, seat plans etc.
Therefore a simple permission system will be required.
In order to keep it simple, hard roles (USER, ADMIN) where any configuration steps are on an
Admin-UI, only accessible by admins, would be enough.
A bit of background and what we used to do, as this tool doesn’t exist yet, can be read in
Feature - Events - Token
Technical details
The code MUST NOT be obfuscated and shall be documented for further development of the
tool.
Frontend
As frontend, MaterializeCss (https://materializecss.com) will be used.
Some Mockups and semi-working UI are already made by me and can/shall be used and
extended.
Some UI-Work is definitely needed. UI-Work on your side doesn’t have to use MaterializeCss. you
may build these parts in with simple styling etc. Materializing it would be done by myself
afterwards than.
Backend
A MariaDB/MySQL database will be used as the backend. Some table definition ideas are already
in the document. These are by no means complete, fully working or anything and need to be
extended by link tables, further attributes etc.
1
TARGETS / ‘MILESTONES’
This is just a list to give a quick overview of the project and the parts of it. Each feature is
specified in detail with images/mockups within the chapter ‘Features’.
1.
Basic website functionality:
A ‘router’ and web-server is implemented to serve the frontend when calling a path.
The frontend is based on templates, combined by the Golang code. Templates are easily
editable.
Users are able to register and login on the web application.
A permission system is implemented to grant access to configuration-features (creating
events, seating plans etc.) only to admins.
Editing/Adding text would be great if possible directly in the web application without
needing to touch html-files. Multi-Language support would also be a nice addition, but
both isn't a deal breaker if not implemented.
2. Creating ‘Events’:
An Event may have multiple seating plans and attendees (‘registered’ users for a specific
event. registration is not the same as ‘registering a new account’ and more like ‘link user
to token so he has access to the event’ as tokens are generated for each event and
therefore directly linked to an event. see Token for further information)
Admins can create these Events within the application (Title of the Event, starting day,
max. attendees, ...). All targets/features below are Part/’Childs’ ’of an event and therefore
linked to an event.
3. Basic seat booking:
Logged in Users, registered for an event, are able to select a seat on the seating plan to
book or reserve that seat.
Each seat can only be booked by a single user.
Admins shall be able to configure the seating plan on the website (and not by using
config-files or in-code).
The seating plan is a grid. It should be possible to add an image as background.
4. Advanced seating system:
There are 2 types of tickets resulting in “Normal” and “Team” users. The type is an
attribute of the tokens.
Therefore multiple ‘seating plans’ must be possible to create for an event. Also the
booking and reservation actions must be dependent on the token-type the user got.
Users shall be able to see information of seats ‘in the other area’, but not able to
book/reserve seats in an area apart from their bought ticket type.
2
Also the ticket type ‘Team’ is basically 5 tickets (and therefore 5 tokens) for a cheaper
price, intended for teams of players to buy and sit together.
A ‘grouping’ of seats should therefore be possible. If a user, signed up to the event using
a ‘team’-token, books a seat in the correct area, his selected seat is booked (and linked to
his token/user) and the other 4 seats of the group are simultaneously planned/reserved
for the other 4 tokens of the team.
The Layout-creation shall therefore also be able to create 5 seats at once and group them
together.
FEATURES
Basic Website/Tool
This might be a usable sitemap for the application; at least that’s what I planned a time ago. Feel
free to adjust as needed. I believe you know better what will result in a better user experience:
●
/
Main page for visitors (not logged in visitors of the site)
○
/registration
registration wizard to create an account
○
/login
login-form to log into an account
○
/admin
Admin-UI to create Events, manage seating plans, users, etc.
eg.: /admin/event/<VISIBLE_ID>/seating to configure seating plans for the Event.
○
/event/<VISIBLE_ID>
‘Dashboard’ of the event <VISIBLE_ID>. Contains user-specific and other dynamic
data apart from ‘static’ content.
Contains seating plan(s) for users to book/reserve their seat.
If easier to implement, the seating plan and booking can be ‘outsourced’ to
/event/<VISIBLE_ID>/seating.
All seating plans shall be on a single page, tho!
○
/profile or /account
Users can see their data and change it.
Login-Sessions stored in a cookie (for auto-login, or dark/light-mode) shall be included as well.
3
User attributes / data
Data-Type
Attribute
Description
ID
Primary Key
internal id of the user dataset
UUID generated on creation
EMAIL
Unique, Not null
e-mail address used for logging into the account
PASSWORD
Not null
password of the user. MUST BE encrypted (obvisually)
varchar
FIRST_NAME
Not null
varchar
LAST_NAME
Not null
varchar
STREET
Not null
varchar(8)
HOUSE_NO
Not null
varchar as some house-numbers are like ‘12A/B’ etc.
varchar(8)
ZIP
Not null
best saved as varchar (as some of our visitors are from other
countries, and I’m not sure what their zip-codes look like. 8
chars should be enough tho)
COUNTRY
Not null
date
BIRTHDAY
Date
timestamp
CREATE_DATE
DB-Timestamp of data-set creation
boolean
LOCKED
if ‘true’ the user is unable to log in
timestamp
LAST_LOGIN
DB-Timestamp of last login
varchar(8)
PERMISSION_
LEVEL
if only the basic permission system gets implemented
Permission-Level of the user
USER - normal user without any special access
ADMIN - access to admin-UI, able to create events, seating
plans etc.
varchar
if advanced permission system is implemented; a single
attribute surely won’t cut it, so further designing of the
database structure in that case will be needed by you.
4
UI-Mockups
Visitor-View Mainpage (not logged into an account)
Logged in, normal user; seeing an overview of the current event
5
Logged in admin; Viewing the normal site as a regular user. Additional options in Navigation
Login-Form (light mode)
6
Registration form (light mode)
Permission system
Basic permission system
At least these 3 Permission-Levels are needed within the tool:
●
●
User:
○
Default
○
Can register for Events using a token
○
Can book a seat and plan seats (up to 3) in the seating plan of an Event
Admin:
○
Access to Admin-UI
○
Specific includes in template (eg. navigation item to get to admin-ui)
○
Create Events
■
○
Configure seating plans, etc. for events
Permission is given via Database (only)
Events
An Event is basically just an organisation object to group multiple things together.
Childs of an Event will be Tokens, Seating plans, Users (signed up to the event using a token) and
more in the future.
7
Attributes
Data-Type
Attribute
Description
ID
Primary Key, Not null
internal id of the event object
UUID generated on creation
varchar(32)
VISIBLE_ID
Unique constraint, Not null
Visible ID shown in admin-ui and used in routing (eg.
/event/lan1/...)
Generated by default as ‘event<Number of entry>’ and editable
by the admin in the ui when creating an event.
Number of entry: count over the EVENTS-table + 1
varchar(64)
TITLE
Title of the event; Header on the ‘Main-Page’ of the web-app
after logging in (as the ‘detail’-view of the event is shown)
timestamp
START_DATE
Start-date and time of the event
timestamp
END_DATE
End-date and time of the event
int
MAX_GUEST
S
Amount of users able to ‘sign up’ for the event.
Depends on the tokens being generated for the event → sum of
‘standard’-type tokens and ‘team’-tokens’
varchar(16)
STATE
status of the event
hidden - Event is only visible to admins in the admin-ui.
Detail-view of the event is only accessible for admins.
Default after creation.
open - event is active, and shown directly on the ‘main’-page to
logged in users. Users can sign up for the event using a token.
afterwards they see the ‘detail-view’ of the event including
seating plan etc.
closed - the event is ‘archived’. Admins shall only be able to
change text (if a feature of your implemented CMS in general).
No creation or editing of any sort (besides text-editing) to the
seating plan etc. It is intended as read-only (also for users who
were signed up to that event)
Token
As i am talking pretty often about these ‘tokens’ i guess it’s a good idea to describe what i mean
with that.
8
There is already an online-shop to sell tickets. After ordering a ticket, the user got a ‘token’ (UUID
as a string) within an email, that we had ‘linked’ to an ticket-type in another excel. Seat
reservation was done using a publicly readable excel, created for each event by hand. For the
user to ‘book’ a seat, he head to fill out the information from my registration form and paste his
token into a field, so that we knew whether he should be able to book a seat in the area he
wanted (due to the ticket-type linked to his token) and that he actually bought a ticket.
We did it like that for 2 events. And as you may guess for 200+ people for the first event (and
100+ because of the pandemic for the second) it is an unbearable amount of labour…
Therefore within an event on the Admin-UI I shall be able to generate a bunch of tokens with a
few clicks. Perhaps in a tab of the web app ‘Tokens’ i have a dropdown to select the type
‘STANDARD’ or ‘TEAM’ and a field next to it to enter the amount of tokens i want to generate.
After clicking a button, the tokens (uuids) are generated and linked to the event in the database.
Below these fields to generate tokens, a table lists all generated tokens (and a clickable link to
the user, if already used by one. Tokens not linked to a user should be deletable (in case I
generated too much of the wrong type).
I don’t know the best way to link a user to a token, after using it to sign up for an event with it.
Probably I would have attached the user ID as a foreign key to the token itself.
Better ideas/practises are welcome.
Token Attributes
Data-Type
varchar(16)
Attribute
Description
ID
Primary Key, Not null
internal id of the token, send to users when ordering a ticket
UUID generated on creation
EVENT_ID
Foreign key, Not null
ID of the event, this token is generated for
TYPE
Not null, default ‘STANDARD’
Type of the token
STANDARD or TEAM
USER_ID
Foreign key
links to user-id who used the token to ‘register’ for the event
GROUP_ID
UUID generated on creation of tokens with type ‘TEAM’.
logically connects the 5 TEAM-tokens and is used by advanced
seating
9
Basic seating
The best, rough description I can give is the seat booking of cinemas.
The seating descriptions are pretty sparse regarding mockups.
Seats are always part of a ‘block’. The ‘block’ is pretty much the same as ‘rows’ in a cinema (eg.
seat “A3” or seat “D15”). The number of seats per block is not limited. ‘Block’ because we might
not only do rows.
For Example:
Creating a new seating plan (admin)
In the Admin-UI, after opening an Event, I’m able to create a seating plan.
When creating a seating plan, the admin needs to fill in some data:
●
Event-ID:
○
●
●
●
Read-Only. Filled with the VISIBLE_ID of the event
Visible ID:
○
required, stored in SEAT_PLAN.VISIBLE_ID
○
Pre-filled with auto-generated id
○
Changeable by the admin.
Category:
○
required, stored in SEAT_PLAN.CATEGORY
○
dropdown to select ‘STANDARD’ or ‘TEAM’.
○
Changeable by the admin
Grid-Size:
○
required, stored in SEAT_PLAN.SIZE_X and SEAT_PLAN.SIZE_Y
○
Width and height of the grid for the seating plan
○
Changeable by the admin
○
Allowed Values: 1 - n
10
Seat plan attributes
Data-Type
Attribute
Description
ID
Primary Key, Not null
internal id of the seating plan
UUID generated on creation
EVENT_ID
Foreign key, Not null
linked to EVENT.ID
varchar(16)
VISIBLE_ID
must be unique in the event, Not null
Visible ID shown in admin-ui
Generated by default as ‘plan<Number of entry>’ and editable
by the admin in the ui when creating an event.
Number of entry: count over the seat-plans table + 1
varchar(16)
TYPE
Defines what token-type can interact with this seat plan
(book/plan seats)
int
SIZE_X
Grid-size in x-direction (left → right)
int
SIZE_Y
Grid-size in y-direction (top → bottom)
Adding/Removing seats to seating plan (admin)
After creating the seating plan object, the plan is opened in the admin-ui (eg.
/admin/event/<event>/seating/<VISIBLE_ID>), enabling the admin to place seats on the grid as
needed.
Above the grid information of the seating plan is displayed (Event-VISIBLE_ID, Seat-Plan
VISIBLE_ID, Category, Size) as well as some ‘tools’ for creating and removing the seats itself on
the plan.
I do not have a mockup for such an UI. I’m expecting something fitting into the rest of the web
application, easy to use and intuitive to use while having access to all the options needed.
Other Admin-Stuff regarding seating
Admins shall also be able to ‘disable’ seats, so that they are grayed out for users and can not be
booked/reserved.
11
Seat attributes
Data-Type
Attribute
Description
ID
Primary Key, Not null
internal id of the seat
UUID generated on creation
SEAT_PLAN_ID
Foreign key, Not null
linked to SEAT_PLAN.ID
varchar(1)
BLOCK
Not null
Block this seat is a part of
varchar(16)
STATE
Status of the seat:
disabled - seat cannot be selected for planning/booking
free - seat can be selected for planning/booking
planned - seat can be booked (no check needed of who
planned this seat).
Each token (and therefore user) can only plan up to 3 seats.
booked - seat cannot be booked or planned, some
information about the seat (BLOCK, SEAT_NO) and ) the
‘owner’ of this seat shall be displayed (FIRST_NAME).
Each token (and therefore user) can only book 1 seat.
The token is used as it is a relation to the user, the event
etc. as it is the ticket of a user.
int
POSITION_X
Position on X in the grid of the SEAT_PLAN
used for visualization
int
POSITION_Y
Position on Y in the grid of the SEAT_PLAN
used for visualization
GROUPING_ID
used for Advanced seating in order to group together
multiple seats.
if one seat such a grouping is booked, all other seats of the
group must be set to ‘planned’.
TOKEN
Foreign key
Links to the token of the user, who booked/planned this
seat.
RESERVER_TOKEN
Foreign key
contains the TOKEN.GROUP_ID uuid
12
Seat colors on grid in UI
The color of the seat on the seating plan in the UI is dependent on the state of the seat.
Example colors:
●
disabled - gray
●
free - blue
●
selected by user - (state-color) with red outline
●
planned - orange
●
booked - red
●
booked (your seat) - green
Mockup
This ‘mockup’ is the seat booking of a nearby cinema; I hope it’s clear what I’m
needing/expecting
Advanced seating
Besides being able to create more than one seating plan for an event, the seating plans need to
be restricted to the token-type (what ticket type the user bought - ‘STANDARD’ or ‘TEAM’. These
restrictions should be expandable). Users with a ‘STANDARD’ token shall only be able to
book/reserve seats in the ‘STANDARD’ seating plan, while having read-only access to the ‘TEAM’
seating plan.
Grouped seats
This is regarding the token-type ‘TEAM’, as these tickets are sold as a bundle of 5 tokens,
intended for teams. These teams shall sit together. That's why ‘grouped seats’ shall be creatable
13
in the seating plan. A seat group is therefore a row of 5 seats (either horizontally or vertically
arranged), created simultaneously when placing seats on the seating plan with type ‘TEAM’.
When selecting a seat of a seat group, the other 4 seats of that group are highlighted as well.
Workflow when a user with a team-token books a seat:
The user selects a seat on the seating plan for team-token owner. The seat he clicked is
highlighted, while the remaining 4 seats of the seat group are highlighted using another color, so
the user sees where his friends can sit. When booking the seat, the token of the user is written to
the seats attribute ‘TOKEN’, linking this seat to the user, and the state of that seat is changed to
‘booked’. The state of the remaining 4 seats is changed to ‘reserved’ while the attribute
‘RESERVER_TOKEN’ of those seats is filled using the attribute ‘GROUP_ID’ of the token the user
used to book his seat.
As all 5 tokens have the same GROUP_ID, the link is complete.
Reserved seats containing a UUID in the attribute ‘RESERVER_TOKEN’ can only be booked using
a token with the same UUID as ‘GROUP_ID’, therefore reserving these seats of the seat group for
his teammates only.
Reserved seats in the ‘STANDARD’ area will not get their ‘RESERVER_TOKEN’ filled, and are
bookable by anyone who has a standard-token and hasn’t booked another seat yet.
Users shall also be able to ‘unbook’ a seat, therefore setting it as free again, to book another seat
somewhere else on the plan.
Documentation
The code must be documented.
A short documentation, on how to setup everything locally in order to test and further develop
the project is required.
14
Download