Sprint 8: Events + Hundesitting
Events: - Backend events.py: CRUD, Typen (ausstellung/training/treffen/markt/wettkampf/sonstiges) Haversine-Filter, Monats-Gruppierung in der Liste - Frontend events.js: Liste/Karte-Toggle, Typ-Filter-Chips, farbige Marker, Detail-Modal, Erstellen/Bearbeiten-Formular mit GPS-Button Hundesitting: - Backend sitting.py: Sitter-Profile (create/update/me), Anfragen (send/accept/decline/cancel), Inbox für Sitter, Haversine-Sortierung, Service-Filter - Frontend sitting.js: 3 Tabs (Suchen/Profil/Anfragen), Sitter-Karten mit Distanz, Detail-Modal + Anfrage-Formular, Profil-Verwaltung DB: events, sitters, sitting_requests Tabellen hinzugefügt SW-Cache: by-v21 → by-v22
This commit is contained in:
parent
ec17dfb029
commit
5f8fd3bd51
9 changed files with 1680 additions and 2 deletions
|
|
@ -207,6 +207,39 @@ const API = (() => {
|
|||
leave(id) { return del(`/walks/${id}/join`); },
|
||||
};
|
||||
|
||||
// ----------------------------------------------------------
|
||||
// EVENTS
|
||||
// ----------------------------------------------------------
|
||||
const events = {
|
||||
list(params = {}) {
|
||||
const q = new URLSearchParams(params).toString();
|
||||
return get(`/events${q ? '?' + q : ''}`);
|
||||
},
|
||||
get(id) { return get(`/events/${id}`); },
|
||||
create(data) { return post('/events', data); },
|
||||
update(id, data) { return patch(`/events/${id}`, data); },
|
||||
delete(id) { return del(`/events/${id}`); },
|
||||
};
|
||||
|
||||
// ----------------------------------------------------------
|
||||
// SITTING
|
||||
// ----------------------------------------------------------
|
||||
const sitting = {
|
||||
list(lat = null, lon = null, radius = 30000, service = null) {
|
||||
const p = new URLSearchParams({ radius });
|
||||
if (lat !== null) { p.set('lat', lat); p.set('lon', lon); }
|
||||
if (service) { p.set('service', service); }
|
||||
return get(`/sitting?${p}`);
|
||||
},
|
||||
me() { return get('/sitting/me'); },
|
||||
create(data) { return post('/sitting', data); },
|
||||
updateMe(data) { return patch('/sitting/me', data); },
|
||||
requests() { return get('/sitting/requests'); },
|
||||
inbox() { return get('/sitting/inbox'); },
|
||||
sendRequest(data){ return post('/sitting/requests', data); },
|
||||
updateRequest(id, status) { return patch(`/sitting/requests/${id}`, { status }); },
|
||||
};
|
||||
|
||||
// ----------------------------------------------------------
|
||||
// WETTER
|
||||
// ----------------------------------------------------------
|
||||
|
|
@ -284,7 +317,7 @@ const API = (() => {
|
|||
return {
|
||||
get, post, put, patch, del, upload,
|
||||
auth, dogs, diary, health, tieraerzte, poison,
|
||||
places, routes, walks, weather, push,
|
||||
places, routes, walks, events, sitting, weather, push,
|
||||
subscribeToPush, getLocation,
|
||||
APIError,
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue