frontend init

This commit is contained in:
2026-02-15 17:56:28 +01:00
parent 7afe2da63e
commit b52429c250
33 changed files with 1688 additions and 0 deletions

37
front/src/services/api.ts Normal file
View File

@@ -0,0 +1,37 @@
import { useAuthStore } from '@/stores/auth'
const BASE_URL = import.meta.env.VITE_API_URL ?? '/api'
async function request<T>(method: string, path: string, body?: unknown): Promise<T> {
const auth = useAuthStore()
const headers: Record<string, string> = {
'Content-Type': 'application/json',
}
if (auth.token) {
headers['Authorization'] = `Bearer ${auth.token}`
}
const res = await fetch(`${BASE_URL}${path}`, {
method,
headers,
body: body ? JSON.stringify(body) : undefined,
})
if (!res.ok) {
const text = await res.text()
throw new Error(text || `Request failed: ${res.status}`)
}
if (res.status === 204) return undefined as T
return res.json() as Promise<T>
}
export const api = {
get: <T>(path: string) => request<T>('GET', path),
post: <T>(path: string, body?: unknown) => request<T>('POST', path, body),
put: <T>(path: string, body?: unknown) => request<T>('PUT', path, body),
delete: <T>(path: string) => request<T>('DELETE', path),
}

View File

@@ -0,0 +1,26 @@
import type { AuthResponse, LoginCredentials, SignupCredentials, User } from '@/types'
// TODO: Wire up to real API endpoints via `api` helper
// import { api } from './api'
export const authService = {
async login(_credentials: LoginCredentials): Promise<AuthResponse> {
// TODO: return api.post<AuthResponse>('/auth/login', credentials)
throw new Error('Not implemented')
},
async signup(_credentials: SignupCredentials): Promise<AuthResponse> {
// TODO: return api.post<AuthResponse>('/auth/signup', credentials)
throw new Error('Not implemented')
},
async logout(): Promise<void> {
// TODO: return api.post<void>('/auth/logout')
throw new Error('Not implemented')
},
async getCurrentUser(): Promise<User> {
// TODO: return api.get<User>('/auth/me')
throw new Error('Not implemented')
},
}