feat: Add inital page to add random Haiku to starpage

Refs: OPS-62
This commit is contained in:
Alivecow 2025-03-26 19:36:39 +01:00
parent f4b1922ed7
commit d9044ff53e
3 changed files with 40 additions and 2 deletions

View file

@ -44,6 +44,7 @@ for the complete web interface are defined within this module.
from __future__ import annotations
import os
import random
from pathlib import Path
from flask import (Flask, redirect, render_template, request,
@ -65,7 +66,15 @@ def index_view():
:return: The index.html template with title "Senju".
:rtype: flask.Response
"""
return render_template("index.html", title="Senju")
random_number = random.randint(0, store.count_entries())
haiku: Haiku | None = store.load_haiku(random_number)
if haiku is None:
raise KeyError("haiku not found")
context: dict = {
"haiku": haiku,
}
return render_template("index.html", context=context, title="Senju")
@app.route("/haiku/")

View file

@ -175,6 +175,15 @@ class StoreManager:
"""
return self._save(data.__dict__)
def count_entries(self) -> int:
"""
Query the store how many Haikus are stored.
:return: Number of stored haikus.
:rtype: int
"""
return len(self._db.all())
def get_id_of_latest_haiku(self) -> Optional[int]:
"""
Get the ID of the most recently added haiku.

View file

@ -1,4 +1,24 @@
{% extends "base.html" %}
{% block content %}
<h1 class="text-center"></h1>
<div class="bg-violet-900 min-h-screen flex items-center justify-center text-white">
<div class="text-center">
<div class="bg-white text-gray-900 p-10 rounded-lg shadow-lg max-w-2xl mx-auto transform -translate-y-10">
<h1 class="text-4xl font-bold text-violet-700 mb-6">{{ title }}</h1>
<p class="text-2xl italic leading-relaxed text-left">
{% for line in context.haiku.lines %}
{{ line }}<br>
{% endfor %}
</p>
</div>
{% if context.is_default %}
<div class="mb-5">
<b>Note:</b> No haikus have been found in the haiku store.
</div>
{% endif %}
<a href="{{ url_for('index_view') }}"
class=" inline-block bg-violet-600 hover:bg-violet-700 text-white font-bold py-2 px-4 rounded-lg">
Back to Home
</a>
</div>
</div>
{% endblock %}