add account preferences model and API endpoints for user settings

This commit is contained in:
j3d1 2026-08-01 02:29:57 +02:00
parent a9d5bbb9df
commit 32addb8ed1
11 changed files with 297 additions and 21 deletions

View file

@ -202,6 +202,10 @@ export default createStore({
state.user_profile = null;
state.token = null;
state.keypair = null;
state.accountPreferences = {};
state.preferenceDefinitions = [];
state.preferencesLoaded = false;
// Note: devicePreferences are NOT cleared on logout (device-specific)
localStorage.removeItem('user');
localStorage.removeItem('token');
localStorage.removeItem('keypair');
@ -226,24 +230,33 @@ export default createStore({
}
},
actions: {
async loadUserPreferences({state, commit}) {
const accountKey = 'toolshed.preferences.account.' + (state.user || 'anonymous')
async loadUserPreferences({state, commit, dispatch, getters}) {
if (state.preferencesLoaded) return
const deviceKey = 'toolshed.preferences.device'
commit('setPreferenceDefinitions', defaultPreferenceDefinitions)
commit('setAccountPreferences', parseStoredPreferences(accountKey))
commit('setDevicePreferences', parseStoredPreferences(deviceKey))
let definitions = defaultPreferenceDefinitions
let accountPreferences = {}
try {
const servers = await dispatch('getHomeServers')
definitions = await servers.get(getters.nullAuth, '/auth/preferences/') || defaultPreferenceDefinitions
accountPreferences = await servers.get(getters.signAuth, '/auth/self/preferences/') || {}
} catch (error) {
console.error('Failed to load user preferences:', error)
}
commit('setPreferenceDefinitions', definitions)
commit('setAccountPreferences', accountPreferences)
commit('setPreferencesLoaded', true)
},
async setAccountPreference({state, commit}, {key, value}) {
async setAccountPreference({state, commit, dispatch, getters}, {key, value}) {
const servers = await dispatch('getHomeServers')
await servers.put(getters.signAuth, '/auth/self/preferences/', {[key]: value})
commit('setAccountPreference', {key, value})
const accountKey = 'toolshed.preferences.account.' + (state.user || 'anonymous')
localStorage.setItem(accountKey, JSON.stringify(state.accountPreferences))
},
async resetAccountPreference({state, commit}, key) {
async resetAccountPreference({state, commit, dispatch, getters}, key) {
const servers = await dispatch('getHomeServers')
await servers.delete(getters.signAuth, '/auth/self/preferences/' + key + '/')
commit('deleteAccountPreference', key)
const accountKey = 'toolshed.preferences.account.' + (state.user || 'anonymous')
localStorage.setItem(accountKey, JSON.stringify(state.accountPreferences))
},
async setDevicePreference({state, commit}, {key, value}) {
commit('setDevicePreference', {key, value})

View file

@ -134,6 +134,8 @@ export default {
return;
}
alert('Data imported successfully: ' +
`${summary.profile ? 'profile, ' : ''}` +
`${summary.settings || 0} settings, ` +
`${summary.inventory_items || 0} inventory items, ` +
`${summary.friends || 0} friends, ` +
`${summary.locations || 0} locations, ` +