Some changes

This commit is contained in:
Torsten Schulz
2024-09-04 10:46:39 +02:00
parent 1c053eb491
commit 5707c929d4
12 changed files with 287 additions and 23 deletions

View File

@@ -0,0 +1,21 @@
import Activity from '../models/Activity.js';
export const addActivity = async (req, res) => {
try {
const { diaryDateId, description } = req.body;
const activity = await Activity.create({ diaryDateId, description });
res.status(201).json(activity);
} catch (error) {
res.status(500).json({ error: 'Fehler beim Hinzufügen der Aktivität' });
}
};
export const getActivities = async (req, res) => {
try {
const { diaryDateId } = req.params;
const activities = await Activity.findAll({ where: { diaryDateId } });
res.status(200).json(activities);
} catch (error) {
res.status(500).json({ error: 'Fehler beim Abrufen der Aktivitäten' });
}
};

View File

@@ -40,8 +40,8 @@ const updateTrainingTimes = async (req, res) => {
const { clubId } = req.params;
const { authcode: userToken } = req.headers;
const { date, trainingStart, trainingEnd } = req.body;
if (!date || !trainingStart || !trainingEnd) {
throw new HttpError('All fields (date, trainingStart, trainingEnd) are required', 400);
if (!date || !trainingStart) {
throw new HttpError('notallfieldsfilled', 400);
}
const updatedDate = await diaryService.updateTrainingTimes(userToken, clubId, date, trainingStart, trainingEnd);
res.status(200).json(updatedDate);

View File

@@ -0,0 +1,34 @@
import Participant from '../models/Participant.js';
export const getParticipants = async (req, res) => {
try {
const { dateId } = req.params;
const participants = await Participant.findAll({ where: { diaryDateId: dateId } });
res.status(200).json(participants);
} catch (error) {
console.log(error);
res.status(500).json({ error: 'Fehler beim Abrufen der Teilnehmer' });
}
};
export const addParticipant = async (req, res) => {
try {
const { diaryDateId, memberId } = req.body;
const participant = await Participant.create({ diaryDateId, memberId });
res.status(201).json(participant);
} catch (error) {
console.log(error);
res.status(500).json({ error: 'Fehler beim Hinzufügen des Teilnehmers' });
}
};
export const removeParticipant = async (req, res) => {
try {
const { diaryDateId, memberId } = req.body;
await Participant.destroy({ where: { diaryDateId, memberId } });
res.status(200).json({ message: 'Teilnehmer entfernt' });
} catch (error) {
console.log(error);
res.status(500).json({ error: 'Fehler beim Entfernen des Teilnehmers' });
}
};

View File

@@ -0,0 +1,30 @@
import { DataTypes } from 'sequelize';
import sequelize from '../database.js';
import DiaryDate from './DiaryDates.js';
const Activity = sequelize.define('Activity', {
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true,
allowNull: false
},
description: {
type: DataTypes.TEXT('long'),
allowNull: false
},
diaryDateId: {
type: DataTypes.INTEGER,
allowNull: false,
references: {
model: DiaryDate,
key: 'id'
}
}
}, {
underscored: true,
tableName: 'activities',
timestamps: true
});
export default Activity;

View File

@@ -0,0 +1,39 @@
import { DataTypes } from 'sequelize';
import sequelize from '../database.js';
import Member from './Member.js';
import DiaryDate from './DiaryDates.js';
const Participant = sequelize.define('Participant', {
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true,
allowNull: false
},
diaryDateId: {
type: DataTypes.INTEGER,
allowNull: false,
references: {
model: DiaryDate,
key: 'id'
}
},
memberId: {
type: DataTypes.INTEGER,
allowNull: false,
references: {
model: Member,
key: 'id'
}
},
notes: {
type: DataTypes.STRING(4096),
allowNull: true,
}
}, {
underscored: true,
tableName: 'participants',
timestamps: true
});
export default Participant;

View File

@@ -46,7 +46,6 @@ const User = sequelize.define('User', {
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) => {
@@ -58,8 +57,7 @@ const User = sequelize.define('User', {
}
},
afterCreate: async (user) => {
const salt = await bcrypt.genSalt(10);
user.hashedId = await bcrypt.hash(user.id.toString(), salt);
user.hashedId = await bcrypt.hash(user.id.toString(), user.salt);
await user.save();
}
},

View File

@@ -3,6 +3,9 @@ import Log from './Log.js';
import Club from './Club.js';
import UserClub from './UserClub.js';
import DiaryDate from './DiaryDates.js';
import Participant from './Participant.js';
import Member from './Member.js';
import Activity from './Activity.js';
User.hasMany(Log, { foreignKey: 'userId' });
Log.belongsTo(User, { foreignKey: 'userId' });
@@ -13,4 +16,11 @@ 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.hasMany(Activity, { as: 'activities', foreignKey: 'diaryDateId' });
Activity.belongsTo(DiaryDate, { as: 'diaryDate', foreignKey: 'diaryDateId' });
export { User, Log, Club, UserClub };

View File

@@ -0,0 +1,10 @@
import express from 'express';
import { addActivity, getActivities } from '../controllers/activityController.js';
import { authenticate } from '../middleware/authMiddleware.js';
const router = express.Router();
router.post('/add', authenticate, addActivity);
router.get('/:diaryDateId', authenticate, getActivities);
export default router;

View File

@@ -0,0 +1,11 @@
import express from 'express';
import { getParticipants, addParticipant, removeParticipant } from '../controllers/participantController.js';
import { authenticate } from '../middleware/authMiddleware.js';
const router = express.Router();
router.get('/:dateId', authenticate, getParticipants);
router.post('/add', authenticate, addParticipant);
router.post('/remove', authenticate, removeParticipant);
export default router;

View File

@@ -7,8 +7,12 @@ import authRoutes from './routes/authRoutes.js';
import clubRoutes from './routes/clubRoutes.js';
import diaryRoutes from './routes/diaryRoutes.js';
import memberRoutes from './routes/memberRoutes.js';
import participantRoutes from './routes/participantRoutes.js';
import activityRoutes from './routes/activityRoutes.js';
import Member from './models/Member.js';
import DiaryDate from './models/DiaryDates.js';
import Participant from './models/Participant.js';
import Activity from './models/Activity.js';
const app = express();
const port = process.env.PORT || 3000;
@@ -21,6 +25,8 @@ app.use('/api/auth', authRoutes);
app.use('/api/clubs', clubRoutes);
app.use('/api/clubmembers', memberRoutes);
app.use('/api/diary', diaryRoutes);
app.use('/api/participants', participantRoutes);
app.use('/api/activities', activityRoutes);
app.use(express.static(path.join(__dirname, '../frontend/dist')));
@@ -31,12 +37,14 @@ app.get('*', (req, res) => {
(async () => {
try {
await sequelize.authenticate();
await User.sync({ alter: true });
await Club.sync({ alter: true });
await UserClub.sync({ alter: true });
await Log.sync({ alter: true });
await User.sync({ alter: true });
await Club.sync({ alter: true });
await UserClub.sync({ alter: true });
await Log.sync({ alter: true });
await Member.sync({ alter: true });
await DiaryDate.sync({ alter: true });
await Participant.sync({ alter: true });
await Activity.sync({ alter: true });
app.listen(port, () => {
console.log(`Server is running on http://localhost:${port}`);
});