feat(backend): fixed build errors regarding token in headers

This commit is contained in:
ribardej
2025-10-15 15:21:10 +02:00
parent 3a7580c315
commit 1f5d6f127f
2 changed files with 20 additions and 9 deletions

View File

@@ -23,9 +23,21 @@ function getBaseUrl() {
return base || ''; return base || '';
} }
function authHeaders() { function getHeaders(contentType: 'json' | 'form' | 'none' = 'json'): Record<string, string> {
const token = localStorage.getItem('token'); const token = localStorage.getItem('token');
return token ? { Authorization: `Bearer ${token}` } : {}; const headers: Record<string, string> = {};
if (contentType === 'json') {
headers['Content-Type'] = 'application/json';
} else if (contentType === 'form') {
headers['Content-Type'] = 'application/x-www-form-urlencoded';
}
if (token) {
headers['Authorization'] = `Bearer ${token}`;
}
return headers;
} }
export async function login(email: string, password: string): Promise<void> { export async function login(email: string, password: string): Promise<void> {
@@ -62,7 +74,7 @@ export async function register(email: string, password: string, first_name?: str
export async function getCategories(): Promise<Category[]> { export async function getCategories(): Promise<Category[]> {
const res = await fetch(`${getBaseUrl()}/categories/`, { const res = await fetch(`${getBaseUrl()}/categories/`, {
headers: { 'Content-Type': 'application/json', ...authHeaders() }, headers: getHeaders(),
}); });
if (!res.ok) throw new Error('Failed to load categories'); if (!res.ok) throw new Error('Failed to load categories');
return res.json(); return res.json();
@@ -77,7 +89,7 @@ export type CreateTransactionInput = {
export async function createTransaction(input: CreateTransactionInput): Promise<Transaction> { export async function createTransaction(input: CreateTransactionInput): Promise<Transaction> {
const res = await fetch(`${getBaseUrl()}/transactions/create`, { const res = await fetch(`${getBaseUrl()}/transactions/create`, {
method: 'POST', method: 'POST',
headers: { 'Content-Type': 'application/json', ...authHeaders() }, headers: getHeaders(),
body: JSON.stringify(input), body: JSON.stringify(input),
}); });
if (!res.ok) { if (!res.ok) {
@@ -89,7 +101,7 @@ export async function createTransaction(input: CreateTransactionInput): Promise<
export async function getTransactions(): Promise<Transaction[]> { export async function getTransactions(): Promise<Transaction[]> {
const res = await fetch(`${getBaseUrl()}/transactions/`, { const res = await fetch(`${getBaseUrl()}/transactions/`, {
headers: { 'Content-Type': 'application/json', ...authHeaders() }, headers: getHeaders(),
}); });
if (!res.ok) throw new Error('Failed to load transactions'); if (!res.ok) throw new Error('Failed to load transactions');
return res.json(); return res.json();
@@ -107,7 +119,7 @@ export type User = {
export async function getMe(): Promise<User> { export async function getMe(): Promise<User> {
const res = await fetch(`${getBaseUrl()}/users/me`, { const res = await fetch(`${getBaseUrl()}/users/me`, {
headers: { 'Content-Type': 'application/json', ...authHeaders() }, headers: getHeaders(),
}); });
if (!res.ok) throw new Error('Failed to load user'); if (!res.ok) throw new Error('Failed to load user');
return res.json(); return res.json();
@@ -117,7 +129,7 @@ export type UpdateMeInput = Partial<Pick<User, 'first_name' | 'last_name'>> & {
export async function updateMe(input: UpdateMeInput): Promise<User> { export async function updateMe(input: UpdateMeInput): Promise<User> {
const res = await fetch(`${getBaseUrl()}/users/me`, { const res = await fetch(`${getBaseUrl()}/users/me`, {
method: 'PATCH', method: 'PATCH',
headers: { 'Content-Type': 'application/json', ...authHeaders() }, headers: getHeaders(),
body: JSON.stringify(input), body: JSON.stringify(input),
}); });
if (!res.ok) { if (!res.ok) {
@@ -130,7 +142,7 @@ export async function updateMe(input: UpdateMeInput): Promise<User> {
export async function deleteMe(): Promise<void> { export async function deleteMe(): Promise<void> {
const res = await fetch(`${getBaseUrl()}/users/me`, { const res = await fetch(`${getBaseUrl()}/users/me`, {
method: 'DELETE', method: 'DELETE',
headers: { ...authHeaders() }, headers: getHeaders(),
}); });
if (!res.ok) { if (!res.ok) {
const text = await res.text(); const text = await res.text();

View File

@@ -5,7 +5,6 @@ const THEME_KEY = 'app_theme';
const FONT_KEY = 'app_font_size'; const FONT_KEY = 'app_font_size';
export function applyTheme(theme: Theme) { export function applyTheme(theme: Theme) {
const root = document.documentElement;
const body = document.body; const body = document.body;
const effective = theme === 'system' ? (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme; const effective = theme === 'system' ? (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme;
body.setAttribute('data-theme', effective); body.setAttribute('data-theme', effective);