leaderboardsgg/leaderboard-backend-go

Create minimal schema

Opened this issue · 7 comments

Thank you Ted for the sicknasty epic brainstorming.
unknown

Is Game\Release/Platform an easy thing to track at all? Some games have multiple releases within one platform. That part in particular seems a bit difficult to me. I suppose we don't need it for the Leaderboard and below to work?

I think there was a lot of discussion from the Discord about the Run-Time-Idk-TimingMethod tables.

Some ideas that came up:

  • Having a columnar data store of sorts for the Run info (Time, Score, ...) where most columns in that table were null.
  • Having multiple tables with a func wrapping them.
  • Have up to many rows per Run that contain int64, dataTypeEnum.

Few thoughts I have for stuff we should have based on my experience with src. Separating these out into things I think are mandatory for a minimal schema and those that might be something to think about later:
Minimal

  • Run should have some field for the link to the run
  • Game should have several fields for descriptions, resources, links, etc.
  • Might also want both Categories and Sub Categories. For example if a game allows for Co-Op, the Any% category can have sub categories for 1P and 2P, as well as any other potential sub-categories that can be defined by mods (Could live without it for now, but could be a pain to implement later)
    Non-Minimal
  • The run itself should also have a field for version the game is played on, in the case where re-releases share a leaderboard
  • Could also have a value for if a category is considered "main" or "side" to determine how it's accessed. Likely Main categories would all be featured prominently while side categories (which could be numerous) would have a drop down or some alternate way of access

Thanks for your input, @RSN-Bran. Here are my thoughts.

Run should have some field for the link to the run

excellent idea. Adding it now.

Game should have several fields for descriptions, resources, links, etc.

For now, these can simply be in the Leaderboard Rules column

Might also want both Categories and Sub Categories. For example if a game allows for Co-Op, the Any% category can have sub categories for 1P and 2P, as well as any other potential sub-categories that can be defined by mods (Could live without it for now, but could be a pain to implement later)

yeah, this is a good idea but I'm going to propose that we put it off until v1. For now, run variables may be used for this purpose

The run itself should also have a field for version the game is played on, in the case where re-releases share a leaderboard

This has been added. Check out the dynamically updating version here

Could also have a value for if a category is considered "main" or "side" to determine how it's accessed. Likely Main categories would all be featured prominently while side categories (which could be numerous) would have a drop down or some alternate way of access

I'm gonna suggest putting this off until v1 as well. Wouldn't be that hard to add though.

re: @zdylag

Is Game\Release/Platform an easy thing to track at all? Some games have multiple releases within one platform. That part in particular seems a bit difficult to me. I suppose we don't need it for the Leaderboard and below to work?

Since Releases is a join on Games, Platforms, and Leaderboards, it means we can easily have multiple releases for a game on the same platform. However, I kind of agree that this may be unnecessary for MVP. What do you think, @Matt-Hurd ? I think it wouldn't hurt to simplify the relationship.

I've made several tweaks and I'm ready to move forward with this structure if nobody has any objections.
image

Could we add a "Pronouns" field to the User object? It's important to a lot of folks and it's something SRC already supports in a limited capacity. The options we offer for populating it are probably a frontend question but I feel like it would be a good addition to the model regardless of the user's view.

The user already has an "about me" field where they can write all their personal details.