* Save speed stats in leaderboard update
Saves a histogram data structure of speeds for buckets rounded to the nearest 10.
Signed-off-by: Brian Evans <ebrian101@gmail.com>
* API endpoint to get public speed stats
Signed-off-by: Brian Evans <ebrian101@gmail.com>
* Add APE class for public stats (WIP)
I created an APE class for accessing public stats. Also stubbed getting and showing the public speed stats on the about page. Haven't implemented the histogram yet though.
Signed-off-by: Brian Evans <ebrian101@gmail.com>
* Draw histogram for global speed stats
On about page
Signed-off-by: Brian Evans <ebrian101@gmail.com>
* Update histogram colors on theme change
Signed-off-by: Brian Evans <ebrian101@gmail.com>
* Fixed out-of-order data in speed histogram
Data was not sorted correctly, which resulted in an incorrect histogram being drawn.
Signed-off-by: Brian Evans <ebrian101@gmail.com>
* Public speed stats PR fixes
Small fixes based on PR feedback:
- changed _req to req
- removed unnecessary client version header
Signed-off-by: Brian Evans <ebrian101@gmail.com>
* Add endpoint for typing stats
New endpoint to retrieve the public typing stats such as global count of tests completed.
Signed-off-by: Brian Evans <ebrian101@gmail.com>
* Renamed public-stats to public
Except in cases where it would cause an identifier named `public` as this is forbidden in strict mode.
Signed-off-by: Brian Evans <ebrian101@gmail.com>
* Add stats section to about page
In this commit:
- add a section above about called stats
- display typing stats in three columns
- underneath show the histogram of speeds on english time 60
- make chart responsive
Signed-off-by: Brian Evans <ebrian101@gmail.com>
* Add unit test for Public DAL
Signed-off-by: Brian Evans <ebrian101@gmail.com>
* updated styling
* only requesting data once per session
* going one column on narrow screens
* added option to specify number of decimal poitns
* just showing million instead of abbreviating
updated structure
updated styling
Signed-off-by: Brian Evans <ebrian101@gmail.com>
Co-authored-by: Miodec <jack@monkeytype.com>
* handling query param
getting user by name if query param is present
* added function to get user by name
* split profile function to get user by uid or name
* added function to check if get parameter exists in url
* updating the profile based on the url parameter
* using query param in url
* using get param
* renamed param name
adding search param to pathname in the deafult parameter value
* renamed param
* renamed param
added query validation
* extracted repeated query to a function
* missing await
* fixed typo
fixed validation
* using em for dynamic font sizes
* using em for dynamic font sizes
* added line height
* using em
* using em
* using page profile search instead
* updated the way data is passed into the page
* profile search page
* setting line height
* removed vertical align
* moved navigate to an event to avoid circular deps
* fixed route controller not being included
* removed unnecessary test
* showing 404 error
* improved query checking
* renamed query param
* fixed test
* note
* yeet
* cleaner type definition
* Add xp reward overrides
* edge case
* switched to defined brackets instead of just min and max
* foreach
* moved type to its own interface
* updated spec
Co-authored-by: Miodec <bartnikjack@gmail.com>
* Implement streaks
* Improve code
* Update package.json
* Store streak on the user
* Pretty-fix
* Ensure that streak is up to date
* Fix issue in streak calculation
* Revert prettier changes
* Update polish.json
* Update db.ts
* Remove initial calculation
* Write mandatory test
* using strict equality
* moved functions to the utils file
* importing utils
* adding streak to breakdown,
rounding and parsing streak modifier
* renamed variable
* renamed fields
* using correct field name
* added streaks to configuration
* showing streak during xp breakdown
* incrementing streak earlier
checking configuration before applying modifier
* returning streak to the client
* setting local streak with the number returned from the backedn
* only reading streak when updating profile instead of updating
* sending streak information in profile
* only showing streak if greater than 0
* setting to empty if no streak
* renamed config property
* updated streak calculation
* refactored isYesterday
* refactored streak update
* only displaying if streak larger than 1
* merged configuration properties into 1
* added configuration for max streak bonus
* added isToday check back (derp)
* reverted streaks back to multiplier approach
* using better maprange functin
* removed import
* moved test to dal spec
* clamping
* removed imports
* fixed test
* increased coverage
* removed angry console log
* typo
* using date now instead of dates
* mocking date now
awaiting expect
* not using date
Co-authored-by: Anonymous <110769200+fasttyperdog@users.noreply.github.com>
Co-authored-by: Rizwan Mustafa <rizwanmustafa0000@gmail.com>
Co-authored-by: Miodec <bartnikjack@gmail.com>
* adds reset button
* moves it up above the delete button
* i am blind
* i cant move stuff
* adds reset for the profile
* Adds reseting for ape keys, and presets, also adds more resets in the user settings
* Delets all ape keys not just one
* Prevents conflicts for delete endpoints
* changes from reset to deleteAll in ape keys
* Refactors the code to use Promise.all
* adds reloading
* unit tests ape key deletion
* fixes some bugs
* Fixes type o
* More typeo fixes
* Returns nothing for reset user
* Simplifies code
* changes from reset to deleteAll for all but users
* Checks db not the memory
* fixes typo
* fixes the tests
* fixes
* fixes bugs and refactors some code
* adds requireFreshToken to the authentication
* migrates all reseting to the user endpoint
* removes the delete all for ape unit test
* to lazy to make commit message
* parallelize the calls to the db (I think)
* also resetting config
* also resetting discordid and avatar
* using unset
* updated wording
* level 1 message
Co-authored-by: Miodec <bartnikjack@gmail.com>
* Fixed badges not showing on all time leaderboards
* updated types to support inventory and single badge id
* Add badge selection
* Fix bug
* Remove unnecessary prefill
* using new inventory system
* added no balloon option
* updated text color
* not showing balloon
* updated styling for showing badges selection
* Add badge selection
Co-authored-by: Bruception <bberr022@fiu.edu>
* added inventory type
* new badges
* fixed badges not showing on all time leaderboards
* sending the selected badge id to daily lb
* returning inventory in profiles
* updated types to support inventory and single badge id
* fixed all badges not showing on profile page
* removed await
* smol refactor
* profile
* rounded table corners
* rounded leaderboards corners
* wider page by default
* v3
* font changes
* new pbtables
* blank by default
* showing pb popup
* removed some quotes
* rounding displayed acc
* removed created date (will be shown in profile)
* added profile module that fills the profile element
* updating font size in the middle of the swap to make the change not noticeable
* lowered max font size
* showing if user is banned,
not displaying most details if user is banned
* pbs not selectable
* renamed global stats to time typing
* completed previous commit
* changed function parameters
* only hiding when social is missing
* smaller badge
* aligning quick results
spanning time if wide
* larger badge
* fixed function parameters
* moved to root
* media queries
* Add user profile API (#3123) bruception
* Add flattenObjectDeep
* Add user profile API
* Bump coverage
* Add user profile configuration and rate limits
* Rename profile -> profileDetails
* Simplify
* Filter personal bests
* Handle banned users
* Add banned user test
* new profile layout system
"none" layout finished
* better "none" layout
* "socials" layout
* larger gap
* bioandkey layout done
* "both" layout finished
* final touches
* Add profile editing (#3135)
* Add profile editing
* lowered font size
increased right padding
* updated configuration schema
* moved discord integration to users object in configuration
* added warning comment
* rendering new lines
* edit popup styling
* Sanitize ZAlgo text
* Use trim
* Replace more than 2 spaces with two spaces
* Trim first
* Add profanity detection
* Ass
* Removed some profanities
* Update profanity detection
Co-authored-by: Miodec <bartnikjack@gmail.com>
* Add profile routing (#3143) bruception miodec
* Add profile routing
* removed check (also fixes circular deps)
* change page in special cases
* Hydrate profiles
* Link leaderboards to profiles
* Add failed to load div
* Dont refresh page
* always calling middle callback
* moved profile css into its own file
* fixed one media query
* added preloader, changed default layout
* added reset function
changed function name
updating profile before the page is shown, not after
* resetting after the page is hidden and before its updated
* Fix logic to not delete user if DB goes down (#3171)
* Dont route to account if uid equals current user uid
* temporairly allowing quicktab
* added copy link button
* only increasing padding on the account page
* set max height
* handling copy link button
* only showing avatar if it exists
* 1000 instead of 100
* removing placeholder if image request was successful
Co-authored-by: Miodec <bartnikjack@gmail.com>
* Fix quote length field
Co-authored-by: Miodec <bartnikjack@gmail.com>
* checking if mode is dev when adding to daily lb
* disabled time typing check on dev when recalculating leaderboards
* not replacing footer on localhost
* using ternary
* modified logic
* Added `ResultFilters` to types
Added customFilters field to user
This field is an optional array of `ResultFilters`
It will store a user's custom filters
* Added Add and Remove functions for `ResultFilters` in user DAL
Also added unit tests
* Added Custom Filter configuration
Can now enable/disable the custom filters feature
Can also set a cap on the number of filters per user
* Add and Remove functions for `ResultFilters` in user controller
* added auto ban if user triggers anticheat too much
* updated base configuration
* autoban is optional
* storing updated autoban array
* only checking autoban in time 15 and 60
* miliseconds
* removed unnecessary if check
* returning if already banned
* storing now in variable
greater not greater equal
* moved constant outside function
* using partial type
* renamed variables
* renamed to autoBanTimestamps
* added autoban tests
* increased coverage minimum
* slightly better test
* added autoBanTimestamps checks to other tests