chore: increment version to 0.8.46 and update changelog
All checks were successful
Deploy Development / deploy (push) Successful in 35s
Test Suite / pytest-backend (push) Successful in 28s
Test Suite / lint-backend (push) Successful in 0s
Test Suite / build-frontend (push) Successful in 7s
Test Suite / playwright-tests (push) Successful in 23s
All checks were successful
Deploy Development / deploy (push) Successful in 35s
Test Suite / pytest-backend (push) Successful in 28s
Test Suite / lint-backend (push) Successful in 0s
Test Suite / build-frontend (push) Successful in 7s
Test Suite / playwright-tests (push) Successful in 23s
- Updated APP_VERSION to 0.8.46 and MODULE_VERSIONS for exercises to 2.15.1. - Added structured logging for media upload conflicts in the backend. - Removed explanatory media hints from the ExerciseFormPage in the frontend to streamline the user interface.
This commit is contained in:
parent
da368222e0
commit
88fb60e244
|
|
@ -2186,6 +2186,20 @@ async def upload_exercise_media(
|
|||
),
|
||||
)
|
||||
elif lc in ("trash_soft", "trash_hidden"):
|
||||
logger.warning(
|
||||
"exercise_media_upload_conflict MEDIA_ASSET_IN_TRASH exercise_id=%s profile_id=%s "
|
||||
"media_asset_id=%s lifecycle_state=%s visibility=%s club_id=%s sha256_prefix=%s "
|
||||
"upload_filename=%s stored_original_filename=%s",
|
||||
exercise_id,
|
||||
profile_id,
|
||||
ea["id"],
|
||||
lc,
|
||||
ex_vis,
|
||||
ex_club,
|
||||
full_sha[:16],
|
||||
(file.filename or "")[:200],
|
||||
(ea.get("original_filename") or "")[:200],
|
||||
)
|
||||
raise HTTPException(
|
||||
status_code=409,
|
||||
detail={
|
||||
|
|
@ -2200,6 +2214,17 @@ async def upload_exercise_media(
|
|||
},
|
||||
)
|
||||
else:
|
||||
logger.warning(
|
||||
"exercise_media_upload_conflict MEDIA_ASSET_UNAVAILABLE exercise_id=%s profile_id=%s "
|
||||
"media_asset_id=%s lifecycle_state=%s visibility=%s club_id=%s sha256_prefix=%s",
|
||||
exercise_id,
|
||||
profile_id,
|
||||
ea["id"],
|
||||
lc,
|
||||
ex_vis,
|
||||
ex_club,
|
||||
full_sha[:16],
|
||||
)
|
||||
raise HTTPException(
|
||||
status_code=409,
|
||||
detail={
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Shinkan Jinkendo Version Information
|
||||
|
||||
APP_VERSION = "0.8.45"
|
||||
APP_VERSION = "0.8.46"
|
||||
BUILD_DATE = "2026-05-07"
|
||||
DB_SCHEMA_VERSION = "20260507045"
|
||||
|
||||
|
|
@ -17,7 +17,7 @@ MODULE_VERSIONS = {
|
|||
"groups": "0.1.0",
|
||||
"skills": "0.1.0",
|
||||
"methods": "0.1.0",
|
||||
"exercises": "2.15.0", # Upload: 409 MEDIA_ASSET_IN_TRASH bei Papierkorb-Dedupe (SHA + visibility + club)
|
||||
"exercises": "2.15.1", # Upload 409: strukturiertes Logging
|
||||
"training_units": "0.2.0",
|
||||
"training_programs": "0.1.0",
|
||||
"planning": "0.8.1", # Vorlagen Leseprüfung library_content_visible_to_profile
|
||||
|
|
@ -29,6 +29,14 @@ MODULE_VERSIONS = {
|
|||
}
|
||||
|
||||
CHANGELOG = [
|
||||
{
|
||||
"version": "0.8.46",
|
||||
"date": "2026-05-07",
|
||||
"changes": [
|
||||
"Übung Medien-Upload: bei 409-Konflikt (Papierkorb-Dedupe) logger.warning mit exercise_id, profile_id, media_asset_id, lifecycle, visibility, club_id, sha256_prefix, Dateinamen",
|
||||
"ExerciseFormPage: erklärende Medien-Hinweistexte in GUI entfernt (Kurzbeschreibung + Archiv-Dialog)",
|
||||
],
|
||||
},
|
||||
{
|
||||
"version": "0.8.45",
|
||||
"date": "2026-05-07",
|
||||
|
|
|
|||
|
|
@ -1390,8 +1390,7 @@ function ExerciseFormPage() {
|
|||
<div className="card" style={{ marginTop: '16px' }}>
|
||||
<h2 style={{ marginTop: 0, fontSize: '1.1rem' }}>Medien</h2>
|
||||
<p style={{ color: 'var(--text2)', fontSize: '13px' }}>
|
||||
Datei oder Embed (YouTube, Vimeo, Instagram, TikTok). Max. 10 pro Übung. Archiv-Medien mehrfach nutzbar.
|
||||
Papierkorb und Freigaben steuern Sie zentral im Archiv — hier nur Verknüpfung zur Übung.
|
||||
Datei oder Embed (YouTube, Vimeo, Instagram, TikTok). Max. 10 pro Übung.
|
||||
</p>
|
||||
<div
|
||||
style={{
|
||||
|
|
@ -1405,9 +1404,6 @@ function ExerciseFormPage() {
|
|||
<button type="button" className="btn btn-secondary" onClick={() => setArchiveOpen(true)}>
|
||||
Aus Archiv verknüpfen…
|
||||
</button>
|
||||
<span style={{ fontSize: '12px', color: 'var(--text3)' }}>
|
||||
Sichtbare, bereits gespeicherte Dateien erneut nutzen (ein Speicherplatz, mehrere Übungen).
|
||||
</span>
|
||||
</div>
|
||||
<div style={{ display: 'grid', gap: '12px', marginTop: '12px' }}>
|
||||
<div>
|
||||
|
|
@ -1529,18 +1525,6 @@ function ExerciseFormPage() {
|
|||
(m.embed_url ? m.embed_url : '') ||
|
||||
'—'}
|
||||
</div>
|
||||
{m.media_asset_id &&
|
||||
String(m.asset_lifecycle_state || 'active').toLowerCase() === 'trash_soft' && (
|
||||
<p style={{ color: 'var(--danger)', margin: '8px 0 0', fontSize: '12px' }}>
|
||||
Hinweis: Dieses Archiv-Medium ist im Papierkorb (Stufe 1).
|
||||
</p>
|
||||
)}
|
||||
{m.media_asset_id &&
|
||||
String(m.asset_lifecycle_state || 'active').toLowerCase() === 'trash_hidden' && (
|
||||
<p style={{ color: 'var(--danger)', margin: '8px 0 0', fontSize: '12px' }}>
|
||||
Hinweis: Archiv-Medium ausgeblendet (Stufe 2) — in der Übungsansicht unsichtbar.
|
||||
</p>
|
||||
)}
|
||||
<div className="form-row" style={{ marginTop: '8px', display: 'grid', gap: '8px' }}>
|
||||
<input
|
||||
type="text"
|
||||
|
|
@ -1627,9 +1611,6 @@ function ExerciseFormPage() {
|
|||
onClick={(e) => e.stopPropagation()}
|
||||
>
|
||||
<h3 style={{ marginTop: 0, fontSize: '1.05rem' }}>Medienarchiv</h3>
|
||||
<p style={{ fontSize: '13px', color: 'var(--text2)', marginTop: 0 }}>
|
||||
Nur aktive Medien, die Sie lesen dürfen (offiziell, eigenes privat, Ihre Vereine).
|
||||
</p>
|
||||
<input
|
||||
type="search"
|
||||
className="form-input"
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user