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 c9d644f309
commit 9ccc95e0d6
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;