bilhej/frontend/src/stores/authStore.ts
Joakim Mörling 6ab5e2f707 refactor: remove template from order flow
Templates serve as a brand shield (showing the platform facilitates all
kinds of messaging), not as a compose-flow form control. Remove them from
the data model and compose page. Templates will live as branding elements
on the landing page in a future commit.

Backend:
- Remove template field from Order entity (getter/setter removed)
- Remove template from CreateOrderRequest DTO
- Remove template from OrderResponse DTO
- Remove template param from OrderService.createOrder()
- Remove template passthrough in OrderController
- Remove /api/templates permitAll from SecurityConfig
- Edit V5 migration: remove template column from orders table
- Edit V6 migration: remove template from seed data
- Update OrderControllerTest (remove template from assertions/requests)
- Update OrderServiceTest (remove template from createOrder calls)

Frontend:
- Remove template from Order interface in api/orders.ts
- Remove template param from createOrder() function
- Remove template display from OrdersPage.vue cards
- Rewrite ComposePage.vue: remove template selector, keep textarea + preview + submit
- Update ComposePage.spec.ts (remove template tests, add preview/GDPR tests)
- Update OrdersPage.spec.ts (remove template from mock data and display test)
- Update compose.spec.ts E2E (remove template selector interactions)
- Update order-history.spec.ts E2E (remove template names test)
- Fix unused import in Router.spec.ts
- Also includes minor Prettier formatting in AppHeader.spec.ts, AdminPage.vue, authStore.ts
2026-05-14 16:55:59 +02:00

60 lines
1.5 KiB
TypeScript

import { defineStore } from 'pinia'
import { ref, computed } from 'vue'
import { register, login } from '@/api/auth'
import { parseJwtPayload } from '@/utils/jwt'
export const useAuthStore = defineStore('auth', () => {
const token = ref<string | null>(localStorage.getItem('auth_token'))
const role = ref<string | null>(extractRole(token.value))
const isAuthenticated = computed(() => token.value !== null)
const isAdmin = computed(() => role.value === 'admin')
const email = computed(() => {
if (!token.value) return null
const payload = parseJwtPayload(token.value)
return payload.sub ?? null
})
function extractRole(jwt: string | null): string | null {
if (!jwt) return null
const payload = parseJwtPayload(jwt)
return payload.role ?? null
}
function setToken(newToken: string) {
token.value = newToken
role.value = extractRole(newToken)
localStorage.setItem('auth_token', newToken)
}
function clearToken() {
token.value = null
role.value = null
localStorage.removeItem('auth_token')
}
async function registerUser(email: string, password: string): Promise<void> {
const response = await register(email, password)
setToken(response.token)
}
async function loginUser(email: string, password: string): Promise<void> {
const response = await login(email, password)
setToken(response.token)
}
function logout() {
clearToken()
}
return {
token,
role,
email,
isAuthenticated,
isAdmin,
registerUser,
loginUser,
logout,
}
})