Merge branch 'dev' into remove/http-handler

This commit is contained in:
Zedifus 2024-03-18 23:35:50 +00:00
commit 1a58ccd45a
5 changed files with 146 additions and 11 deletions

View File

@ -1,16 +1,16 @@
# Changelog # Changelog
## --- [4.3.1] - 2023/TBD ## --- [4.3.1] - 2024/TBD
### New features ### New features
TBD TBD
### Bug fixes ### Bug fixes
TBD - Fix Server ID Rework for backups, schedules, and roles (INT ID to UUID migration) ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/729))
### Tweaks ### Tweaks
TBD TBD
### Lang ### Lang
TBD TBD
<br><br> <br><br>
## --- [4.3.0] - 2023/03/09 ## --- [4.3.0] - 2024/03/09
### Breaking Changes ### Breaking Changes
- This release includes database migrations that are not revertable. Once you update to this version you will not be able to rollback to a previous version. - This release includes database migrations that are not revertable. Once you update to this version you will not be able to rollback to a previous version.
- In this release, we've implemented a breaking change to enhance server identification within Crafty: instead of relying on numerical integers (1, 2, 3, etc.), Servers are now uniquely identified by their UUIDs. Please adapt your API clients accordingly. - In this release, we've implemented a breaking change to enhance server identification within Crafty: instead of relying on numerical integers (1, 2, 3, etc.), Servers are now uniquely identified by their UUIDs. Please adapt your API clients accordingly.
@ -34,7 +34,7 @@ TBD
- Update `de_DE, en_EN, es_ES, fr_FR, he_IL, lol_EN, lv_LV, nl_BE pl_PL, th_TH, tr_TR, uk_UA, zh_CN` translations for `4.3.0` ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/715)) - Update `de_DE, en_EN, es_ES, fr_FR, he_IL, lol_EN, lv_LV, nl_BE pl_PL, th_TH, tr_TR, uk_UA, zh_CN` translations for `4.3.0` ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/715))
<br><br> <br><br>
## --- [4.2.3] - 2023/02/02 ## --- [4.2.3] - 2024/02/02
### New features ### New features
- Use Papermc Group's API for `paper` & `folia` builds in server builder ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/688)) - Use Papermc Group's API for `paper` & `folia` builds in server builder ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/688))
- Allow omission of player count from Dashboard (e.g. for proxy servers) ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/692)) - Allow omission of player count from Dashboard (e.g. for proxy servers) ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/692))

View File

@ -369,11 +369,14 @@ class MigrationManager(object):
@cached_property @cached_property
def migrator(self) -> Migrator: def migrator(self) -> Migrator:
""" """
Create migrator and setup it with fake migrations. Create migrator
""" """
migrator = Migrator(self.database) migrator = Migrator(self.database)
for name in self.done: # Removing the up_one to prevent running all
self.up_one(name, migrator, True) # migrations each time we got a new one.
# It's handled by migration.up() function.
# for name in self.done:
# self.up_one(name, migrator, True)
return migrator return migrator
def compile(self, name, migrate="", rollback=""): def compile(self, name, migrate="", rollback=""):

View File

@ -17,7 +17,7 @@ create_role_schema = {
"type": "object", "type": "object",
"properties": { "properties": {
"server_id": { "server_id": {
"type": "integer", "type": "string",
"minimum": 1, "minimum": 1,
}, },
"permissions": { "permissions": {
@ -47,7 +47,7 @@ basic_create_role_schema = {
"type": "object", "type": "object",
"properties": { "properties": {
"server_id": { "server_id": {
"type": "integer", "type": "string",
"minimum": 1, "minimum": 1,
}, },
"permissions": { "permissions": {

View File

@ -16,7 +16,7 @@ modify_role_schema = {
"type": "object", "type": "object",
"properties": { "properties": {
"server_id": { "server_id": {
"type": "integer", "type": "string",
"minimum": 1, "minimum": 1,
}, },
"permissions": { "permissions": {
@ -46,7 +46,7 @@ basic_modify_role_schema = {
"type": "object", "type": "object",
"properties": { "properties": {
"server_id": { "server_id": {
"type": "integer", "type": "string",
"minimum": 1, "minimum": 1,
}, },
"permissions": { "permissions": {

View File

@ -0,0 +1,132 @@
import datetime
import uuid
import peewee
import logging
from app.classes.shared.console import Console
from app.classes.shared.migration import Migrator, MigrateHistory
from app.classes.models.management import Schedules, Backups
from app.classes.models.server_permissions import RoleServers
logger = logging.getLogger(__name__)
def migrate(migrator: Migrator, database, **kwargs):
"""
Write your migrations here.
"""
db = database
# **********************************************************************************
# Servers New Model from Old (easier to migrate without dunmping Database)
# **********************************************************************************
class Servers(peewee.Model):
server_id = peewee.CharField(primary_key=True, default=str(uuid.uuid4()))
created = peewee.DateTimeField(default=datetime.datetime.now)
server_name = peewee.CharField(default="Server", index=True)
path = peewee.CharField(default="")
backup_path = peewee.CharField(default="")
executable = peewee.CharField(default="")
log_path = peewee.CharField(default="")
execution_command = peewee.CharField(default="")
auto_start = peewee.BooleanField(default=0)
auto_start_delay = peewee.IntegerField(default=10)
crash_detection = peewee.BooleanField(default=0)
stop_command = peewee.CharField(default="stop")
executable_update_url = peewee.CharField(default="")
server_ip = peewee.CharField(default="127.0.0.1")
server_port = peewee.IntegerField(default=25565)
logs_delete_after = peewee.IntegerField(default=0)
type = peewee.CharField(default="minecraft-java")
show_status = peewee.BooleanField(default=1)
created_by = peewee.IntegerField(default=-100)
shutdown_timeout = peewee.IntegerField(default=60)
ignored_exits = peewee.CharField(default="0")
class Meta:
table_name = "servers"
database = db
try:
logger.info("Migrating Data from Int to UUID (Fixing Issue)")
Console.info("Migrating Data from Int to UUID (Fixing Issue)")
# Changes on Servers Roles Table
migrator.alter_column_type(
RoleServers,
"server_id",
peewee.ForeignKeyField(
Servers,
backref="role_server",
null=True,
field=peewee.CharField(primary_key=True, default=str(uuid.uuid4())),
),
)
# Changes on Backups Table
migrator.alter_column_type(
Backups,
"server_id",
peewee.ForeignKeyField(
Servers,
backref="backup_server",
null=True,
field=peewee.CharField(primary_key=True, default=str(uuid.uuid4())),
),
)
# Changes on SChedule Table
migrator.alter_column_type(
Schedules,
"server_id",
peewee.ForeignKeyField(
Servers,
backref="schedule_server",
null=True,
field=peewee.CharField(primary_key=True, default=str(uuid.uuid4())),
),
)
migrator.run()
logger.info("Migrating Data from Int to UUID (Fixing Issue) : SUCCESS")
Console.info("Migrating Data from Int to UUID (Fixing Issue) : SUCCESS")
except Exception as ex:
logger.error("Error while migrating Data from Int to UUID (Fixing Issue)")
logger.error(ex)
Console.error("Error while migrating Data from Int to UUID (Fixing Issue)")
Console.error(ex)
last_migration = MigrateHistory.get_by_id(MigrateHistory.select().count())
last_migration.delete()
return
return
def rollback(migrator: Migrator, database, **kwargs):
"""
Write your rollback migrations here.
"""
db = database
# Changes on Webhook Table
migrator.alter_column_type(
RoleServers,
"server_id",
peewee.IntegerField(null=True),
)
# Changes on Webhook Table
migrator.alter_column_type(
Backups,
"server_id",
peewee.IntegerField(null=True),
)
# Changes on Webhook Table
migrator.alter_column_type(
Schedules,
"server_id",
peewee.IntegerField(null=True),
)