Skip to content

Commit

Permalink
mvb edit
Browse files Browse the repository at this point in the history
  • Loading branch information
Mipronimo committed Dec 11, 2023
1 parent f9e5409 commit 8c2b62f
Show file tree
Hide file tree
Showing 12 changed files with 234 additions and 70 deletions.
12 changes: 10 additions & 2 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,8 @@ app.use(keycloak.middleware())

import avatarRouter from './src/routes/avatar.route.js'
import eventRouter from './src/routes/event.route.js'
import featureRouter from './src/routes/feature.route.js'
import motivationRouter from './src/routes/motivation.route.js'
import settingRouter from './src/routes/setting.route.js'
import responsibilityRouter from './src/routes/responsibility.route.js'
import mailRouter from './src/routes/mail.route.js'
Expand All @@ -58,7 +60,7 @@ import miscRouter from './src/routes/misc.route.js'
import supporterYearRouter from './src/routes/supporterYear.route.js'
import userRouter from './src/routes/user.route.js'
import userCriminalRecordRouter from './src/routes/userCriminalRecord.route.js'
import userMotivation from './src/routes/userMotivation.route.js'
import userMotivationRouter from './src/routes/userMotivation.route.js'
import userDocumentRouter from './src/routes/userDocument.route.js'
import userPermissionRouter from './src/routes/userPermission.route.js'
import userYearRouter from './src/routes/userYear.route.js'
Expand All @@ -75,9 +77,12 @@ import supporterYearModel from './src/models/supporterYear.model.js';
import supporterDayModel from './src/models/supporterDay.model.js';
import userDocumentModel from './src/models/userDocument.model.js';
import userPermissionModel from './src/models/userPermission.model.js';
import userMotivationModel from './src/models/userMotivation.model.js';

app.use('/avatar', avatarRouter);
app.use('/event', eventRouter);
app.use('/feature', featureRouter);
app.use('/motivation', motivationRouter);
app.use('/setting', settingRouter);
app.use('/responsibility', responsibilityRouter);
app.use('/mail', mailRouter);
Expand All @@ -86,7 +91,7 @@ app.use('/misc', miscRouter);
app.use('/user', userRouter);
app.use('/supporterYear', supporterYearRouter);
app.use('/userCriminalRecord', userCriminalRecordRouter);
app.use('/userMotivation', userMotivation);
app.use('/userMotivation', userMotivationRouter);
app.use('/userDocument', userDocumentRouter);
app.use('/userPermission', userPermissionRouter);
app.use('/userYear', userYearRouter);
Expand Down Expand Up @@ -116,5 +121,8 @@ supporterDayModel.hasOne(supporterYearModel, {foreignKey: 'uuid'})
userModel.hasOne(userDocumentModel, {foreignKey: 'uuid'})
userDocumentModel.hasOne(userModel, {foreignKey: 'uuid'})

userModel.hasOne(userMotivationModel, {foreignKey: 'uuid'})
userMotivationModel.hasOne(userModel, {foreignKey: 'uuid'})

userModel.hasMany(userPermissionModel, {foreignKey: 'uuid'})
userPermissionModel.hasOne(userModel, {foreignKey: 'uuid'})
48 changes: 48 additions & 0 deletions src/controllers/feature.controller.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
import featureModel from '../models/feature.model.js'

export async function findAll(req, res) {
try {
const feature = await featureModel.findAll({where: req.query})
res.status(200).send(feature)
} catch(e) {
console.log(e)
res.status(400).send()
}
}

export async function findOne(req, res) {
if (!req.params || !req.params.id ) {
res.status(400).send('bad request')
return;
}
const feature = await featureModel.findByPk(req.params.id)
if (feature) {
res.status(200).send(feature)
} else {
res.status(404).send('not found')
}
}

export async function create(req, res) {
if (!req.body) {
res.status(400).send('bad request')
return;
}
let data = req.body
featureModel.create(data)
res.status(200).send()
}

export async function update(req, res) {
if (!req.params || !req.params.id) {
res.status(400).send('bad request')
return;
}
const feature = await featureModel.findByPk(req.params.id)
if (feature) {
featureModel.update(req.body, {where: {id: req.params.id}});
res.status(200).send(feature)
} else {
res.status(404).send('not found')
}
}
36 changes: 36 additions & 0 deletions src/controllers/motivation.controller.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import motivationModel from '../models/motivation.model.js'

export async function findAll(req, res) {
try {
const motivation = await motivationModel.findAll({where: req.query, order: [['prio', 'ASC']]})
res.status(200).send(motivation)
} catch(e) {
console.log(e)
res.status(400).send()
}
}

export async function findOne(req, res) {
if (!req.params || !req.params.id ) {
res.status(400).send('bad request')
return;
}
const motivation = await motivationModel.findByPk(req.params.id)
if (motivation) {
res.status(200).send(motivation)
} else {
res.status(404).send('not found')
}
}

export async function update(req, res) {
if (Array.isArray(req.body)) {
await motivationModel.destroy({where: {}})
await motivationModel.bulkCreate(req.body)
res.status(200).send()
return;
} else {
res.status(400).send('bad request')
return;
}
}
107 changes: 48 additions & 59 deletions src/controllers/userMotivation.controller.js
Original file line number Diff line number Diff line change
@@ -1,76 +1,65 @@
import userYearModel from '../models/userYear.model.js'
import userMotivationModel from '../models/userMotivation.model.js'
import settingModel from '../models/setting.model.js'
import fs from 'fs'
import path from 'path'
import { fileURLToPath } from 'url';

const __dirname = path.dirname(fileURLToPath(import.meta.url));
export async function findAll(req, res) {
const year = req.query.year || await settingModel.findByPk('currentYear')
const isLT = req.kauth.grant.access_token.content.groups.includes(year + '_LT')
if (!isLT) {
res.status(403).send()
return;
}
try {
const userMotivation = await userMotivationModel.findAll({where: req.query})
res.status(200).send(userMotivation)
} catch(e) {
res.status(400).send()
}
}

export async function findOne(req, res) {
if (!req.params || !req.params.uuid || !req.params.year) {
if (!req.params || !req.params.uuid ) {
res.status(400).send('bad request')
return;
}
const isLT = req.kauth.grant.access_token.content.groups.includes(req.params.year + '_LT')
const self = req.kauth.grant.access_token.content.sub === req.params.uuid
if (!self && !isLT) {
const executingUser = req.kauth.grant.access_token.content.sub
const isSelf = executingUser === req.params.uuid
const year = (await settingModel.findByPk('currentYear')).value
const isLT = req.kauth.grant.access_token.content.groups.includes(year + '_LT')
const allowed = isLT || isSelf
if (!allowed) {
res.status(403).send()
return;
}
const userYear = await userYearModel.findOne({where: {uuid: req.params.uuid, year: req.params.year}})
if (userYear) {
const filePath = __dirname + '/../../uploads/motivation/' + userYear.motivationHash + '.pdf';
if (fs.existsSync(filePath)) {
res.sendFile(path.resolve(filePath))
} else {
res.status(404).send('not found')
}
} else {
res.status(404).send('not found')
}
const userMotivation = await userMotivationModel.findOne({where: {uuid: req.params.uuid}})
if (userMotivation) {
res.status(200).send(userMotivation)
} else {
res.status(404).send('not found')
}
}

export async function createOrUpdate(req, res) {
const { file } = req.files;
const self = req.kauth.grant.access_token.content.sub === req.params.uuid
if (!self) {
const executingUser = req.kauth.grant.access_token.content.sub
const isSelf = executingUser === req.params.uuid
const year = (await settingModel.findByPk('currentYear')).value
const isLT = req.kauth.grant.access_token.content.groups.includes(year + '_LT')
const allowed = isLT || isSelf
if (!allowed) {
res.status(403).send()
return;
}

if (!file) {
return res.sendStatus(400)
}

if (file.mimetype !== 'application/pdf') {
console.log(req.files)
return res.sendStatus(400)
}

file.mv(__dirname + '/../../uploads/motivation/' + file.md5 + '.pdf');

const year = req.params.year || (await settingModel.findByPk('currentYear')).value
const userYear = await userYearModel.findOne({
where: {
uuid: req.params.uuid,
year: year
}
})
let data = {
motivationHash: file.md5
}
if (userYear) {
if (userYear.status == 1) {
data['status'] = 2;
}
userYearModel.update(data, {
where: {
uuid: req.params.uuid,
year: year
}
})
res.status(200).send()
}
if (!req.params || !req.params.uuid || !req.body || !req.body.motivation) {
res.status(400).send('bad request')
return;
}
const userMotivation = await userMotivationModel.findOne({where: {uuid: req.params.uuid}})
if (userMotivation) {
userMotivationModel.update(req.body, {where: {uuid: req.params.uuid}});
res.status(200).send(userMotivation)
} else {
res.status(404).send()
var data = req.body
data.uuid = req.params.uuid
userMotivationModel.create(data)
res.status(200).send(userMotivation)
}
};
}
12 changes: 12 additions & 0 deletions src/models/feature.model.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { DataTypes } from 'sequelize';
import sequelize from './db.model.js';

export default sequelize.define('Feature', {
id: {
type: DataTypes.STRING,
primaryKey: true
},
enabled: {
type: DataTypes.BOOLEAN,
}
});
21 changes: 21 additions & 0 deletions src/models/motivation.model.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import { DataTypes } from 'sequelize';
import sequelize from './db.model.js';

export default sequelize.define('Motivation', {
id: {
type: DataTypes.STRING,
primaryKey: true
},
type: {
type: DataTypes.STRING
},
prio: {
type: DataTypes.INTEGER
},
content: {
type: DataTypes.TEXT
},
hint: {
type: DataTypes.TEXT
},
});
12 changes: 8 additions & 4 deletions src/models/user.model.js
Original file line number Diff line number Diff line change
Expand Up @@ -121,8 +121,12 @@ export default sequelize.define('User', {
},
public: true
},
nutrition: {
type: DataTypes.STRING,
public: false
}
vegetarian: {
type: DataTypes.BOOLEAN,
validate: {}
},
lactose: {
type: DataTypes.BOOLEAN,
validate: {}
},
});
16 changes: 16 additions & 0 deletions src/models/userMotivation.model.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import { DataTypes } from 'sequelize';
import sequelize from './db.model.js';

export default sequelize.define('UserMotivation', {
uuid: {
type: DataTypes.UUID,
primaryKey: true,
references: {
model: 'Users',
key: 'uuid'
}
},
motivation: {
type: DataTypes.JSON
}
});
13 changes: 10 additions & 3 deletions src/models/userYear.model.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,6 @@ export default sequelize.define('UserYear', {
status: {
type: DataTypes.INTEGER
},
motivationHash: {
type: DataTypes.STRING
},
build: {
type: DataTypes.TINYINT,
validate: {
Expand Down Expand Up @@ -181,13 +178,23 @@ export default sequelize.define('UserYear', {
max: 3
}
},
wishPrayer: {
type: DataTypes.TINYINT,
validate: {
min: 0,
max: 3
}
},
wishOther: {
type: DataTypes.TINYINT,
validate: {
min: 0,
max: 3
}
},
wishOtherText: {
type: DataTypes.TEXT
},
comment: {
type: DataTypes.TEXT
}
Expand Down
12 changes: 12 additions & 0 deletions src/routes/feature.route.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { Router } from 'express';
import keycloak from '../config/keycloak.js';
import { findAll, findOne, create, update } from '../controllers/feature.controller.js'

var router = new Router();

router.get('/', keycloak.protect(), findAll);
router.get('/:id', keycloak.protect(), findOne);
router.post('/', keycloak.protect(['admin']), create);
router.post('/:id', keycloak.protect(['admin']), update);

export default router
11 changes: 11 additions & 0 deletions src/routes/motivation.route.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import { Router } from 'express';
import keycloak from '../config/keycloak.js';
import { findAll, findOne, update } from '../controllers/motivation.controller.js'

var router = new Router();

router.get('/', keycloak.protect(), findAll);
router.get('/:id', keycloak.protect(), findOne);
router.post('/', keycloak.protect(), update);

export default router
Loading

0 comments on commit 8c2b62f

Please sign in to comment.