Umfangreiche Änderungen für Trainingslogging

This commit is contained in:
Torsten Schulz
2024-09-09 22:51:37 +02:00
parent c65c629210
commit 28bf98a169
32 changed files with 1702 additions and 54 deletions

View File

@@ -0,0 +1,29 @@
import { DataTypes } from 'sequelize';
import sequelize from '../database.js';
import DiaryDate from './DiaryDates.js';
import { DiaryTag } from './DiaryTag.js'; // Benannter Import
const DiaryDateTag = sequelize.define('DiaryDateTag', {
diaryDateId: {
type: DataTypes.INTEGER,
references: {
model: DiaryDate,
key: 'id',
},
onDelete: 'CASCADE',
},
tagId: {
type: DataTypes.INTEGER,
references: {
model: DiaryTag,
key: 'id',
},
onDelete: 'CASCADE',
},
}, {
underscored: true,
tableName: 'diary_date_tags',
timestamps: true,
});
export default DiaryDateTag;

View File

@@ -0,0 +1,35 @@
import { DataTypes } from 'sequelize';
import sequelize from '../database.js';
import Member from './Member.js';
import DiaryDate from './DiaryDates.js';
const DiaryMemberNote = sequelize.define('DiaryMemberNote', {
memberId: {
type: DataTypes.INTEGER,
references: {
model: Member,
key: 'id',
},
onDelete: 'CASCADE',
allowNull: false,
},
diaryDateId: {
type: DataTypes.INTEGER,
references: {
model: DiaryDate,
key: 'id',
},
onDelete: 'CASCADE',
allowNull: false,
},
content: {
type: DataTypes.STRING(4096),
allowNull: false,
},
}, {
underscored: true,
tableName: 'diary_member_notes',
timestamps: true,
});
export default DiaryMemberNote;

View File

@@ -0,0 +1,41 @@
import { DataTypes } from 'sequelize';
import sequelize from '../database.js';
import Member from './Member.js';
import DiaryDate from './DiaryDates.js';
import { DiaryTag } from './DiaryTag.js';
const DiaryMemberTag = sequelize.define('DiaryMemberTag', {
memberId: {
type: DataTypes.INTEGER,
references: {
model: Member,
key: 'id',
},
onDelete: 'CASCADE',
allowNull: false,
},
diaryDateId: {
type: DataTypes.INTEGER,
references: {
model: DiaryDate,
key: 'id',
},
onDelete: 'CASCADE',
allowNull: false,
},
tagId: {
type: DataTypes.INTEGER,
references: {
model: DiaryTag,
key: 'id',
},
onDelete: 'CASCADE',
allowNull: false,
},
}, {
underscored: true,
tableName: 'diary_member_tags',
timestamps: true,
});
export default DiaryMemberTag;

View File

@@ -0,0 +1,43 @@
// models/DiaryNote.js
import { DataTypes } from 'sequelize';
import sequelize from '../database.js';
import Member from './Member.js';
const DiaryNote = sequelize.define('DiaryNote', {
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true,
allowNull: false,
},
content: {
type: DataTypes.TEXT,
allowNull: false,
},
memberId: {
type: DataTypes.INTEGER,
allowNull: false,
references: {
model: Member,
key: 'id',
},
onDelete: 'CASCADE',
onUpdate: 'CASCADE',
},
diaryDateId: {
type: DataTypes.INTEGER,
allowNull: false,
references: {
model: 'diary_dates',
key: 'id',
},
onDelete: 'CASCADE',
onUpdate: 'CASCADE',
},
}, {
underscored: true,
tableName: 'diary_notes',
timestamps: true,
});
export default DiaryNote;

View File

@@ -0,0 +1,46 @@
import { DataTypes } from 'sequelize';
import sequelize from '../database.js';
import Member from './Member.js';
const DiaryTag = sequelize.define('DiaryTag', {
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true,
allowNull: false,
},
name: {
type: DataTypes.STRING,
allowNull: false,
unique: true,
},
}, {
underscored: true,
tableName: 'diary_tags',
timestamps: true,
});
const MemberDiaryTag = sequelize.define('MemberDiaryTag', {
memberId: {
type: DataTypes.INTEGER,
references: {
model: Member,
key: 'id',
},
onDelete: 'CASCADE',
},
tagId: {
type: DataTypes.INTEGER,
references: {
model: DiaryTag,
key: 'id',
},
onDelete: 'CASCADE',
},
}, {
underscored: true,
tableName: 'member_diary_tags',
timestamps: true,
});
export { DiaryTag, MemberDiaryTag };

View File

@@ -0,0 +1,40 @@
import { DataTypes } from 'sequelize';
import sequelize from '../database.js';
import Member from './Member.js';
import { encryptData, decryptData } from '../utils/encrypt.js';
const MemberNote = sequelize.define('MemberNote', {
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true,
allowNull: false,
},
content: {
type: DataTypes.TEXT,
allowNull: false,
set(value) {
const encryptedValue = encryptData(value);
this.setDataValue('content', encryptedValue);
},
get() {
const encryptedValue = this.getDataValue('content');
return decryptData(encryptedValue);
}
},
memberId: {
type: DataTypes.INTEGER,
allowNull: false,
references: {
model: Member,
key: 'id',
},
onDelete: 'CASCADE',
},
}, {
underscored: true,
tableName: 'member_notes',
timestamps: true,
});
export default MemberNote;

View File

@@ -6,6 +6,12 @@ import DiaryDate from './DiaryDates.js';
import Participant from './Participant.js';
import Member from './Member.js';
import Activity from './Activity.js';
import DiaryNote from './DiaryNote.js';
import { DiaryTag, MemberDiaryTag } from './DiaryTag.js';
import MemberNote from './MemberNote.js';
import DiaryDateTag from './DiaryDateTag.js';
import DiaryMemberNote from './DiaryMemberNote.js';
import DiaryMemberTag from './DiaryMemberTag.js';
User.hasMany(Log, { foreignKey: 'userId' });
Log.belongsTo(User, { foreignKey: 'userId' });
@@ -16,11 +22,47 @@ Club.belongsToMany(User, { through: UserClub, foreignKey: 'clubId' });
DiaryDate.belongsTo(Club, { foreignKey: 'clubId' });
Club.hasMany(DiaryDate, { foreignKey: 'clubId' });
DiaryDate.belongsToMany(Member, { through: Participant, as: 'participants' });
Member.belongsToMany(DiaryDate, { through: Participant, as: 'diaryDates' });
DiaryDate.belongsToMany(Member, { through: Participant, as: 'participants', foreignKey: 'diaryDateId' });
Member.belongsToMany(DiaryDate, { through: Participant, as: 'diaryDates', foreignKey: 'memberId' });
DiaryDate.hasMany(Activity, { as: 'activities', foreignKey: 'diaryDateId' });
Activity.belongsTo(DiaryDate, { as: 'diaryDate', foreignKey: 'diaryDateId' });
Member.hasMany(DiaryNote, { as: 'diaryNotes', foreignKey: 'memberId' });
DiaryNote.belongsTo(Member, { foreignKey: 'memberId' });
export { User, Log, Club, UserClub };
Member.hasMany(MemberNote, { as: 'memberNotes', foreignKey: 'memberId' });
MemberNote.belongsTo(Member, { foreignKey: 'memberId' });
DiaryDate.hasMany(DiaryNote, { as: 'diaryNotes', foreignKey: 'diaryDateId' });
DiaryNote.belongsTo(DiaryDate, { foreignKey: 'diaryDateId' });
Member.belongsToMany(DiaryTag, { through: MemberDiaryTag, as: 'tags', foreignKey: 'memberId' });
DiaryTag.belongsToMany(Member, { through: MemberDiaryTag, as: 'members', foreignKey: 'tagId' });
DiaryDate.belongsToMany(DiaryTag, { through: DiaryDateTag, as: 'diaryTags', foreignKey: 'diaryDateId' });
DiaryTag.belongsToMany(DiaryDate, { through: DiaryDateTag, as: 'diaryDates', foreignKey: 'tagId' });
DiaryDate.belongsToMany(Member, { through: DiaryMemberNote, as: 'noteMembers', foreignKey: 'diaryDateId' });
Member.belongsToMany(DiaryDate, { through: DiaryMemberNote, as: 'noteDates', foreignKey: 'memberId' });
DiaryTag.hasMany(DiaryMemberTag, { foreignKey: 'tagId', as: 'diaryMemberTags' });
DiaryMemberTag.belongsTo(DiaryTag, { foreignKey: 'tagId', as: 'tag' });
export {
User,
Log,
Club,
UserClub,
Member,
DiaryDate,
Participant,
Activity,
DiaryNote,
DiaryTag,
MemberDiaryTag,
MemberNote,
DiaryDateTag,
DiaryMemberNote,
DiaryMemberTag,
};