cntodev / rooster Goto Github PK
View Code? Open in Web Editor NEWCommunity Roster and related automation services for managing members
Community Roster and related automation services for managing members
When an Application Form is accepted, a new member should be created. Since a new applicant has no ways to enter credentials in the submission of the application form, an email should be sent both for verification purposes and for setting a password to log in.
Do we need this for the MVP @milivojm ?
Just a nice to have but with the release of the latest Creator DLC it would be neat to be able to activate it on the server on-demand like GM and VN.
Completely non-urgent feature request!
Discussion for permissions management service design.
TBD
Serilog is configured to log onto local folder which is not mapped to external volume in Docker. That means only by directly connecting to docker container you can observe what's going on.
The field should be only editable by Interviewers and is tied to the warnings system.
A recruit must pass the mod assessment and bootcamp within 2 weeks of joining.
Design of a service should happen in this repository to keep track of what has been done, how and why certain choices have been made. Also, this is to help future maintainers learning how the various services work.
Each service should have a dedicated space for its design discussion (i.e. an issue). Even if developing it as a one-man-army do provide a comprehensive documentation of the choices that were made and, most importantly, how it behaves concerning inputs, outputs and events.
Formally, the bare minimum requirements for a design document should be as follow:
openapi
for REST APIs)cntoroster
prefix for the latter case) prefix for each event it generates. For example, service Foo
generating events beer spilled
and out of beer
should use events such as foo.beer_spilled
and foo.out_of_beer
, or cntoroster.foo._xxx
(stick to the already in use case and naming convention).For the sake of storage re-usability, also document which storage technology is used and how the data is structured if possible.
Finally, documentation of the source code of the service itself is a nice to have but not required, as the idea behind the architectural choice of microservice-based system is to make each service disposable.
When Member gets promoted, assign appropriate tags on Discord.
MemberPromoted
event should be listened.
Pre-conditions
DischargeMember
claimMain flow
DischargeMember
with following arguments have been called by FE service (MemberId, User)
DischargeMember
claim.Member
from Repository
and checks if Member
is Active
.MemberDischarged
event on the event bus. Event has to contain (MemberId, Time, UserId)Alternative flows
Member is not active any more
3a. service returns 400.
User doesn't have the permission
2a. service returns 401.
Member not found
3a. service returns 404.
Post-conditions
Member
Active
attribute has been set to false. MemberDischarged
event has been created.
Pre-conditions
CreateMember
claimMain flow
CreateMember
with following arguments is called (Member, User)
CreateMember
claimMembers
from Repository
and checks if members with nickname
of new Member existMember
Repository
MemberCreated
event on the event bus. Event has to contain (Member, Time, UserId)
Alternative flows
User does not have permissions
2a. service returns 401
Member with same username already exists
3a. service returns 409
Post-conditions
Member
has been created and savedMemberCreated
event has been createdMember details page would be nice Highway.
Make all Ranks available (Recruit, Reservist, Grunt, Specialist, Corporal and Staff Sergeant) for promoting/demoting members.
Different ranks can be assigned by different people, thus the permission system should be updated accordingly.
I am not currently aware whether the community already has guidelines for which ranks/branch members can assign which ranks to other members (pinging @JamesTheClarke here to make sure). But ideally it should be something like this:
There are several warnings to be shown to both Interviewers and Member Managers.
I'm sure there are going to be many other warnings that are either already in the django-roster
or that could be useful to introduce. But I would stop with the three listed above for the MVP.
For the UX bit, different roles should see different warnings and only relative to their branch. For example, Interviewers should not be able to see warnings for Member Managers and viceversa. Also, displaying the warnings on the frontend should allow for some basic search and filtering features.
@milivojm if you agree this is enough for the MVP I can go ahead and split this into different sub-tasks.
Discussion for how the attendance tracker should work.
The django-roster
uses a complicated way of parsing an list of attendees through Steam's API every X time during a scheduled event (Tuesday and Friday). We could greatly simplify the logic, pasting Discord convo between myself and @milivojm.
Discussion for attendance tracking service design.
Use cases involved:
Discussion for member management service design.
Use cases involved:
On members page, previous/next page is bugged.
Discussion for branches management and branch membership service design.
Use cases involved:
This is high priority. Since Roster will be deployed with reverse proxy, enforcing HTTPS redirection + HSTS middleware is not needed.
Following up from #35.
MVP-wise the feature should be limited to Recruits being promoted to Reservists, although if rank system is already in place any update in the rank group can be handled.
When a member gets their rank updated, the change should be reflected on the community's TeamSpeak 3 server based on the member's TS3 id. We need to look into TS3 API for this as it is unclear whether it's possible or not.
Opening this to centralize the discussion about whether automation of features mentioned in #62, #63, #64, #66 should be part of the MVP milestone.
Whilst it is definitely something we want in the Roster, I think implementing it right away creates two different issues:
django-roster
project anymore. Developing automation from the get go would significantly increase time to transition. Also, I do think we need to keep the manual version of those features anyway in case something breaks or for control purposes, then build automation on top of that.Discussion for ranks management service design.
Use cases involved:
Following up from #35.
MVP-wise, when a Recruit is promoted to Reservist the change should be reflected on the community's Discord server. In general this should happen at every rank update for a member.
I haven't still looked into Discord API but there's a good chance this is easily doable.
When user doesn't have permissions to access a page, application redirects to HTTP page resulting in 532 response. Possible solutions:
Members (interviewers only when branch membership will be defined, outside MVP) can either accept or refuse a submitted application form.
In case of acceptance: a new member for the applicant is created, recruit rank is assigned (when rank system will be defined, outside MVP), community services eligible for automation are updated (i.e. applicant is automatically added the tag of recruit on Discord).
A while ago @Shiny-CNTO tried to implement an option whereas the game server restarts Tuesdays and Fridays at 19:30 with the Main Repo.
However, it hasn't really worked properly yet so I'd like to request a new feature for the game server launcher:
This issue acts as place for discussing the general architecture of the new system.
Taking into consideration the project requirements (ease of maintenance, add features later on, connecting multiple community services, support several programming languages), a microservice approach makes more sense than developing a traditional, full-stack application.
The application will be split in the following services for version 1.0, which aims at replacing the current Roster system.
DLC list in the Roster needs update.
While in the probation phase, a deadline for the 8 week long time window should be shown to Interviewers to inform them about how long the Recruit has to attend the minimum amount of OPs.
This is how it currently works on the django-roster
, although it might be worthwhile to seek for a better system of checks to better understand which requirements the Recruit is/isn't fulfilling. For example, since the community states a few deadlines for the probation phase (i.e. how long before Mod Assessment), a more detailed set of conditions would be a good improvement.
For the time being though, I'd focus on replicating the existing feature and leaving up to Interviewers to double check with the attendance data.
When a Recruit passes the requirements of their probing phase, Interviewers must be able to promote them to the Reservist rank.
Once Roster user fills in registration form, Roster should send him an e-mail instead of default verify here page. Right now it's confusing and users get stuck in dead space.
Every member (interviewers only when branch membership will be defined, outside MVP) should be able to list and check out application forms that have been submitted.
Create a page where admin can assign claims to users. Right now I'm doing it through database which is not desirable.
The current (basic) implementation of the member service is based on flask restful library, which the author does not recommend using anymore. Since Flask 2.0 is about to be released and there are no plans to update flask-restful
, and since the features of the package are already present in Flask itself (flask-restful/flask-restful#883) a refactoring is due in order to drop the dependency on flask-restful
.
Discussion for user authentication and authorization service design.
Use cases involved:
May I suggest changing the order of the entries? For example, why is steam on the bottom and not on top? GitHub is higher then teamspeak? That sort of thing. Also, add a short explanation to Bohemia interactive nickname because if left without it will be very confusing to new players.
Discussion for LoAs management service design.
Use cases involved:
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.