inital commit

This commit is contained in:
Torsten Schulz
2024-06-15 23:01:46 +02:00
parent 1b7fefe381
commit 61653ff407
105 changed files with 7805 additions and 524 deletions

56
models/ContactPerson.js Normal file
View File

@@ -0,0 +1,56 @@
const { DataTypes } = require('sequelize');
module.exports = (sequelize) => {
const ContactPerson = sequelize.define('ContactPerson', {
name: {
type: DataTypes.STRING,
allowNull: false
},
phone: {
type: DataTypes.STRING,
allowNull: true
},
street: {
type: DataTypes.STRING,
allowNull: true
},
zipcode: {
type: DataTypes.STRING,
allowNull: true
},
city: {
type: DataTypes.STRING,
allowNull: true
},
email: {
type: DataTypes.STRING,
allowNull: true
}
}, {
tableName: 'contact_persons',
timestamps: false
});
ContactPerson.associate = function(models) {
ContactPerson.belongsToMany(models.Event, {
through: models.EventContactPerson,
foreignKey: 'contact_person_id',
otherKey: 'event_id',
as: 'events'
});
ContactPerson.belongsToMany(models.Position, {
through: models.ContactPersonPosition,
foreignKey: 'contact_person_id',
otherKey: 'position_id',
as: 'positions'
});
ContactPerson.belongsToMany(models.Institution, {
through: models.InstitutionContactPerson,
foreignKey: 'contact_person_id',
otherKey: 'institution_id',
as: 'institutions'
});
};
return ContactPerson;
};

View File

@@ -0,0 +1,29 @@
const { DataTypes } = require('sequelize');
module.exports = (sequelize) => {
const ContactPersonPosition = sequelize.define('ContactPersonPosition', {
contact_person_id: {
type: DataTypes.INTEGER,
references: {
model: 'ContactPerson',
key: 'id'
},
onUpdate: 'CASCADE',
onDelete: 'CASCADE'
},
position_id: {
type: DataTypes.INTEGER,
references: {
model: 'Position',
key: 'id'
},
onUpdate: 'CASCADE',
onDelete: 'CASCADE'
}
}, {
tableName: 'contact_person_positions',
timestamps: false
});
return ContactPersonPosition;
};

37
models/EventPlace.js Normal file
View File

@@ -0,0 +1,37 @@
const { DataTypes } = require('sequelize');
module.exports = (sequelize) => {
const EventPlace = sequelize.define('EventPlace', {
name: {
type: DataTypes.STRING,
allowNull: false
},
street: {
type: DataTypes.STRING,
allowNull: false
},
zipcode: {
type: DataTypes.STRING,
allowNull: false
},
city: {
type: DataTypes.STRING,
allowNull: false
},
backgroundColor: {
type: DataTypes.STRING,
allowNull: true
}
}, {
tableName: 'event_places'
});
EventPlace.associate = function(models) {
EventPlace.hasMany(models.Event, {
foreignKey: 'event_place_id',
as: 'events'
});
};
return EventPlace;
};

22
models/EventType.js Normal file
View File

@@ -0,0 +1,22 @@
const { DataTypes } = require('sequelize');
module.exports = (sequelize) => {
const EventType = sequelize.define('EventType', {
caption: {
type: DataTypes.STRING,
allowNull: false
}
}, {
tableName: 'event_types',
timestamps: false
});
EventType.associate = function(models) {
EventType.hasMany(models.Event, {
foreignKey: 'eventTypeId',
as: 'events'
});
};
return EventType;
};

52
models/Institution.js Normal file
View File

@@ -0,0 +1,52 @@
const { DataTypes } = require('sequelize');
module.exports = (sequelize) => {
const Institution = sequelize.define('Institution', {
name: {
type: DataTypes.STRING,
allowNull: false
},
street: {
type: DataTypes.STRING,
allowNull: true
},
zipcode: {
type: DataTypes.STRING,
allowNull: true
},
city: {
type: DataTypes.STRING,
allowNull: true
},
phone: {
type: DataTypes.STRING,
allowNull: true
},
fax: {
type: DataTypes.STRING,
allowNull: true
},
email: {
type: DataTypes.STRING,
allowNull: true
}
}, {
tableName: 'institutions',
timestamps: false
});
Institution.associate = function(models) {
Institution.belongsToMany(models.ContactPerson, {
through: models.InstitutionContactPerson,
foreignKey: 'institution_id',
otherKey: 'contact_person_id',
as: 'contactPersons'
});
Institution.hasMany(models.Event, {
foreignKey: 'institution_id',
as: 'events'
});
};
return Institution;
};

View File

@@ -0,0 +1,29 @@
const { DataTypes } = require('sequelize');
module.exports = (sequelize) => {
const InstitutionContactPerson = sequelize.define('InstitutionContactPerson', {
institution_id: {
type: DataTypes.INTEGER,
references: {
model: 'Institution',
key: 'id'
},
onUpdate: 'CASCADE',
onDelete: 'CASCADE'
},
contact_person_id: {
type: DataTypes.INTEGER,
references: {
model: 'ContactPerson',
key: 'id'
},
onUpdate: 'CASCADE',
onDelete: 'CASCADE'
}
}, {
tableName: 'InstitutionContactPerson',
timestamps: false
});
return InstitutionContactPerson;
};

49
models/MenuItem.js Normal file
View File

@@ -0,0 +1,49 @@
const { DataTypes } = require('sequelize');
module.exports = (sequelize) => {
const MenuItem = sequelize.define('MenuItem', {
name: {
type: DataTypes.STRING,
allowNull: false
},
link: {
type: DataTypes.STRING,
allowNull: false
},
component: {
type: DataTypes.STRING,
allowNull: false
},
show_in_menu: {
type: DataTypes.BOOLEAN,
allowNull: false,
defaultValue: true
},
requires_auth: {
type: DataTypes.BOOLEAN,
allowNull: false,
defaultValue: false
},
parent_id: {
type: DataTypes.INTEGER,
allowNull: true
},
order_id: {
type: DataTypes.INTEGER,
allowNull: false,
defaultValue: 0
}
}, {
tableName: 'menu_items',
timestamps: false
});
MenuItem.associate = function(models) {
MenuItem.hasMany(models.MenuItem, {
foreignKey: 'parent_id',
as: 'submenu'
});
};
return MenuItem;
};

25
models/Page.js Normal file
View File

@@ -0,0 +1,25 @@
// models/Page.js
const { DataTypes } = require('sequelize');
module.exports = (sequelize) => {
const Page = sequelize.define('Page', {
link: {
type: DataTypes.STRING,
allowNull: false,
unique: true
},
name: {
type: DataTypes.STRING,
allowNull: false
},
content: {
type: DataTypes.TEXT,
allowNull: true
}
}, {
tableName: 'pages',
timestamps: true
});
return Page;
};

24
models/Position.js Normal file
View File

@@ -0,0 +1,24 @@
const { DataTypes } = require('sequelize');
module.exports = (sequelize) => {
const Position = sequelize.define('Position', {
caption: {
type: DataTypes.STRING,
allowNull: false
}
}, {
tableName: 'positions',
timestamps: false
});
Position.associate = function(models) {
Position.belongsToMany(models.ContactPerson, {
through: models.ContactPersonPosition,
foreignKey: 'position_id',
otherKey: 'contact_person_id',
as: 'contactPersons'
});
};
return Position;
};

29
models/User.js Normal file
View File

@@ -0,0 +1,29 @@
const { DataTypes } = require('sequelize');
module.exports = (sequelize) => {
const User = sequelize.define('User', {
name: {
type: DataTypes.STRING,
allowNull: false
},
email: {
type: DataTypes.STRING,
allowNull: false,
unique: true
},
password: {
type: DataTypes.STRING,
allowNull: false
},
active: {
type: DataTypes.BOOLEAN,
defaultValue: false
}
}, {
timestamps: true,
createdAt: 'created_at',
updatedAt: false
});
return User;
};

67
models/Worship.js Normal file
View File

@@ -0,0 +1,67 @@
const { DataTypes } = require('sequelize');
module.exports = (sequelize) => {
const Worship = sequelize.define('Worship', {
eventPlaceId: {
type: DataTypes.INTEGER,
references: {
model: 'EventPlace',
key: 'id'
},
onUpdate: 'CASCADE',
onDelete: 'SET NULL'
},
date: {
type: DataTypes.DATE,
allowNull: false
},
time: {
type: DataTypes.TIME,
allowNull: false
},
title: {
type: DataTypes.STRING,
allowNull: false
},
organizer: {
type: DataTypes.STRING,
allowNull: true
},
collection: {
type: DataTypes.STRING,
allowNull: true
},
address: {
type: DataTypes.STRING,
allowNull: true
},
selfInformation: {
type: DataTypes.BOOLEAN,
defaultValue: false
},
highlightTime: {
type: DataTypes.BOOLEAN,
defaultValue: false
},
neighborInvitation: {
type: DataTypes.BOOLEAN,
defaultValue: false
},
introLine: {
type: DataTypes.STRING,
allowNull: true
}
}, {
tableName: 'worships',
timestamps: true
});
Worship.associate = function(models) {
Worship.belongsTo(models.EventPlace, {
foreignKey: 'eventPlaceId',
as: 'eventPlace'
});
};
return Worship;
};

64
models/event.js Normal file
View File

@@ -0,0 +1,64 @@
const { DataTypes } = require('sequelize');
module.exports = (sequelize) => {
const Event = sequelize.define('Event', {
uniqueId: {
type: DataTypes.STRING,
allowNull: true
},
eventTypeId: {
type: DataTypes.INTEGER,
allowNull: true
},
eventPlaceId: {
type: DataTypes.INTEGER,
allowNull: true
},
name: {
type: DataTypes.STRING,
allowNull: true
},
date: {
type: DataTypes.DATE,
allowNull: true
},
time: {
type: DataTypes.TIME,
allowNull: true
},
endTime: {
type: DataTypes.TIME,
allowNull: true
},
dayOfWeek: {
type: DataTypes.INTEGER,
allowNull: true
},
description: {
type: DataTypes.TEXT,
allowNull: true
}
}, {
tableName: 'events',
timestamps: true
});
Event.associate = function(models) {
Event.belongsTo(models.Institution, {
foreignKey: 'institution_id',
as: 'institution'
});
Event.belongsTo(models.EventPlace, {
foreignKey: 'event_place_id',
as: 'eventPlace'
});
Event.belongsToMany(models.ContactPerson, {
through: 'EventContactPerson',
foreignKey: 'event_id',
otherKey: 'contact_person_id',
as: 'contactPersons'
});
};
return Event;
};

View File

@@ -0,0 +1,29 @@
const { DataTypes } = require('sequelize');
module.exports = (sequelize) => {
const EventContactPerson = sequelize.define('EventContactPerson', {
event_id: {
type: DataTypes.INTEGER,
references: {
model: 'Event',
key: 'id'
},
onUpdate: 'CASCADE',
onDelete: 'CASCADE'
},
contact_person_id: {
type: DataTypes.INTEGER,
references: {
model: 'ContactPerson',
key: 'id'
},
onUpdate: 'CASCADE',
onDelete: 'CASCADE'
}
}, {
tableName: 'EventContactPersons',
timestamps: false
});
return EventContactPerson;
};

42
models/index.js Normal file
View File

@@ -0,0 +1,42 @@
'use strict';
const fs = require('fs');
const path = require('path');
const Sequelize = require('sequelize');
const basename = path.basename(__filename);
const env = process.env.NODE_ENV || 'development';
const config = require(__dirname + '/../config/config.json')[env];
const db = {};
let sequelize;
if (config.use_env_variable) {
sequelize = new Sequelize(process.env[config.use_env_variable], config);
} else {
sequelize = new Sequelize(config.database, config.username, config.password, config);
}
fs
.readdirSync(__dirname)
.filter(file => {
return (
file.indexOf('.') !== 0 &&
file !== basename &&
file.slice(-3) === '.js' &&
file.indexOf('.test.js') === -1
);
})
.forEach(file => {
const model = require(path.join(__dirname, file))(sequelize, Sequelize.DataTypes);
db[model.name] = model;
});
Object.keys(db).forEach(modelName => {
if (db[modelName].associate) {
db[modelName].associate(db);
}
});
db.sequelize = sequelize;
db.Sequelize = Sequelize;
module.exports = db;