Data Structure - cubing/algdb GitHub Wiki

Schema documented here: https://github.com/cubing/algdb/blob/main/schema.graphql

Brief overview:

Algsets:

  • Algsets have both cases and subsets.
  • Subsets themselves can also have cases and subsets.
  • This is done so as to handle nested subsets infinitely.
  • Algsets will have a unique code that identifies them.
  • Subsets will also have a unique code, except it represents the subset chain.

For example:

zbll will have subset u. Subset u could have other nested subsets, those would look like u-nested1, u-nested2. These nested subsets could also have further subsets: u-nested1-deepernested1.

Cases:

  • Algsets/Subsets have cases.
  • Algs are connected to cases.
  • Algs can be connected to multiple cases.
  • Cases are unique to a subsets/algset
  • CMLL-AS-1 and COLL-AS-1 are both different cases connected to different subsets.
  • Algs are then connected to both cases.
  • This allows both cases to be rendered differently depending on their parent's subset mask

Algs:

  • Algs can have #tags.
  • Tags are unique to an alg-user combo.
  • User's can add their own tags to an alg.
  • This helps categorize their saved algs.

Users:

  • Users can save algs through tagging them as #use (or something).

  • Users can also upvote algs to increase their overall score.

  • Newer votes mean more than older votes.

  • Algs posted in the last week (for example) are automatically tagged as #new.

  • Algs that are new but have high votes are trending.

  • Users can view their saved algs in their profile.

  • Users can view other users' saved algs.

  • These algs get automatically grouped based on their parent subsets / algsets.

  • Users can filter algs by their unique tags sort algs however they'd like.