M4Engine MVP Roadmap
Player records
Objects that handle Player
records:
- Player
- Rank
- RankSet
- Award
- Course
- Commendation
- Reprimand
- Qualification
- Leave of Absence
Group records
- Group
- Role
- Membership
Objects that handle Group
records.
Group
has a parent group relationship and can be organized into a tree
structure.
Top level Group
uses the uuid of the Org as parent_uuid.
Group
has a boolean flag "exclusive", which means the Player can be in 1 and
only 1 "exclusive" group.
Transferring a Player
into an exclusive Group
will remove them from the
exclusive Group
they are in currently.
Player
can be in multiple non-exclusive Groups.
Role
are designed on the Group
and employed in the Membership.
Role
can indicate leadership
, which grants access to management tool within
the Group
.
Role
can also indicate singular
which only allows one Player
to hold said
Role
at a time within the Group
.
User records
- User
- PlayerOrg
The User
context handles the login and subscription related behaviours.
PlayerOrg
maps the logged into user to a Player
record within an Org
.
A player (the actual person, not the object) will have a single User
object,
but can have Player
objects in multiple Org
, but only one Player
per
Org
.
Organization records
The Org
represents the Player managed unit, and is associated with a Domain
hostname.
Traffic on the specific Domain
for the Org
will restrict the access to records
related to that Org
.
- Org
- Settings
- Domain
The organization context is what drives the multitenancy for the system.
Incoming requests are on a specific Domain
hostname which maps to a specific
Org
.
apple.m4engine.com
would be a different Org
from orange.m4engine.com
and
would show only the records relevant to the mapped Org
.
Achievement records
- Key
- Entry
- Rule
Tracking player achievements on various metrics defined by the Group leaders and
owner of the Org
.
The Player
detail page will have a section displaying Achievement Rewards.
Key
Keys can be associated with a Group
and updated to track Player
advancement on
a specific topic.
For example:
Operation
attendance- An aircraft or vehicle employed by a
Player
in an Operation - Tank to Tank kills
- Air to Air kills
Basically whatever metric the Group wants.
Entry
The Entry
record is where data is logged and related to a Key
, on a date.
The intention here is the Group
leadership would create these Entry
records
after an operation.
Rule
Achievement Rule
is where the "Reward" system is designed.
A Rule
consists of a Key
and a threshold value. When the Entry
values for
a Key
meet or exceed the threshold value, the Progression reward is
"unlocked" and the Player
record is updated to show this.
Operation records
- Operation
- RSVP
- Attendance
Operation
scheduling, planning and documentation.
Player registration for Operations on the Calendar (RSVP
).
Billeting roles for the Operation from the pool of Players who register.
Tracking Attendance
after the fact for the Players who do attend.
Attendance
data will also be available to Achievement keys for defining
thresholds.
Operation and Calendar systems are WIP currently and will be expanded upon in the future.
Calendar component only really exists in the flask web application layer.
Dashboard
On login, present status reports relevant to the user.
All Users:
- Upcoming events
Group leaders:
- Attendance / lack of attendance of members
- Members ready for promotion or near promotion
- Tickets / Ticket status (depends on ticket system)
Subscribers:
- Status of subscription
Rank Progression / Promotion
Definable criteria for promotions.
- Time in Service
- Time in Grade
- Number of Ops attended
- Qualification in Course(s)
-- We are Here --
Document management
- Document
Markdown based document management. Document
can be associated with Group
,
or Course
, or Help pages.
Document
objects are editable markdown and generate the HTML when saved or
updated.
Operations Billeting tool
Map RSVP players to definable roles in the operation.
Different from Roles in Groups which persist over time. Billeting is specific to the Operation. For example, allocating infantry roles within the squad or section, or allocating specific aircraft to pilots based on what the operation requires.
Ticket system
Definable workflow tickets for handling Player requests via documented process.
For example:
A "Transfer Request" ticket would have several steps to be confirmed.
- Approval from current Group leadership
- Approval from target Group leadership
- Waiting period to expire
- All criteria met, clear to execute the Transfer
Each step would log the confirmation with a timestamp and reference to the Player leader pushing the button, similar to how the MembershipHistory records the Player common_name at the time of its creation.
Discord Integration
Discord bot capable of executing management commands.
Behaviour for most systems is defined in the engine code and not the site,
so discord /commands
can be created for the majority of management
interactions.
Some things like structuring the Roster will still need a more rich interface provided on the site.