update
This commit is contained in:
@@ -46,8 +46,9 @@ async def get_topics():
|
|||||||
return db_topics + sorted(derived - set(db_topics))
|
return db_topics + sorted(derived - set(db_topics))
|
||||||
|
|
||||||
|
|
||||||
# Lernschulden-Regel: höchstens 5 erstellte, aber nicht absolvierte Guides.
|
# Lernschulden-Regel: JE Format (MiniGuide/Guide/FullGuide) höchstens 5 erstellte,
|
||||||
# Darüber sind nur Neu-Generierungen bereits erstellter Guides erlaubt.
|
# aber nicht absolvierte Guides. Darüber sind nur Neu-Generierungen bereits
|
||||||
|
# erstellter Guides erlaubt. Themen, Bausteine und OnePager sind unbegrenzt.
|
||||||
MAX_OFFENE_GUIDES = 5
|
MAX_OFFENE_GUIDES = 5
|
||||||
|
|
||||||
|
|
||||||
@@ -168,12 +169,12 @@ async def create(req: GuideCreateRequest):
|
|||||||
for g in await list_guides():
|
for g in await list_guides():
|
||||||
if g["topic"] == req.topic.strip() and g["format"] == req.format and g["status"] in ("queued", "generating"):
|
if g["topic"] == req.topic.strip() and g["format"] == req.format and g["status"] in ("queued", "generating"):
|
||||||
raise HTTPException(409, "Generierung läuft bereits")
|
raise HTTPException(409, "Generierung läuft bereits")
|
||||||
# Lernschulden-Regel: neue Guides nur, wenn weniger als 5 offene (erstellt, nicht absolviert)
|
# Lernschulden-Regel: neue Guides nur, wenn das Format weniger als 5 offene hat (erstellt, nicht absolviert)
|
||||||
if req.format != "OnePager" and not guide_content_path(req.topic.strip(), req.format).exists():
|
if req.format != "OnePager" and not guide_content_path(req.topic.strip(), req.format).exists():
|
||||||
formate = await _formate_stats()
|
stat = (await _formate_stats()).get(req.format, {"erstellt": 0, "absolviert": 0})
|
||||||
offen = sum(v["erstellt"] - v["absolviert"] for v in formate.values())
|
offen = stat["erstellt"] - stat["absolviert"]
|
||||||
if offen >= MAX_OFFENE_GUIDES:
|
if offen >= MAX_OFFENE_GUIDES:
|
||||||
raise HTTPException(409, f"Erst Guides absolvieren — maximal {MAX_OFFENE_GUIDES} offene erlaubt ({offen} offen)")
|
raise HTTPException(409, f"Erst {req.format}s absolvieren — maximal {MAX_OFFENE_GUIDES} offene erlaubt ({offen} offen)")
|
||||||
await create_topic(req.topic.strip())
|
await create_topic(req.topic.strip())
|
||||||
now = datetime.now(timezone.utc).isoformat()
|
now = datetime.now(timezone.utc).isoformat()
|
||||||
guide = {
|
guide = {
|
||||||
|
|||||||
@@ -128,20 +128,19 @@ function handleFormatClick(format) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Lernschulden-Regel: max. 5 erstellte, aber nicht absolvierte Guides —
|
// Lernschulden-Regel: JE Format max. 5 erstellte, aber nicht absolvierte Guides —
|
||||||
// darüber sind nur Neu-Generierungen bereits erstellter Guides erlaubt.
|
// darüber sind nur Neu-Generierungen bereits erstellter Guides erlaubt.
|
||||||
const offeneGuides = computed(() => {
|
function offeneGuides(format) {
|
||||||
const f = props.stats?.formate || {}
|
const f = props.stats?.formate?.[format]
|
||||||
return ['MiniGuide', 'Guide', 'FullGuide'].reduce(
|
return (f?.erstellt ?? 0) - (f?.absolviert ?? 0)
|
||||||
(sum, k) => sum + ((f[k]?.erstellt ?? 0) - (f[k]?.absolviert ?? 0)), 0,
|
}
|
||||||
)
|
|
||||||
})
|
|
||||||
|
|
||||||
function playLock(format) {
|
function playLock(format) {
|
||||||
if (format === 'OnePager') return null
|
if (format === 'OnePager') return null
|
||||||
if (!props.bausteine.ready) return 'Erst Bausteine erstellen'
|
if (!props.bausteine.ready) return 'Erst Bausteine erstellen'
|
||||||
if (offeneGuides.value >= 5 && !props.doneByFormat[format]) {
|
const offen = offeneGuides(format)
|
||||||
return `Erst Guides absolvieren — ${offeneGuides.value} offen (max. 5)`
|
if (offen >= 5 && !props.doneByFormat[format]) {
|
||||||
|
return `Erst ${format}s absolvieren — ${offen} offen (max. 5)`
|
||||||
}
|
}
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user