128 lines
6.7 KiB
JavaScript
128 lines
6.7 KiB
JavaScript
const mongoose = require('mongoose');
|
||
const User = require('./models/User');
|
||
const Admin = require('./models/Admin');
|
||
const Config = require('./models/Config');
|
||
const config = require('./config/env');
|
||
const logger = require('./utils/logger');
|
||
|
||
const users = [
|
||
{ name: 'Ahrens Frank', address: 'Alte Poststraße 15, 29303 Bergen', phone: '01724525953', landline: null, type: 'HS', gps: { lat: 52.8090, lng: 9.9640 } },
|
||
{ name: 'Becker Michael', address: 'Amselweg 17, 21255 Tostedt', phone: '01711470404', landline: null, type: 'HS', gps: { lat: 53.2808, lng: 9.7142 } },
|
||
{ name: 'Dahlem Frank', address: 'Neues Land 17, 29649 Wietzendorf', phone: '017647143321', landline: '051963849802', type: 'HS', gps: { lat: 52.9469, lng: 9.8906 } },
|
||
{ name: 'Eggers Petra', address: 'Giltener Weg 48, 27336 Frankenfeld', phone: '01724201762', landline: null, type: 'SB', gps: { lat: 52.6826, lng: 9.4467 } },
|
||
{ name: 'Fuhrwerk Gundolf', address: 'Am Oerbker Bach 2, 29683 Oerbke', phone: '01703400633', landline: '051623563', type: 'BGS', gps: { lat: 52.7461, lng: 9.6614 } },
|
||
{ name: 'Heinrich Helmut', address: 'Memeler Straße 1, 30938 Burgwedel', phone: '01725130814', landline: '05135651', type: 'HS', gps: { lat: 52.4949, lng: 9.9104 } },
|
||
{ name: 'Hilgers Timo', address: 'Brock 6a, 29683 Bad Fallingbostel-Dorfmark', phone: '015127515764', landline: null, type: 'BGS', gps: { lat: 52.8847, lng: 9.7256 } },
|
||
{ name: 'Lünebach-Hüner Andrea', address: 'Idsingen 5, 29664 Walsrode', phone: '015231601800', landline: null, type: 'LAB', gps: { lat: 52.8833, lng: 9.5880 } },
|
||
{ name: 'Neumann Axel', address: 'Papendoren 24, 21409 Embsen', phone: '01704051834', landline: null, type: 'HS', gps: { lat: 53.2237, lng: 10.3509 } },
|
||
{ name: 'Peschek Hjalmar', address: 'Gaswerkstraße 8, 27374 Visselhövede', phone: '01708561360', landline: null, type: 'BGS', gps: { lat: 52.9836, lng: 9.5819 } },
|
||
{ name: 'Seegräber Markus', address: 'Wiedenburgstraße 19, 27336 Rethem', phone: '01621340448', landline: null, type: 'BGS', gps: { lat: 52.7836, lng: 9.3775 } },
|
||
{ name: 'Sudhoff Andreas', address: 'Lotharstraße 46, 29320 Hermannsburg', phone: '01704607351', landline: null, type: 'HS', gps: { lat: 52.8220, lng: 10.1094 } },
|
||
{ name: 'Wichmann Jens-Peter', address: 'Im Dorf 8, 21256 Handeloh', phone: '01712705744', landline: '04187531', type: 'HS', gps: { lat: 53.2700, lng: 9.7833 } }
|
||
];
|
||
|
||
const seedDatabase = async () => {
|
||
try {
|
||
await mongoose.connect(config.mongoUri, {
|
||
useNewUrlParser: true,
|
||
useUnifiedTopology: true
|
||
});
|
||
|
||
logger.info('MongoDB verbunden für Seeding...');
|
||
|
||
// Seed users - only if collection is empty (idempotent)
|
||
const existingUserCount = await User.countDocuments();
|
||
if (existingUserCount === 0) {
|
||
await User.insertMany(users);
|
||
logger.info(`✅ ${users.length} Nachsuchenführer wurden erstellt`);
|
||
} else {
|
||
logger.info(`ℹ️ Benutzer bereits vorhanden (${existingUserCount}), überspringe Seeding`);
|
||
}
|
||
|
||
// Seed admins (only if not exists)
|
||
const adminAccounts = [
|
||
{ username: 'ThorstenMeyer', passwordEnvVar: 'ADMIN_THORSTEN_PASSWORD', defaultPassword: process.env.ADMIN_THORSTEN_PASSWORD || null }
|
||
];
|
||
|
||
let adminId;
|
||
for (const account of adminAccounts) {
|
||
const existing = await Admin.findOne({ username: account.username });
|
||
if (!existing) {
|
||
const pw = process.env[account.passwordEnvVar] || account.defaultPassword;
|
||
if (!pw) {
|
||
logger.warn(`⚠️ Kein Passwort für ${account.username} konfiguriert, überspringe`);
|
||
continue;
|
||
}
|
||
const created = await Admin.create({ username: account.username, password: pw });
|
||
adminId = created._id;
|
||
logger.info(`✅ Admin-Benutzer erstellt: ${account.username}`);
|
||
} else {
|
||
adminId = existing._id;
|
||
logger.info(`ℹ️ Admin-Benutzer existiert bereits: ${account.username}`);
|
||
}
|
||
}
|
||
if (!adminId) {
|
||
const fallback = await Admin.findOne();
|
||
adminId = fallback?._id;
|
||
}
|
||
|
||
// Seed config - always update userTypes + sections + rules
|
||
const existingConfig = await Config.findOne();
|
||
const configData = {
|
||
userTypes: [
|
||
{ code: 'HS', label: 'Hannoverscher Schweißhund' },
|
||
{ code: 'BGS', label: 'Bayerischer Gebirgsschweißhund' },
|
||
{ code: 'SB', label: 'Schweißhund (allgemein)' },
|
||
{ code: 'LAB', label: 'Labrador' }
|
||
],
|
||
rules: [
|
||
"Verbreiten Sie den Standort und den Anschuss.",
|
||
"Vertreten Sie keine Pirschzeichen.",
|
||
"Versuchen Sie die Nachsuche möglichst nicht erst mit ungeübten Hunden.",
|
||
"Benachrichtigen Sie unverzüglich den Nachsuchenführer und die evtl. betroffenen Revierinhaber der Nachbarjagdbezirke.",
|
||
"Der Hundeführer gibt den Fangschuss auf das gestellte Stück ab.",
|
||
"Bei der Nachsuche hat der Hundeführer die Stellung eines Jagdleiters.",
|
||
"Der anfordernde Revierinhaber muss die betroffenen Nachbarreviere verständigen.",
|
||
"Auf Empfehlung der Jägerschaften Soltau und Fallingbostel ist bei Inanspruchnahme eine pauschale Aufwandsentschädigung an den Nachsuchenführer von 50,00 € zu entrichten."
|
||
],
|
||
appName: 'Nachsuchenstation Heidekreis',
|
||
sections: [
|
||
{
|
||
key: 'ueber-uns',
|
||
title: 'Die Nachsuchenstation Heidekreis',
|
||
content: '[Inhalt folgt – wird durch den Admin ergänzt]'
|
||
},
|
||
{
|
||
key: 'anwendung',
|
||
title: 'Anwendung der App',
|
||
content: '[Erklärung für den Anwender folgt – wird durch den Admin ergänzt]'
|
||
},
|
||
{
|
||
key: 'ansprechpartner',
|
||
title: 'Ansprechpartner und Koordination',
|
||
content: 'Ansprechpartner und Koordination der Nachsuchenstation Heidekreis\n\nMarc Sonnemann\nHamwiede 5 b\n29664 Walsrode\n\nTel. 01725170049 / 051684802922\nMail: nachsuchenstation-hk@jaegerschaft-fallingbostel.de'
|
||
}
|
||
],
|
||
updatedBy: adminId
|
||
};
|
||
|
||
if (!existingConfig) {
|
||
await Config.create(configData);
|
||
logger.info('✅ Konfiguration erstellt');
|
||
} else {
|
||
await Config.findOneAndUpdate({}, configData, { new: true });
|
||
logger.info('✅ Konfiguration aktualisiert');
|
||
}
|
||
|
||
logger.info('✅ Datenbank-Seeding abgeschlossen');
|
||
await mongoose.connection.close();
|
||
process.exit(0);
|
||
} catch (error) {
|
||
logger.error('❌ Fehler beim Seeding:', error);
|
||
await mongoose.connection.close();
|
||
process.exit(1);
|
||
}
|
||
};
|
||
|
||
seedDatabase();
|