Sprint 16: Chat-Fotos/Online/Read-Receipts, Gesundheit-Dokumente löschen, Bugfixes

- Chat: Foto-Versand (POST /api/chat/conversations/{id}/upload, media_url/media_type)
- Chat: Online-Indikator (last_seen Heartbeat, grüner Dot, 3min-Fenster)
- Chat: Read Receipts (read_at, Einzel-/Doppelhaken-Icons)
- Gesundheit: Dokument löschen (DELETE .../dokument, Datei + DB-Eintrag)
- Bug: events.user_id NOT NULL → nullable (Table-Recreation-Migration)
- Bug: scheduler INSERT user_id 0 → NULL
- Bug: Wikidata Rate-Limit: sleep 0.3s→1.0s, retries 2→4, exponentielles Backoff
- SW: by-v146, APP_VER 119
This commit is contained in:
rene 2026-04-17 22:38:33 +02:00
parent 34f29f9d0a
commit a7753c9cf5
15 changed files with 375 additions and 43 deletions

View file

@ -1612,10 +1612,22 @@ textarea.form-control {
}
.rk-search-row {
display: flex;
flex-wrap: wrap;
gap: var(--space-2);
margin-bottom: var(--space-3);
align-items: center;
}
.rk-search-row .rk-search {
min-width: 0;
flex-basis: 160px;
}
.rk-search-row .rk-view-toggle {
flex-shrink: 0;
}
@media (max-width: 480px) {
.rk-search-row .rk-search { flex: 1 1 100%; order: -1; }
.rk-search-row .rk-view-toggle { margin-left: auto; }
}
/* Import-Label als Button */
.rk-imp-btn {
cursor: pointer;
@ -4491,3 +4503,47 @@ textarea.form-control {
}
.chat-send-btn:hover { background: var(--c-primary-dark); }
.chat-send-btn:disabled { opacity: 0.5; cursor: default; }
/* Chat: Kamera-Button */
.chat-photo-btn {
width: 36px;
height: 36px;
border-radius: 50%;
background: transparent;
color: var(--c-text-secondary);
border: none;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
flex-shrink: 0;
transition: color var(--transition-fast);
}
.chat-photo-btn:hover { color: var(--c-primary); }
/* Chat: Bild in Nachrichtenblase */
.chat-bubble-img {
max-width: 100%;
max-height: 260px;
border-radius: var(--radius-md);
display: block;
cursor: pointer;
object-fit: cover;
}
/* Chat: Online-Dot */
.online-dot {
width: 8px;
height: 8px;
background: #22C55E;
border-radius: 50%;
display: inline-block;
flex-shrink: 0;
}
.chat-avatar-dot {
position: absolute;
bottom: 1px;
right: 1px;
border: 2px solid var(--c-surface);
}