started tournament implementation

This commit is contained in:
Torsten Schulz
2025-02-24 16:21:43 +01:00
parent 9442e3683b
commit df41720b50
14 changed files with 906 additions and 15 deletions

View File

@@ -0,0 +1,37 @@
import { DataTypes } from 'sequelize';
import sequelize from '../database.js';
const Tournament = sequelize.define('Tournament', {
name: {
type: DataTypes.STRING,
allowNull: false,
},
date: {
type: DataTypes.DATEONLY,
allowNull: false,
},
type: {
type: DataTypes.STRING,
allowNull: false,
},
bestOfEndroundSize: {
type: DataTypes.INTEGER,
allowNull: false,
},
numberOfGroups: {
type: DataTypes.INTEGER,
allowNull: true,
defaultValue: 0,
},
clubId: {
type: DataTypes.INTEGER,
allowNull: false,
defaultValue: 1
}
}, {
underscored: true,
tableName: 'tournament',
timestamps: true,
});
export default Tournament;

View File

@@ -0,0 +1,21 @@
import { DataTypes } from 'sequelize';
import sequelize from '../database.js';
const TournamentGroup = sequelize.define('TournamentGroup', {
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true,
allowNull: false
},
tournamentId : {
type: DataTypes.INTEGER,
allowNull: false
},
}, {
underscored: true,
tableName: 'tournament_group',
timestamps: true,
});
export default TournamentGroup;

View File

@@ -0,0 +1,31 @@
import { DataTypes } from 'sequelize';
import sequelize from '../database.js';
const TournamentMatch = sequelize.define('TournamentMatch', {
tournamentId: {
type: DataTypes.INTEGER,
allowNull: false,
},
groupId: {
type: DataTypes.INTEGER,
allowNull: true,
},
round: {
type: DataTypes.STRING,
allowNull: false,
},
player1Id: {
type: DataTypes.INTEGER,
allowNull: false,
},
player2Id: {
type: DataTypes.INTEGER,
allowNull: false,
},
}, {
underscored: true,
tableName: 'tournament_match',
timestamps: true,
});
export default TournamentMatch;

View File

@@ -0,0 +1,26 @@
import { DataTypes } from 'sequelize';
import sequelize from '../database.js';
const TournamentMember = sequelize.define('TournamentMember', {
tournamentId: {
type: DataTypes.INTEGER,
autoIncrement: false,
allowNull: true
},
groupId : {
type: DataTypes.INTEGER,
autoIncrement: false,
allowNull: true
},
clubMemberId: {
type: DataTypes.INTEGER,
autoIncrement: false,
allowNull: false
}
}, {
underscored: true,
tableName: 'tournament_member',
timestamps: true,
});
export default TournamentMember;

View File

@@ -0,0 +1,24 @@
import { DataTypes } from 'sequelize';
import sequelize from '../database.js';
const TournamentResult = sequelize.define('TournamentResult', {
matchId: {
type: DataTypes.INTEGER,
allowNull: false,
},
set: {
type: DataTypes.INTEGER,
},
pointsPlayer1: {
type: DataTypes.INTEGER,
},
pointsPlayer2: {
type: DataTypes.INTEGER,
},
}, {
underscored: true,
tableName: 'tournament_result',
timestamps: true,
});
export default TournamentResult;

View File

@@ -21,6 +21,11 @@ import Season from './Season.js';
import Location from './Location.js';
import Group from './Group.js';
import GroupActivity from './GroupActivity.js';
import Tournament from './Tournament.js';
import TournamentGroup from './TournamentGroup.js';
import TournamentMember from './TournamentMember.js';
import TournamentMatch from './TournamentMatch.js';
import TournamentResult from './TournamentResult.js';
User.hasMany(Log, { foreignKey: 'userId' });
Log.belongsTo(User, { foreignKey: 'userId' });
@@ -114,6 +119,43 @@ DiaryDateTag.belongsTo(DiaryTag, { foreignKey: 'tagId', as: 'tag' });
DiaryMemberTag.belongsTo(DiaryDate, { foreignKey: 'diaryDateId', as: 'diaryDates' });
DiaryDate.hasMany(DiaryMemberTag, { foreignKey: 'diaryDateId', as: 'diaryMemberTags' });
Tournament.belongsTo(Club, { foreignKey: 'clubId', as: 'tournamentclub' });
Club.hasMany(Tournament, { foreignKey: 'clubId', as: 'tournaments' });
TournamentGroup.belongsTo(Tournament, { foreignKey: 'tournamentId', as: 'tournaments' });
Tournament.hasMany(TournamentGroup, { foreignKey: 'tournamentId', as: 'tournamentGroups' });
TournamentMember.belongsTo(TournamentGroup, {
foreignKey: 'groupId',
targetKey: 'id',
as: 'group',
constraints: false
});
TournamentGroup.hasMany(TournamentMember, {
foreignKey: 'groupId',
as: 'tournamentGroupMembers'
});
TournamentMember.belongsTo(Member, { foreignKey: 'clubMemberId', as: 'member' });
Member.hasMany(TournamentMember, { foreignKey: 'clubMemberId', as: 'tournamentGroupMembers' });
TournamentMember.belongsTo(Tournament, { foreignKey: 'tournamentId', as: 'tournament' });
Tournament.hasMany(TournamentMember, { foreignKey: 'tournamentId', as: 'tournamentMembers' });
TournamentMatch.belongsTo(Tournament, { foreignKey: 'tournamentId', as: 'tournament' });
Tournament.hasMany(TournamentMatch, { foreignKey: 'tournamentId', as: 'tournamentMatches' });
TournamentMatch.belongsTo(TournamentGroup, { foreignKey: 'groupId', as: 'group' });
TournamentGroup.hasMany(TournamentMatch, { foreignKey: 'groupId', as: 'tournamentMatches' });
TournamentResult.belongsTo(TournamentMatch, { foreignKey: 'matchId', as: 'match' });
TournamentMatch.hasMany(TournamentResult, { foreignKey: 'matchId', as: 'tournamentResults' });
TournamentMatch.belongsTo(TournamentMember, { foreignKey: 'player1Id', as: 'player1' });
TournamentMatch.belongsTo(TournamentMember, { foreignKey: 'player2Id', as: 'player2' });
TournamentMember.hasMany(TournamentMatch, { foreignKey: 'player1Id', as: 'player1Matches' });
TournamentMember.hasMany(TournamentMatch, { foreignKey: 'player2Id', as: 'player2Matches' });
export {
User,
Log,
@@ -137,4 +179,9 @@ export {
Team,
Group,
GroupActivity,
Tournament,
TournamentGroup,
TournamentMember,
TournamentMatch,
TournamentResult,
};