feat: Einführung von Umgebungsvariablen und Startskripten für die Backend-Anwendung
- Hinzufügen eines zentralen Skripts zum Laden von Umgebungsvariablen aus einer .env-Datei. - Implementierung von Start- und Entwicklungs-Skripten in der package.json für eine vereinfachte Ausführung der Anwendung. - Bereinigung und Entfernung nicht mehr benötigter Minigame-Modelle und -Services zur Verbesserung der Codebasis. - Anpassungen an den Datenbankmodellen zur Unterstützung von neuen Assoziationen und zur Verbesserung der Lesbarkeit.
This commit is contained in:
@@ -15,7 +15,7 @@ const Campaign = sequelize.define('Campaign', {
|
||||
type: DataTypes.TEXT,
|
||||
allowNull: true
|
||||
},
|
||||
is_active: {
|
||||
isActive: {
|
||||
type: DataTypes.BOOLEAN,
|
||||
defaultValue: true
|
||||
},
|
||||
@@ -23,11 +23,11 @@ const Campaign = sequelize.define('Campaign', {
|
||||
type: DataTypes.INTEGER,
|
||||
defaultValue: 1
|
||||
},
|
||||
created_at: {
|
||||
createdAt: {
|
||||
type: DataTypes.DATE,
|
||||
defaultValue: DataTypes.NOW
|
||||
},
|
||||
updated_at: {
|
||||
updatedAt: {
|
||||
type: DataTypes.DATE,
|
||||
defaultValue: DataTypes.NOW
|
||||
}
|
||||
@@ -36,7 +36,6 @@ const Campaign = sequelize.define('Campaign', {
|
||||
schema: 'match3',
|
||||
timestamps: true,
|
||||
underscored: true // WICHTIG: Alle Datenbankfelder im snake_case Format
|
||||
,
|
||||
freezeTableName: true});
|
||||
});
|
||||
|
||||
export default Campaign;
|
||||
|
||||
@@ -7,7 +7,7 @@ const Match3Level = sequelize.define('Match3Level', {
|
||||
primaryKey: true,
|
||||
autoIncrement: true
|
||||
},
|
||||
campaign_id: {
|
||||
campaignId: {
|
||||
type: DataTypes.INTEGER,
|
||||
allowNull: false,
|
||||
references: {
|
||||
@@ -27,40 +27,40 @@ const Match3Level = sequelize.define('Match3Level', {
|
||||
type: DataTypes.INTEGER,
|
||||
allowNull: false
|
||||
},
|
||||
board_layout: {
|
||||
boardLayout: {
|
||||
type: DataTypes.TEXT,
|
||||
allowNull: true, // Ändern zu true, da bereits existierende Datensätze vorhanden sind
|
||||
defaultValue: 'xxxxxx\nxxxxxx\nxxxxxx\nxxxxxx\nxxxxxx\nxxxxxx', // Standard-Layout für neue Level
|
||||
comment: 'Level-Form als String (o = kein Feld, x = Feld, Zeilen durch \n getrennt)'
|
||||
},
|
||||
board_width: {
|
||||
boardWidth: {
|
||||
type: DataTypes.INTEGER,
|
||||
allowNull: true, // Ändern zu true, da bereits existierende Datensätze vorhanden sind
|
||||
defaultValue: 6, // Standardwert für neue Level
|
||||
comment: 'Breite des Level-Boards'
|
||||
},
|
||||
board_height: {
|
||||
boardHeight: {
|
||||
type: DataTypes.INTEGER,
|
||||
allowNull: true, // Ändern zu true, da bereits existierende Datensätze vorhanden sind
|
||||
defaultValue: 6, // Standardwert für neue Level
|
||||
comment: 'Höhe des Level-Boards'
|
||||
},
|
||||
tile_types: {
|
||||
tileTypes: {
|
||||
type: DataTypes.JSON,
|
||||
allowNull: true, // Ändern zu true, da wir jetzt eine Verknüpfungstabelle haben
|
||||
comment: 'Legacy: Array der verfügbaren Tile-Typen (wird durch levelTileTypes ersetzt)'
|
||||
},
|
||||
move_limit: {
|
||||
moveLimit: {
|
||||
type: DataTypes.INTEGER,
|
||||
allowNull: false,
|
||||
defaultValue: 20
|
||||
},
|
||||
time_limit: {
|
||||
timeLimit: {
|
||||
type: DataTypes.INTEGER,
|
||||
allowNull: true,
|
||||
comment: 'Zeitlimit in Sekunden (null = kein Limit)'
|
||||
},
|
||||
is_active: {
|
||||
isActive: {
|
||||
type: DataTypes.BOOLEAN,
|
||||
allowNull: false,
|
||||
defaultValue: true
|
||||
@@ -70,7 +70,6 @@ const Match3Level = sequelize.define('Match3Level', {
|
||||
schema: 'match3',
|
||||
timestamps: true,
|
||||
underscored: true // WICHTIG: Alle Datenbankfelder im snake_case Format
|
||||
,
|
||||
freezeTableName: true});
|
||||
});
|
||||
|
||||
export default Match3Level;
|
||||
|
||||
@@ -7,7 +7,7 @@ const Match3LevelTileType = sequelize.define('Match3LevelTileType', {
|
||||
primaryKey: true,
|
||||
autoIncrement: true
|
||||
},
|
||||
level_id: {
|
||||
levelId: {
|
||||
type: DataTypes.INTEGER,
|
||||
allowNull: false,
|
||||
references: {
|
||||
@@ -16,7 +16,7 @@ const Match3LevelTileType = sequelize.define('Match3LevelTileType', {
|
||||
},
|
||||
comment: 'Referenz auf den Level'
|
||||
},
|
||||
tile_type_id: {
|
||||
tileTypeId: {
|
||||
type: DataTypes.INTEGER,
|
||||
allowNull: false,
|
||||
references: {
|
||||
@@ -31,7 +31,7 @@ const Match3LevelTileType = sequelize.define('Match3LevelTileType', {
|
||||
defaultValue: 1,
|
||||
comment: 'Gewichtung für die Wahrscheinlichkeit, dass dieser Tile-Typ erscheint'
|
||||
},
|
||||
is_active: {
|
||||
isActive: {
|
||||
type: DataTypes.BOOLEAN,
|
||||
allowNull: false,
|
||||
defaultValue: true,
|
||||
@@ -45,9 +45,8 @@ const Match3LevelTileType = sequelize.define('Match3LevelTileType', {
|
||||
indexes: [
|
||||
{
|
||||
unique: true,
|
||||
fields: ['level_id', 'tile_type_id'] // WICHTIG: Bei underscored: true müssen snake_case Namen verwendet werden
|
||||
,
|
||||
freezeTableName: true}
|
||||
fields: ['levelId', 'tileTypeId'] // WICHTIG: Bei underscored: true müssen snake_case Namen verwendet werden
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ const Objective = sequelize.define('Objective', {
|
||||
primaryKey: true,
|
||||
autoIncrement: true
|
||||
},
|
||||
level_id: {
|
||||
levelId: {
|
||||
type: DataTypes.INTEGER,
|
||||
allowNull: false
|
||||
},
|
||||
@@ -31,15 +31,15 @@ const Objective = sequelize.define('Objective', {
|
||||
type: DataTypes.INTEGER,
|
||||
defaultValue: 1
|
||||
},
|
||||
is_required: {
|
||||
isRequired: {
|
||||
type: DataTypes.BOOLEAN,
|
||||
defaultValue: true
|
||||
},
|
||||
created_at: {
|
||||
createdAt: {
|
||||
type: DataTypes.DATE,
|
||||
defaultValue: DataTypes.NOW
|
||||
},
|
||||
updated_at: {
|
||||
updatedAt: {
|
||||
type: DataTypes.DATE,
|
||||
defaultValue: DataTypes.NOW
|
||||
}
|
||||
@@ -48,7 +48,6 @@ const Objective = sequelize.define('Objective', {
|
||||
schema: 'match3',
|
||||
timestamps: true,
|
||||
underscored: true // WICHTIG: Alle Datenbankfelder im snake_case Format
|
||||
,
|
||||
freezeTableName: true});
|
||||
});
|
||||
|
||||
export default Objective;
|
||||
|
||||
@@ -12,7 +12,7 @@ const Match3TileType = sequelize.define('Match3TileType', {
|
||||
allowNull: false,
|
||||
comment: 'Eindeutiger Name des Tile-Typs (z.B. "gem", "star", "heart")'
|
||||
},
|
||||
display_name: {
|
||||
displayName: {
|
||||
type: DataTypes.STRING(100),
|
||||
allowNull: false,
|
||||
comment: 'Anzeigename des Tile-Typs (z.B. "Juwel", "Stern", "Herz")'
|
||||
@@ -39,7 +39,7 @@ const Match3TileType = sequelize.define('Match3TileType', {
|
||||
defaultValue: 10,
|
||||
comment: 'Punkte, die dieser Tile-Typ beim Matchen gibt'
|
||||
},
|
||||
is_active: {
|
||||
isActive: {
|
||||
type: DataTypes.BOOLEAN,
|
||||
allowNull: false,
|
||||
defaultValue: true,
|
||||
@@ -54,8 +54,7 @@ const Match3TileType = sequelize.define('Match3TileType', {
|
||||
{
|
||||
unique: true,
|
||||
fields: ['name']
|
||||
,
|
||||
freezeTableName: true}
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
|
||||
@@ -7,11 +7,11 @@ const UserLevelProgress = sequelize.define('UserLevelProgress', {
|
||||
primaryKey: true,
|
||||
autoIncrement: true
|
||||
},
|
||||
user_progress_id: {
|
||||
userProgressId: {
|
||||
type: DataTypes.INTEGER,
|
||||
allowNull: false
|
||||
},
|
||||
level_id: {
|
||||
levelId: {
|
||||
type: DataTypes.INTEGER,
|
||||
allowNull: false
|
||||
},
|
||||
@@ -31,7 +31,7 @@ const UserLevelProgress = sequelize.define('UserLevelProgress', {
|
||||
type: DataTypes.INTEGER,
|
||||
defaultValue: 0
|
||||
},
|
||||
is_completed: {
|
||||
isCompleted: {
|
||||
type: DataTypes.BOOLEAN,
|
||||
defaultValue: false
|
||||
},
|
||||
@@ -39,27 +39,27 @@ const UserLevelProgress = sequelize.define('UserLevelProgress', {
|
||||
type: DataTypes.INTEGER,
|
||||
defaultValue: 1
|
||||
},
|
||||
best_score: {
|
||||
bestScore: {
|
||||
type: DataTypes.INTEGER,
|
||||
defaultValue: 0
|
||||
},
|
||||
best_moves: {
|
||||
bestMoves: {
|
||||
type: DataTypes.INTEGER,
|
||||
defaultValue: 0
|
||||
},
|
||||
best_time: {
|
||||
bestTime: {
|
||||
type: DataTypes.INTEGER,
|
||||
defaultValue: 0
|
||||
},
|
||||
completed_at: {
|
||||
completedAt: {
|
||||
type: DataTypes.DATE,
|
||||
allowNull: true
|
||||
},
|
||||
created_at: {
|
||||
createdAt: {
|
||||
type: DataTypes.DATE,
|
||||
defaultValue: DataTypes.NOW
|
||||
},
|
||||
updated_at: {
|
||||
updatedAt: {
|
||||
type: DataTypes.DATE,
|
||||
defaultValue: DataTypes.NOW
|
||||
}
|
||||
@@ -71,9 +71,8 @@ const UserLevelProgress = sequelize.define('UserLevelProgress', {
|
||||
indexes: [
|
||||
{
|
||||
unique: true,
|
||||
fields: ['user_progress_id', 'level_id'] // WICHTIG: Bei underscored: true müssen snake_case Namen verwendet werden
|
||||
,
|
||||
freezeTableName: true}
|
||||
fields: ['userProgressId', 'levelId'] // WICHTIG: Bei underscored: true müssen snake_case Namen verwendet werden
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
|
||||
@@ -7,43 +7,43 @@ const UserProgress = sequelize.define('UserProgress', {
|
||||
primaryKey: true,
|
||||
autoIncrement: true
|
||||
},
|
||||
user_id: {
|
||||
userId: {
|
||||
type: DataTypes.STRING(255),
|
||||
allowNull: false
|
||||
},
|
||||
campaign_id: {
|
||||
campaignId: {
|
||||
type: DataTypes.INTEGER,
|
||||
allowNull: false
|
||||
},
|
||||
total_score: {
|
||||
totalScore: {
|
||||
type: DataTypes.INTEGER,
|
||||
defaultValue: 0
|
||||
},
|
||||
total_stars: {
|
||||
totalStars: {
|
||||
type: DataTypes.INTEGER,
|
||||
defaultValue: 0
|
||||
},
|
||||
levels_completed: {
|
||||
levelsCompleted: {
|
||||
type: DataTypes.INTEGER,
|
||||
defaultValue: 0
|
||||
},
|
||||
current_level: {
|
||||
currentLevel: {
|
||||
type: DataTypes.INTEGER,
|
||||
defaultValue: 1
|
||||
},
|
||||
is_completed: {
|
||||
isCompleted: {
|
||||
type: DataTypes.BOOLEAN,
|
||||
defaultValue: false
|
||||
},
|
||||
last_played: {
|
||||
lastPlayed: {
|
||||
type: DataTypes.DATE,
|
||||
defaultValue: DataTypes.NOW
|
||||
},
|
||||
created_at: {
|
||||
createdAt: {
|
||||
type: DataTypes.DATE,
|
||||
defaultValue: DataTypes.NOW
|
||||
},
|
||||
updated_at: {
|
||||
updatedAt: {
|
||||
type: DataTypes.DATE,
|
||||
defaultValue: DataTypes.NOW
|
||||
}
|
||||
@@ -55,9 +55,8 @@ const UserProgress = sequelize.define('UserProgress', {
|
||||
indexes: [
|
||||
{
|
||||
unique: true,
|
||||
fields: ['user_id', 'campaign_id'] // WICHTIG: Bei underscored: true müssen snake_case Namen verwendet werden
|
||||
,
|
||||
freezeTableName: true}
|
||||
fields: ['userId', 'campaignId'] // WICHTIG: Bei underscored: true müssen snake_case Namen verwendet werden
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user