mirror of
https://github.com/serialexperiments0815/Dilomarkt---Digitaler-Lokalmarkt.git
synced 2026-07-12 15:32:19 +00:00
93 lines
3.8 KiB
JavaScript
93 lines
3.8 KiB
JavaScript
const BASE = 'http://localhost:8000/api'
|
|
|
|
// ── Seller API (requires Bearer token) ───────────────────────────────────────
|
|
function sellerHeaders() {
|
|
return {
|
|
'Content-Type': 'application/json',
|
|
'Accept': 'application/json',
|
|
'Authorization': `Bearer ${localStorage.getItem('dilomarkt_token') || ''}`,
|
|
}
|
|
}
|
|
|
|
async function sellerFetch(url, method = 'GET', payload = null) {
|
|
const opts = { method, headers: sellerHeaders() }
|
|
if (payload) opts.body = JSON.stringify(payload)
|
|
const res = await fetch(url, opts)
|
|
let data
|
|
try { data = await res.json() } catch { data = {} }
|
|
if (!res.ok) throw new Error(data.message || 'Fehler')
|
|
return data
|
|
}
|
|
|
|
export const getSellerShop = () => sellerFetch(`${BASE}/seller/shop`)
|
|
export const saveSellerShop = (p) => sellerFetch(`${BASE}/seller/shop`, 'POST', p)
|
|
export const addSellerProduct = (p) => sellerFetch(`${BASE}/seller/products`, 'POST', p)
|
|
export const updateSellerProduct = (id, p) => sellerFetch(`${BASE}/seller/products/${id}`, 'PUT', p)
|
|
export const deleteSellerProduct = (id) => sellerFetch(`${BASE}/seller/products/${id}`, 'DELETE')
|
|
export const getSellerMessages = () => sellerFetch(`${BASE}/seller/messages`)
|
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
|
|
export async function fetchProducts(params = {}) {
|
|
const q = new URLSearchParams(params).toString()
|
|
const res = await fetch(`${BASE}/products?${q}`)
|
|
if (!res.ok) throw new Error('Fehler beim Laden der Produkte')
|
|
return res.json()
|
|
}
|
|
|
|
export async function fetchProduct(id) {
|
|
const res = await fetch(`${BASE}/products/${id}`)
|
|
if (!res.ok) throw new Error('Produkt nicht gefunden')
|
|
return res.json()
|
|
}
|
|
|
|
export async function fetchProviders() {
|
|
const res = await fetch(`${BASE}/providers`)
|
|
if (!res.ok) throw new Error('Fehler beim Laden der Anbieter')
|
|
return res.json()
|
|
}
|
|
|
|
export async function fetchProvider(id) {
|
|
const res = await fetch(`${BASE}/providers/${id}`)
|
|
if (!res.ok) throw new Error('Anbieter nicht gefunden')
|
|
return res.json()
|
|
}
|
|
|
|
export async function fetchMessages(productId, buyerId) {
|
|
const res = await fetch(`${BASE}/messages?product_id=${productId}&buyer_id=${buyerId}`)
|
|
if (!res.ok) throw new Error('Fehler beim Laden der Nachrichten')
|
|
return res.json()
|
|
}
|
|
|
|
export async function sendMessage(payload) {
|
|
const res = await fetch(`${BASE}/messages`, {
|
|
method: 'POST',
|
|
headers: { 'Content-Type': 'application/json' },
|
|
body: JSON.stringify(payload)
|
|
})
|
|
if (!res.ok) throw new Error('Nachricht konnte nicht gesendet werden')
|
|
return res.json()
|
|
}
|
|
|
|
const AUTH_HEADERS = { 'Content-Type': 'application/json', 'Accept': 'application/json' }
|
|
|
|
async function authFetch(url, payload) {
|
|
const res = await fetch(url, { method: 'POST', headers: AUTH_HEADERS, body: JSON.stringify(payload) })
|
|
let data
|
|
try { data = await res.json() } catch { data = {} }
|
|
if (!res.ok) throw new Error(data.message || 'Ein Fehler ist aufgetreten')
|
|
return data
|
|
}
|
|
|
|
export async function fetchMyConversations(role = 'buyer') {
|
|
const res = await fetch(`${BASE}/my-conversations?role=${role}`, {
|
|
headers: { Authorization: `Bearer ${localStorage.getItem('dilomarkt_token')}` }
|
|
})
|
|
if (!res.ok) throw new Error('Fehler beim Laden der Chats')
|
|
return res.json()
|
|
}
|
|
|
|
export const registerUser = (p) => authFetch(`${BASE}/auth/register`, p)
|
|
export const verifyUser = (p) => authFetch(`${BASE}/auth/verify`, p)
|
|
export const loginUser = (p) => authFetch(`${BASE}/auth/login`, p)
|
|
export const forgotPassword = (p) => authFetch(`${BASE}/auth/forgot-password`, p)
|
|
export const resetPassword = (p) => authFetch(`${BASE}/auth/reset-password`, p)
|