Added movability of dialogs

This commit is contained in:
Torsten Schulz
2024-08-19 12:34:08 +02:00
parent 4b6ad3aefe
commit 16a59daf39
40 changed files with 1625 additions and 204 deletions

View File

@@ -1,6 +1,10 @@
import UserParamType from '../models/type/user_param.js';
import SettingsType from '../models/type/settings.js';
import UserParamValue from '../models/type/user_param_value.js';
import Interest from '../models/type/interest.js';
import { Op, } from 'sequelize';
import InterestTranslation from '../models/type/interest_translation.js';
import { sequelize } from '../utils/sequelize.js';
const initializeTypes = async () => {
const settingsTypes = await SettingsType.findAll();
@@ -10,7 +14,7 @@ const initializeTypes = async () => {
}, {});
const getSettingsTypeId = (name) => settingsTypeMap[name];
const getUserParamTypeId = async(name) => {
const getUserParamTypeId = async (name) => {
const userParamType = await UserParamType.findOne({
where: {
description: name
@@ -19,26 +23,26 @@ const initializeTypes = async () => {
return userParamType.id;
};
const userParams = {
language: {type: 'singleselect', setting: 'personal'},
birthdate: { type: 'date', setting: 'personal' },
zip: { type: 'string', setting: 'personal' },
town: { type: 'string', setting: 'personal' },
bodyheight: { type: 'float', setting: 'view' },
weight: { type: 'float', setting: 'view' },
eyecolor: { type: 'singleselect', setting: 'view' },
haircolor: { type: 'singleselect', setting: 'view' },
hairlength: { type: 'singleselect', setting: 'view' },
skincolor: { type: 'singleselect', setting: 'view' },
freckles: { type: 'singleselect', setting: 'view' },
piercings: { type: 'bool', setting: 'view' },
tattoos: { type: 'bool', setting: 'view' },
sexualpreference: { type: 'singleselect', 'setting': 'sexuality', minAge: 14 },
gender: { type: 'singleselect', setting: 'personal' },
pubichair: { type: 'singleselect', setting: 'sexuality', minAge: 14 },
penislenght: { type: 'int', setting: 'sexuality', minAge: 14, gender: 'male' },
language: { type: 'singleselect', setting: 'personal' },
birthdate: { type: 'date', setting: 'personal' },
zip: { type: 'string', setting: 'personal' },
town: { type: 'string', setting: 'personal' },
bodyheight: { type: 'float', setting: 'view' },
weight: { type: 'float', setting: 'view' },
eyecolor: { type: 'singleselect', setting: 'view' },
haircolor: { type: 'singleselect', setting: 'view' },
hairlength: { type: 'singleselect', setting: 'view' },
skincolor: { type: 'singleselect', setting: 'view' },
freckles: { type: 'singleselect', setting: 'view' },
piercings: { type: 'bool', setting: 'view' },
tattoos: { type: 'bool', setting: 'view' },
sexualpreference: { type: 'singleselect', 'setting': 'sexuality', minAge: 14 },
gender: { type: 'singleselect', setting: 'personal' },
pubichair: { type: 'singleselect', setting: 'sexuality', minAge: 14 },
penislenght: { type: 'int', setting: 'sexuality', minAge: 14, gender: 'male' },
brasize: { type: 'string', setting: 'sexuality', minAge: 14, gender: 'female' }
};
Object.keys(userParams).forEach(async(key) => {
Object.keys(userParams).forEach(async (key) => {
const item = userParams[key];
const createItem = { description: key, datatype: item.type, settingsId: getSettingsTypeId(item.setting) };
if (item.minAge) createItem.minAge = item.minAge;
@@ -59,12 +63,12 @@ const initializeTypes = async () => {
sexualpreference: ['straight', 'gay', 'bi', 'pan', 'asexual'],
pubichair: ['none', 'short', 'medium', 'long', 'hairy', 'waxed', 'landingstrip', 'bikinizone', 'other'],
};
Object.keys(valuesList).forEach(async(key) => {
Object.keys(valuesList).forEach(async (key) => {
const values = valuesList[key];
const userParamTypeId = await getUserParamTypeId(key);
values.forEach(async(value) => {
values.forEach(async (value) => {
await UserParamValue.findOrCreate({
where: {
where: {
userParamTypeId: userParamTypeId,
value: value
},
@@ -72,6 +76,91 @@ const initializeTypes = async () => {
})
});
});
}
const interestsList = {
music: { adult: false, translation: { value: 'Musik', language: 'de' } },
piano: { adult: false, translation: { value: 'Klavier', language: 'de' } },
art: { adult: false, translation: { value: 'Kunst', language: 'de' } },
photography: { adult: false, translation: { value: 'Fotografie', language: 'de' } },
gaming: { adult: false, translation: { value: 'Spielen', language: 'de' } },
sports: { adult: false, translation: { value: 'Sport', language: 'de' } },
tabletennis: { adult: false, translation: { value: 'Tischtennis', language: 'de' } },
soccer: { adult: false, translation: { value: 'Fußball', language: 'de' } },
tennis: { adult: false, translation: { value: 'Tennis', language: 'de' } },
swimming: { adult: false, translation: { value: 'Schwimmen', language: 'de' } },
hiking: { adult: false, translation: { value: 'Wandern', language: 'de' } },
cooking: { adult: false, translation: { value: 'Kochen', language: 'de' } },
travel: { adult: false, translation: { value: 'Reisen', language: 'de' } },
movies: { adult: false, translation: { value: 'Filme', language: 'de' } },
books: { adult: false, translation: { value: 'Bücher', language: 'de' } },
reading: { adult: false, translation: { value: 'Lesen', language: 'de' } },
pets: { adult: false, translation: { value: 'Haustiere', language: 'de' } },
dogs: { adult: false, translation: { value: 'Hunde', language: 'de' } },
cats: { adult: false, translation: { value: 'Katzen', language: 'de' } },
plants: { adult: false, translation: { value: 'Pflanzen', language: 'de' } },
gardening: { adult: false, translation: { value: 'Gartenarbeit', language: 'de' } },
yoga: { adult: false, translation: { value: 'Yoga', language: 'de' } },
meditation: { adult: false, translation: { value: 'Meditation', language: 'de' } },
spirituality: { adult: false, translation: { value: 'Spiritualität', language: 'de' } },
religion: { adult: false, translation: { value: 'Religion', language: 'de' } },
politics: { adult: false, translation: { value: 'Politik', language: 'de' } },
history: { adult: false, translation: { value: 'Geschichte', language: 'de' } },
science: { adult: false, translation: { value: 'Wissenschaft', language: 'de' } },
technology: { adult: false, translation: { value: 'Technologie', language: 'de' } },
fashion: { adult: false, translation: { value: 'Mode', language: 'de' } },
beauty: { adult: false, translation: { value: 'Schönheit', language: 'de' } },
fitness: { adult: false, translation: { value: 'Fitness', language: 'de' } },
health: { adult: false, translation: { value: 'Gesundheit', language: 'de' } },
nutrition: { adult: false, translation: { value: 'Ernährung', language: 'de' } },
wellness: { adult: false, translation: { value: 'Wellness', language: 'de' } },
finance: { adult: false, translation: { value: 'Finanzen', language: 'de' } },
business: { adult: false, translation: { value: 'Geschäft', language: 'de' } },
entrepreneurship: { adult: false, translation: { value: 'Unternehmertum', language: 'de' } },
education: { adult: false, translation: { value: 'Bildung', language: 'de' } },
learning: { adult: false, translation: { value: 'Lernen', language: 'de' } },
language: { adult: false, translation: { value: 'Sprache', language: 'de' } },
culture: { adult: false, translation: { value: 'Kultur', language: 'de' } },
family: { adult: false, translation: { value: 'Familie', language: 'de' } },
friends: { adult: false, translation: { value: 'Freunde', language: 'de' } },
social: { adult: false, translation: { value: 'Soziales', language: 'de' } },
nightlife: { adult: false, translation: { value: 'Nachtleben', language: 'de' } },
partying: { adult: false, translation: { value: 'Feiern', language: 'de' } },
comedy: { adult: false, translation: { value: 'Komödie', language: 'de' } },
humor: { adult: false, translation: { value: 'Humor', language: 'de' } },
sex: { adult: true, translation: { value: 'Sex', language: 'de' } },
romance: { adult: false, translation: { value: 'Romantik', language: 'de' } },
dating: { adult: true, translation: { value: 'Dating', language: 'de' } },
relationships: { adult: false, translation: { value: 'Beziehungen', language: 'de' } },
adventure: { adult: true, translation: { value: 'Abenteuer', language: 'de' } },
escapade: { adult: true, translation: { value: 'Eskapade', language: 'de' } },
sexuality: { adult: true, translation: { value: 'Sexualität', language: 'de' } }
};
const languages = await UserParamValue.findAll({where: { value: {[Op.in]: ['de', 'en']} } });
const languageId = (language) => {
const lang = languages.find((lang) => lang.value === language);
return lang ? lang.id : null;
};
for (const key of Object.keys(interestsList)) {
try {
const value = interestsList[key];
const [item, created] = await Interest.findOrCreate({
where: { name: key },
defaults: { name: key, allowed: true, adultOnly: value.adult },
});
if (created) {
const langId = languageId('de');
console.log(item.id, langId, value.translation.value);
await InterestTranslation.create({
interestsId: item.id,
language: langId,
translation: value.translation.value
});
}
} catch (error) {
throw error;
}
}
};
export default initializeTypes;

View File

@@ -23,8 +23,8 @@ const initializeUserRights = async() => {
defaults: { title: "rights"}
});
await UserRightType.findOrCreate({
where: { title: "interrests"},
defaults: { title: "interrests"}
where: { title: "interests"},
defaults: { title: "interests"}
});
await UserRightType.findOrCreate({
where: { title: "falukant"},

View File

@@ -8,13 +8,14 @@ const sequelize = new Sequelize(process.env.DB_NAME, process.env.DB_USER, proces
dialect: 'postgres',
define: {
timestamps: false
}
},
});
const createSchemas = async () => {
await sequelize.query('CREATE SCHEMA IF NOT EXISTS community');
await sequelize.query('CREATE SCHEMA IF NOT EXISTS logs');
await sequelize.query('CREATE SCHEMA IF NOT EXISTS type');
await sequelize.query('CREATE SCHEMA IF NOT EXISTS service');
};
const initializeDatabase = async () => {
@@ -24,21 +25,10 @@ const initializeDatabase = async () => {
};
const syncModels = async (models) => {
// Stellen Sie sicher, dass alle Modelle vorhanden sind
if (!models.SettingsType || !models.UserParamValue || !models.UserParamType || !models.UserRightType ||
!models.User || !models.UserParam || !models.Login || !models.UserRight) {
throw new Error('Models are not properly loaded.');
// Nur einmaliges sync ohne alter/force
for (const model of Object.values(models)) {
await model.sync();
}
// Synchronisieren Sie die Modelle in der gewünschten Reihenfolge
await models.SettingsType.sync({ alter: true });
await models.UserParamValue.sync({ alter: true });
await models.UserParamType.sync({ alter: true });
await models.UserRightType.sync({ alter: true });
await models.User.sync({ alter: true });
await models.UserParam.sync({ alter: true });
await models.Login.sync({ alter: true });
await models.UserRight.sync({ alter: true });
};
export { sequelize, initializeDatabase };

View File

@@ -8,13 +8,11 @@ import models from '../models/index.js';
const syncDatabase = async () => {
try {
await initializeDatabase();
for (const model of Object.values(models)) {
await model.sync({ alter: true });
}
setupAssociations();
for (const model of Object.values(models)) {
await model.sync({ alter: true });
await model.sync();
}
await initializeSettings();
await initializeTypes();
await initializeUserRights();