Compare commits

...

2 Commits

Author SHA1 Message Date
Torsten Schulz (local)
085333db29 fix(deploy): update package-lock.json for consistent npm ci deployments
- Removed package-lock.json from .gitignore to ensure it is tracked.
- Added locks for backend, frontend, and repo root to maintain version consistency during deployments with npm ci.
- Updated backend with a new script for lockfile synchronization and added a description note.
2026-03-27 09:20:37 +01:00
Torsten Schulz (local)
17325a5263 fix(deploy): package-lock.json versionieren für npm ci
- Zeile **/package-lock.json aus .gitignore entfernt; Locks zu backend,
  frontend und Repo-Root hinzugefügt, damit Deploy-Skripte mit npm ci
  dieselben Versionen wie package.json installieren.
- backend: Script lockfile:sync und Hinweis in description.

Made-with: Cursor
2026-03-27 09:16:17 +01:00
7 changed files with 15339 additions and 6 deletions

2
.gitignore vendored
View File

@@ -5,7 +5,7 @@
.depbe.sh .depbe.sh
node_modules node_modules
node_modules/* node_modules/*
**/package-lock.json # package-lock.json wird versioniert (npm ci im Deploy braucht konsistente Locks zu package.json)
backend/.env backend/.env
backend/.env.local backend/.env.local
backend/images backend/images

5975
backend/package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1,7 +1,7 @@
{ {
"name": "backend", "name": "backend",
"version": "1.0.0", "version": "1.0.0",
"description": "", "description": "Nach Änderungen an dependencies: npm install ausführen und package-lock.json committen (npm ci im Deploy).",
"type": "module", "type": "module",
"main": "index.js", "main": "index.js",
"scripts": { "scripts": {
@@ -14,6 +14,7 @@
"cleanup-connections": "node cleanup-connections.js", "cleanup-connections": "node cleanup-connections.js",
"diag:town-worth": "QUIET_ENV_LOGS=1 DOTENV_CONFIG_QUIET=1 node scripts/falukant-town-product-worth-stats.mjs", "diag:town-worth": "QUIET_ENV_LOGS=1 DOTENV_CONFIG_QUIET=1 node scripts/falukant-town-product-worth-stats.mjs",
"diag:moneyflow": "QUIET_ENV_LOGS=1 DOTENV_CONFIG_QUIET=1 node scripts/falukant-moneyflow-report.mjs", "diag:moneyflow": "QUIET_ENV_LOGS=1 DOTENV_CONFIG_QUIET=1 node scripts/falukant-moneyflow-report.mjs",
"lockfile:sync": "npm install --package-lock-only",
"test": "echo \"Error: no test specified\" && exit 1" "test": "echo \"Error: no test specified\" && exit 1"
}, },
"keywords": [], "keywords": [],

6119
frontend/package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -27,6 +27,7 @@
class="menu-icon" class="menu-icon"
>&nbsp;</span> >&nbsp;</span>
<span class="mainmenuitem__label">{{ $t(`navigation.${key}`) }}</span> <span class="mainmenuitem__label">{{ $t(`navigation.${key}`) }}</span>
<span v-if="item.disabled" class="menu-lock-badge">18+</span>
<span v-if="hasTopLevelSubmenu(item)" class="mainmenuitem__caret">&#x25BE;</span> <span v-if="hasTopLevelSubmenu(item)" class="mainmenuitem__caret">&#x25BE;</span>
<!-- Untermenü Ebene 1 --> <!-- Untermenü Ebene 1 -->
@@ -48,6 +49,7 @@
class="submenu-icon" class="submenu-icon"
>&nbsp;</span> >&nbsp;</span>
<span>{{ subitem?.label || $t(`navigation.m-${key}.${subkey}`) }}</span> <span>{{ subitem?.label || $t(`navigation.m-${key}.${subkey}`) }}</span>
<span v-if="subitem.disabled" class="menu-lock-badge">18+</span>
<span <span
v-if="hasSecondLevelSubmenu(subitem, subkey)" v-if="hasSecondLevelSubmenu(subitem, subkey)"
class="subsubmenu" class="subsubmenu"
@@ -123,6 +125,7 @@
class="submenu-icon" class="submenu-icon"
>&nbsp;</span> >&nbsp;</span>
<span>{{ subsubitem?.label || $t(`navigation.m-${key}.m-${subkey}.${subsubkey}`) }}</span> <span>{{ subsubitem?.label || $t(`navigation.m-${key}.m-${subkey}.${subsubkey}`) }}</span>
<span v-if="subsubitem.disabled" class="menu-lock-badge">18+</span>
</li> </li>
</ul> </ul>
</li> </li>
@@ -463,6 +466,7 @@ export default {
event.stopPropagation(); event.stopPropagation();
if (item?.disabled) { if (item?.disabled) {
this.handleDisabledItem(item);
return; return;
} }
@@ -524,6 +528,16 @@ export default {
} }
this.handleItem(item, event); this.handleItem(item, event);
},
handleDisabledItem(item) {
const isEroticEntry = item?.path?.startsWith('/socialnetwork/erotic')
|| item?.action === 'openEroticChat';
if (isEroticEntry) {
this.$router.push('/socialnetwork/erotic/access');
this.collapseMenus();
}
} }
} }
}; };
@@ -619,14 +633,14 @@ ul {
.mainmenuitem--disabled, .mainmenuitem--disabled,
.submenu-item--disabled { .submenu-item--disabled {
opacity: 0.55; opacity: 0.72;
cursor: not-allowed; cursor: help;
} }
.mainmenuitem--disabled:hover { .mainmenuitem--disabled:hover {
transform: none; transform: none;
background-color: transparent; background-color: rgba(248, 162, 43, 0.1);
border-color: transparent; border-color: rgba(248, 162, 43, 0.15);
} }
.mainmenuitem--active { .mainmenuitem--active {
@@ -645,6 +659,18 @@ ul {
color: rgba(95, 75, 57, 0.7); color: rgba(95, 75, 57, 0.7);
} }
.menu-lock-badge {
display: inline-flex;
margin-left: 6px;
padding: 2px 6px;
border-radius: 999px;
background: rgba(164, 98, 72, 0.14);
color: var(--color-text-secondary);
font-size: 0.68rem;
font-weight: 800;
letter-spacing: 0.04em;
}
a { a {
text-decoration: none; text-decoration: none;
} }

File diff suppressed because it is too large Load Diff

1772
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff