hss-pos / frontend /src /lib /stores /auth.js
sashank1989
Initial commit: HSS POS restaurant management system
c2b0409
Raw
History Blame Contribute Delete
2.01 kB
import { writable, derived } from 'svelte/store';
import { auth as authApi } from '$api/client.js';
function createAuthStore() {
const storedUser = typeof localStorage !== 'undefined' ? localStorage.getItem('pos_user') : null;
const storedToken = typeof localStorage !== 'undefined' ? localStorage.getItem('pos_token') : null;
const { subscribe, set, update } = writable({
user: storedUser ? JSON.parse(storedUser) : null,
token: storedToken || null,
loading: false,
error: null
});
return {
subscribe,
async login(username, password) {
update((s) => ({ ...s, loading: true, error: null }));
try {
const res = await authApi.login(username, password);
const { token, user } = res.data;
localStorage.setItem('pos_token', token);
localStorage.setItem('pos_user', JSON.stringify(user));
set({ user, token, loading: false, error: null });
return true;
} catch (err) {
update((s) => ({ ...s, loading: false, error: err.message }));
return false;
}
},
async pinLogin(pin) {
update((s) => ({ ...s, loading: true, error: null }));
try {
const res = await authApi.pinLogin(pin);
const { token, user } = res.data;
localStorage.setItem('pos_token', token);
localStorage.setItem('pos_user', JSON.stringify(user));
set({ user, token, loading: false, error: null });
return true;
} catch (err) {
update((s) => ({ ...s, loading: false, error: err.message }));
return false;
}
},
logout() {
localStorage.removeItem('pos_token');
localStorage.removeItem('pos_user');
set({ user: null, token: null, loading: false, error: null });
},
clearError() {
update((s) => ({ ...s, error: null }));
}
};
}
export const authStore = createAuthStore();
export const currentUser = derived(authStore, ($auth) => $auth.user);
export const isAuthenticated = derived(authStore, ($auth) => !!$auth.token);
export const userRole = derived(authStore, ($auth) => $auth.user?.role?.name?.toLowerCase() || '');