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"):
|
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(
|
raise HTTPException(
|
||||||
status_code=409,
|
status_code=409,
|
||||||
detail={
|
detail={
|
||||||
|
|
@ -2200,6 +2214,17 @@ async def upload_exercise_media(
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
else:
|
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(
|
raise HTTPException(
|
||||||
status_code=409,
|
status_code=409,
|
||||||
detail={
|
detail={
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
# Shinkan Jinkendo Version Information
|
# Shinkan Jinkendo Version Information
|
||||||
|
|
||||||
APP_VERSION = "0.8.45"
|
APP_VERSION = "0.8.46"
|
||||||
BUILD_DATE = "2026-05-07"
|
BUILD_DATE = "2026-05-07"
|
||||||
DB_SCHEMA_VERSION = "20260507045"
|
DB_SCHEMA_VERSION = "20260507045"
|
||||||
|
|
||||||
|
|
@ -17,7 +17,7 @@ MODULE_VERSIONS = {
|
||||||
"groups": "0.1.0",
|
"groups": "0.1.0",
|
||||||
"skills": "0.1.0",
|
"skills": "0.1.0",
|
||||||
"methods": "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_units": "0.2.0",
|
||||||
"training_programs": "0.1.0",
|
"training_programs": "0.1.0",
|
||||||
"planning": "0.8.1", # Vorlagen Leseprüfung library_content_visible_to_profile
|
"planning": "0.8.1", # Vorlagen Leseprüfung library_content_visible_to_profile
|
||||||
|
|
@ -29,6 +29,14 @@ MODULE_VERSIONS = {
|
||||||
}
|
}
|
||||||
|
|
||||||
CHANGELOG = [
|
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",
|
"version": "0.8.45",
|
||||||
"date": "2026-05-07",
|
"date": "2026-05-07",
|
||||||
|
|
|
||||||
|
|
@ -1390,8 +1390,7 @@ function ExerciseFormPage() {
|
||||||
<div className="card" style={{ marginTop: '16px' }}>
|
<div className="card" style={{ marginTop: '16px' }}>
|
||||||
<h2 style={{ marginTop: 0, fontSize: '1.1rem' }}>Medien</h2>
|
<h2 style={{ marginTop: 0, fontSize: '1.1rem' }}>Medien</h2>
|
||||||
<p style={{ color: 'var(--text2)', fontSize: '13px' }}>
|
<p style={{ color: 'var(--text2)', fontSize: '13px' }}>
|
||||||
Datei oder Embed (YouTube, Vimeo, Instagram, TikTok). Max. 10 pro Übung. Archiv-Medien mehrfach nutzbar.
|
Datei oder Embed (YouTube, Vimeo, Instagram, TikTok). Max. 10 pro Übung.
|
||||||
Papierkorb und Freigaben steuern Sie zentral im Archiv — hier nur Verknüpfung zur Übung.
|
|
||||||
</p>
|
</p>
|
||||||
<div
|
<div
|
||||||
style={{
|
style={{
|
||||||
|
|
@ -1405,9 +1404,6 @@ function ExerciseFormPage() {
|
||||||
<button type="button" className="btn btn-secondary" onClick={() => setArchiveOpen(true)}>
|
<button type="button" className="btn btn-secondary" onClick={() => setArchiveOpen(true)}>
|
||||||
Aus Archiv verknüpfen…
|
Aus Archiv verknüpfen…
|
||||||
</button>
|
</button>
|
||||||
<span style={{ fontSize: '12px', color: 'var(--text3)' }}>
|
|
||||||
Sichtbare, bereits gespeicherte Dateien erneut nutzen (ein Speicherplatz, mehrere Übungen).
|
|
||||||
</span>
|
|
||||||
</div>
|
</div>
|
||||||
<div style={{ display: 'grid', gap: '12px', marginTop: '12px' }}>
|
<div style={{ display: 'grid', gap: '12px', marginTop: '12px' }}>
|
||||||
<div>
|
<div>
|
||||||
|
|
@ -1529,18 +1525,6 @@ function ExerciseFormPage() {
|
||||||
(m.embed_url ? m.embed_url : '') ||
|
(m.embed_url ? m.embed_url : '') ||
|
||||||
'—'}
|
'—'}
|
||||||
</div>
|
</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' }}>
|
<div className="form-row" style={{ marginTop: '8px', display: 'grid', gap: '8px' }}>
|
||||||
<input
|
<input
|
||||||
type="text"
|
type="text"
|
||||||
|
|
@ -1627,9 +1611,6 @@ function ExerciseFormPage() {
|
||||||
onClick={(e) => e.stopPropagation()}
|
onClick={(e) => e.stopPropagation()}
|
||||||
>
|
>
|
||||||
<h3 style={{ marginTop: 0, fontSize: '1.05rem' }}>Medienarchiv</h3>
|
<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
|
<input
|
||||||
type="search"
|
type="search"
|
||||||
className="form-input"
|
className="form-input"
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user