Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WIP - PostgreSQL database and Flyway migration #161

Draft
wants to merge 147 commits into
base: master
Choose a base branch
from

Conversation

P0nk
Copy link
Owner

@P0nk P0nk commented Feb 24, 2023

Problems:

  • The database code in Cosmic is all over the place. There's no real separation of concerns which has led to code that is hard to read and hard to maintain.
  • MySQL is old. PostgreSQL follows the SQL standard more closely and has a lot of advanced features.
  • The database design is lackluster. There are missing key constraints, inconsistent naming, unused tables & columns and probably more issues.
  • The initial creation of tables and static data (drops, shop items, etc.) is error prone. It requires manual work and is one of the main issues newcomers struggle with.

Solutions:

  • Clearly separating database code from the rest with repository classes.
  • Switch to PostgreSQL
  • Rewrite the tables from the ground up
  • Use a database migration tool. Currently that ool is Flyway, but I'm not opposed to switching to Liquibase as it has quite a few useful features.

First step in my plan to switch away from MySQL.
Only makes a difference if there is
a large amount of notes in the database.
Better be safe than sorry.
This wouldn't be a problem in the first case,
if there was a foreign key connection between
note and character tables.
Can't add that quite yet though.
This way you can connect with your favorite db client
These are going to be handy soon,
as I'm about to add Caffeine for caching.
MakerProcessor is such a mess...
Preparing for change in Command#handle,
which is going to take a CommandContext as an additional argument.
This way we can pass in command dependencies in a safe way
instead of requiring them to access static methods.
CommandContext is the carrier of dependencies.
Currently, it only carries a DropProvider, but
it will grow bit by bit as more static singletons
and other similar structures get refactored.
They serve the same purpose, no point in separating
The state is not set properly on logout though, so once you log out you can't log back in
Can nog log in, enter game, exit game and re-login successfully.
Works by loading all ip bans on startup and querying the collection in memory
rather than making calls on every login.
Works by loading all hwid bans on startup and querying the collection in memory
rather than making calls on every login.
Works just like ip and hwid bans in that they are loaded on startup
Almost rid of all db queries in Client
Finally rid of all db code in Client
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant