Rewrites the lunars server, changing several key components and implementing a new rating system
Key server changes:
- Switch from
nickel
torocket
as the http server framework - Switch from
rusqlite
tosqlx
as the database framework - Switch from sqlite to MySql server as the database
- Automatically generate documentation (openapi.json) based off routes and schema
- Implement ratelimiting as a 1 minute sliding window, where unauthenticated users can send up to 60 requests per minute and users with an api key can send up to 120 requests per minute
- Change how authentication works; instead of passing a key inside a schema, the server will look for a key inside the
Authorization
header - Re-do the api, due to the fundamental change of the rating system
Rating system changes:
- Switch from an ELO based system to a Glicko-2 based system (transfer the changes for ping compensation, match score)
- The new glicko based system works with rating periods; we keep track of matches for a set period of time, and once the period has ended, we process the rating for all players
- I have temporarily set the rating period length to 3 weeks. The specification mentions an ideal length would mean 5-10 matches played per player; we will see if 3 weeks works for that metric
- To fix the UX of not being able to see your rating until the rating period is over, use the fractional rating period modification seen in the instant-glicko-2 crate
(Later today I will fully deploy the new version and generate api keys)