Add marriage management features: Implement endpoints for spending time with, gifting to, and reconciling with spouses in the FalukantController. Update UserHouse model to include household tension attributes. Enhance frontend components to manage marriage actions and display household tension details, including localization updates in multiple languages.

This commit is contained in:
Torsten Schulz (local)
2026-03-23 09:34:56 +01:00
parent 2055c11fd9
commit f7e0d97174
23 changed files with 1997 additions and 52 deletions

View File

@@ -6,12 +6,44 @@ import apiClient from '../utils/axios.js';
import { io } from 'socket.io-client';
import { getDaemonSocketUrl, getSocketIoUrl } from '../utils/appConfig.js';
const AUTH_KEYS = ['isLoggedIn', 'user', 'userid'];
function getStoredValue(key) {
return localStorage.getItem(key) ?? sessionStorage.getItem(key);
}
function getStoredUser() {
const storedUser = getStoredValue('user');
if (!storedUser) return null;
try {
return JSON.parse(storedUser);
} catch (_) {
return null;
}
}
function clearAuthStorage() {
AUTH_KEYS.forEach((key) => {
localStorage.removeItem(key);
sessionStorage.removeItem(key);
});
}
function persistAuthStorage(user, rememberMe) {
const targetStorage = rememberMe ? localStorage : sessionStorage;
clearAuthStorage();
targetStorage.setItem('isLoggedIn', 'true');
targetStorage.setItem('user', JSON.stringify(user));
targetStorage.setItem('userid', user?.id || '');
}
const store = createStore({
state: {
isLoggedIn: localStorage.getItem('isLoggedIn') === 'true',
isLoggedIn: getStoredValue('isLoggedIn') === 'true',
connectionStatus: 'disconnected', // 'connected', 'connecting', 'disconnected', 'error'
daemonConnectionStatus: 'disconnected', // 'connected', 'connecting', 'disconnected', 'error'
user: JSON.parse(localStorage.getItem('user')) || null,
user: getStoredUser(),
// Reconnect state management
backendRetryCount: 0,
daemonRetryCount: 0,
@@ -52,11 +84,12 @@ const store = createStore({
menuNeedsUpdate: false,
},
mutations: {
async dologin(state, user) {
async dologin(state, payload) {
const loginPayload = payload?.user ? payload : { user: payload, rememberMe: true };
const { user, rememberMe = true } = loginPayload;
state.isLoggedIn = true;
state.user = user;
localStorage.setItem('isLoggedIn', 'true');
localStorage.setItem('user', JSON.stringify(user));
persistAuthStorage(user, rememberMe);
state.menuNeedsUpdate = true;
if (user.param.filter(param => ['birthdate', 'gender'].includes(param.name)).length < 2) {
router.push({ path: '/settings/personal' });
@@ -65,8 +98,7 @@ const store = createStore({
async dologout(state) {
state.isLoggedIn = false;
state.user = null;
localStorage.removeItem('isLoggedIn');
localStorage.removeItem('user');
clearAuthStorage();
localStorage.removeItem('menu');
state.menuNeedsUpdate = false;
@@ -145,8 +177,8 @@ const store = createStore({
},
},
actions: {
async login({ commit, dispatch }, user) {
await commit('dologin', user);
async login({ commit, dispatch }, payload) {
await commit('dologin', payload);
await dispatch('initializeSocket');
await dispatch('initializeDaemonSocket');
const socket = this.getters.socket;