import { createRouter, createWebHistory } from "vue-router"; import { useSessionStore } from "../stores/session"; const router = createRouter({ history: createWebHistory(), routes: [ { path: "/", name: "board", component: () => import("../views/BoardView.vue"), meta: { requiresAuth: true }, }, { path: "/archive", name: "archive", component: () => import("../views/BoardView.vue"), meta: { requiresAuth: true }, }, { path: "/trash", name: "trash", component: () => import("../views/BoardView.vue"), meta: { requiresAuth: true }, }, { path: "/login", name: "login", component: () => import("../views/LoginView.vue"), meta: { guestOnly: true }, }, { path: "/register", name: "register", component: () => import("../views/RegisterView.vue"), meta: { guestOnly: true }, }, ], }); router.beforeEach(async (to) => { const session = useSessionStore(); // Resolve the current user once, lazily, before the first guarded navigation. if (!session.loaded) { await session.fetchMe(); } if (to.meta.requiresAuth && !session.user) { return { name: "login", query: to.fullPath !== "/" ? { redirect: to.fullPath } : undefined }; } if (to.meta.guestOnly && session.user) { return { name: "board" }; } return true; }); export default router;