Änderungen am TAgebuch
This commit is contained in:
@@ -7,6 +7,10 @@ const Club = sequelize.define('Club', {
|
||||
allowNull: false,
|
||||
unique: true,
|
||||
},
|
||||
}, {
|
||||
tableName: 'clubs',
|
||||
underscored: true,
|
||||
timestamps: true
|
||||
});
|
||||
|
||||
export default Club;
|
||||
|
||||
34
backend/models/DiaryDates.js
Normal file
34
backend/models/DiaryDates.js
Normal file
@@ -0,0 +1,34 @@
|
||||
import { DataTypes } from 'sequelize';
|
||||
import sequelize from '../database.js';
|
||||
import Club from './Club.js'; // Importiere das Club-Modell
|
||||
|
||||
const DiaryDate = sequelize.define('DiaryDate', {
|
||||
date: {
|
||||
type: DataTypes.DATEONLY,
|
||||
allowNull: false,
|
||||
},
|
||||
clubId: {
|
||||
type: DataTypes.INTEGER,
|
||||
allowNull: false,
|
||||
references: {
|
||||
model: Club,
|
||||
key: 'id'
|
||||
},
|
||||
onDelete: 'CASCADE',
|
||||
},
|
||||
trainingStart: {
|
||||
type: DataTypes.TIME,
|
||||
allowNull: true,
|
||||
},
|
||||
trainingEnd: {
|
||||
type: DataTypes.TIME,
|
||||
allowNull: true,
|
||||
}
|
||||
}, {
|
||||
tableName: 'diary_dates',
|
||||
underscored: true,
|
||||
timestamps: true
|
||||
});
|
||||
|
||||
|
||||
export default DiaryDate;
|
||||
@@ -7,20 +7,18 @@ const Log = sequelize.define('Log', {
|
||||
type: DataTypes.STRING,
|
||||
allowNull: false,
|
||||
},
|
||||
timestamp: {
|
||||
type: DataTypes.DATE,
|
||||
defaultValue: DataTypes.NOW,
|
||||
},
|
||||
userId: {
|
||||
type: DataTypes.INTEGER,
|
||||
allowNull: false,
|
||||
references: {
|
||||
model: User,
|
||||
model: 'user',
|
||||
key: 'id',
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
underscored: true
|
||||
}, {
|
||||
underscored: true,
|
||||
tableName: 'log',
|
||||
timestamps: true
|
||||
});
|
||||
|
||||
export default Log;
|
||||
|
||||
@@ -1,12 +1,10 @@
|
||||
const { DataTypes, Model } = require('sequelize');
|
||||
const crypto = require('crypto');
|
||||
const sequelize = require('../database');
|
||||
const Club = require('./Club');
|
||||
const { encryptData, decryptData } = require('../utils/encrypt');
|
||||
import { DataTypes, Model } from 'sequelize';
|
||||
import crypto from 'crypto';
|
||||
import sequelize from '../database.js';
|
||||
import Club from './Club.js';
|
||||
import { encryptData, decryptData } from '../utils/encrypt.js';
|
||||
|
||||
class Member extends Model {}
|
||||
|
||||
Member.init({
|
||||
const Member = sequelize.define('User', {
|
||||
id: {
|
||||
type: DataTypes.INTEGER,
|
||||
primaryKey: true,
|
||||
@@ -18,18 +16,30 @@ Member.init({
|
||||
unique: true,
|
||||
allowNull: false,
|
||||
defaultValue() {
|
||||
return crypto.randomBytes(16).toString('hex');
|
||||
return crypto.randomBytes(64).toString('hex');
|
||||
}
|
||||
},
|
||||
name: {
|
||||
firstName: {
|
||||
type: DataTypes.STRING,
|
||||
allowNull: false,
|
||||
set(value) {
|
||||
const encryptedValue = encryptData(value);
|
||||
this.setDataValue('name', encryptedValue);
|
||||
this.setDataValue('firstName', encryptedValue);
|
||||
},
|
||||
get() {
|
||||
const encryptedValue = this.getDataValue('name');
|
||||
const encryptedValue = this.getDataValue('firstName');
|
||||
return decryptData(encryptedValue);
|
||||
}
|
||||
},
|
||||
lastName: {
|
||||
type: DataTypes.STRING,
|
||||
allowNull: false,
|
||||
set(value) {
|
||||
const encryptedValue = encryptData(value);
|
||||
this.setDataValue('lastName', encryptedValue);
|
||||
},
|
||||
get() {
|
||||
const encryptedValue = this.getDataValue('lastName');
|
||||
return decryptData(encryptedValue);
|
||||
}
|
||||
},
|
||||
@@ -80,27 +90,50 @@ Member.init({
|
||||
const encryptedValue = this.getDataValue('city');
|
||||
return decryptData(encryptedValue);
|
||||
}
|
||||
},
|
||||
email: {
|
||||
type: DataTypes.STRING,
|
||||
allowNull: false,
|
||||
set(value) {
|
||||
const encryptedValue = encryptData(value);
|
||||
this.setDataValue('email', encryptedValue);
|
||||
},
|
||||
get() {
|
||||
const encryptedValue = this.getDataValue('email');
|
||||
return decryptData(encryptedValue);
|
||||
}
|
||||
},
|
||||
clubId: {
|
||||
type: DataTypes.INTEGER,
|
||||
allowNull: false,
|
||||
},
|
||||
active: {
|
||||
type: DataTypes.BOOLEAN,
|
||||
allowNull: false,
|
||||
default: true,
|
||||
}
|
||||
}, {
|
||||
underscored: true,
|
||||
sequelize,
|
||||
modelName: 'Member',
|
||||
tableName: 'members',
|
||||
tableName: 'member',
|
||||
timestamps: true,
|
||||
|
||||
hooks: {
|
||||
beforeCreate: (member) => {
|
||||
afterCreate: (member) => {
|
||||
member.hashedId = crypto.createHash('sha256').update(String(member.id)).digest('hex');
|
||||
member.save();
|
||||
},
|
||||
beforeUpdate: (member) => {
|
||||
if (member.changed('id')) {
|
||||
member.hashedId = crypto.createHash('sha256').update(String(member.id)).digest('hex');
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
{
|
||||
underscored: true,
|
||||
tableName: 'log',
|
||||
timestamps: true
|
||||
}
|
||||
);
|
||||
|
||||
Member.belongsTo(Club);
|
||||
Club.hasMany(Member);
|
||||
Member.belongsTo(Club, { as: 'club' });
|
||||
Club.hasMany(Member, { as: 'members' });
|
||||
|
||||
module.exports = Member;
|
||||
export default Member;
|
||||
|
||||
@@ -3,6 +3,12 @@ import sequelize from '../database.js';
|
||||
import bcrypt from 'bcrypt';
|
||||
|
||||
const User = sequelize.define('User', {
|
||||
id: {
|
||||
type: DataTypes.INTEGER,
|
||||
primaryKey: true,
|
||||
autoIncrement: true,
|
||||
allowNull: false
|
||||
},
|
||||
hashedId: {
|
||||
type: DataTypes.STRING(1024),
|
||||
allowNull: true,
|
||||
@@ -16,6 +22,10 @@ const User = sequelize.define('User', {
|
||||
type: DataTypes.STRING,
|
||||
allowNull: false,
|
||||
},
|
||||
salt: {
|
||||
type: DataTypes.STRING,
|
||||
allowNull: true,
|
||||
},
|
||||
activationCode: {
|
||||
type: DataTypes.STRING,
|
||||
allowNull: true,
|
||||
@@ -30,20 +40,27 @@ const User = sequelize.define('User', {
|
||||
}
|
||||
}, {
|
||||
underscored: true,
|
||||
table: 'user',
|
||||
tableName: 'user',
|
||||
timestamps: true,
|
||||
hooks: {
|
||||
beforeCreate: async (user) => {
|
||||
const salt = await bcrypt.genSalt(10);
|
||||
user.salt = salt;
|
||||
console.log(user);
|
||||
user.password = await bcrypt.hash(user.password, salt);
|
||||
},
|
||||
beforeUpdate: async (user) => {
|
||||
if (user.changed('password')) {
|
||||
const salt = await bcrypt.genSalt(10);
|
||||
user.password = await bcrypt.hash(user.password, salt);
|
||||
if (!user.password.startsWith('$2b$') && !user.password.startsWith('$2a$')) {
|
||||
const salt = user.salt;
|
||||
user.password = await bcrypt.hash(user.password, salt);
|
||||
}
|
||||
}
|
||||
},
|
||||
afterCreate: async (user) => {
|
||||
user.hashedId = bcrypt.hash(user.id.toString());
|
||||
const salt = await bcrypt.genSalt(10);
|
||||
user.hashedId = await bcrypt.hash(user.id.toString(), salt);
|
||||
await user.save();
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
@@ -23,7 +23,9 @@ const UserClub = sequelize.define('UserClub', {
|
||||
defaultValue: false,
|
||||
},
|
||||
}, {
|
||||
underscored: true
|
||||
underscored: true,
|
||||
tableName: 'user_club',
|
||||
timestamps: true
|
||||
});
|
||||
|
||||
User.belongsToMany(Club, { through: UserClub, foreignKey: 'userId' });
|
||||
|
||||
@@ -2,6 +2,7 @@ import User from './User.js';
|
||||
import Log from './Log.js';
|
||||
import Club from './Club.js';
|
||||
import UserClub from './UserClub.js';
|
||||
import DiaryDate from './DiaryDates.js';
|
||||
|
||||
User.hasMany(Log, { foreignKey: 'userId' });
|
||||
Log.belongsTo(User, { foreignKey: 'userId' });
|
||||
@@ -9,4 +10,7 @@ Log.belongsTo(User, { foreignKey: 'userId' });
|
||||
User.belongsToMany(Club, { through: UserClub, foreignKey: 'userId' });
|
||||
Club.belongsToMany(User, { through: UserClub, foreignKey: 'clubId' });
|
||||
|
||||
DiaryDate.belongsTo(Club, { foreignKey: 'clubId' });
|
||||
Club.hasMany(DiaryDate, { foreignKey: 'clubId' });
|
||||
|
||||
export { User, Log, Club, UserClub };
|
||||
|
||||
Reference in New Issue
Block a user