diff --git a/django_project/myapp/templates/myapp/events_page.html b/django_project/myapp/templates/myapp/events_page.html new file mode 100644 index 0000000000000000000000000000000000000000..715f6e0127e2e489d2d57d076a19fbc656aaa8dc --- /dev/null +++ b/django_project/myapp/templates/myapp/events_page.html @@ -0,0 +1,26 @@ +{% extends "base.html" %} + +{% block content %} +<h1>Upcoming Events</h1> + +{% if error %} + <p style="color:red">{{ error }}</p> +{% endif %} + +{% if events %} + <ul> + {% for event in events %} + <li> + <strong>{{ event.title }}</strong><br> + <em>{{ event.date }} at {{ event.time }}</em><br> + {{ event.location }}<br> + {% if event.description %} + <p>{{ event.description }}</p> + {% endif %} + </li> + {% endfor %} + </ul> +{% else %} + <p>No events found.</p> +{% endif %} +{% endblock %} \ No newline at end of file diff --git a/django_project/myapp/views/events_views.py b/django_project/myapp/views/events_views.py new file mode 100644 index 0000000000000000000000000000000000000000..b9a0c2c3311a2dd2e1c60816a74956bfb5305720 --- /dev/null +++ b/django_project/myapp/views/events_views.py @@ -0,0 +1,14 @@ +from django.shortcuts import render +from django.conf import settings +import rust_crud_api # Make sure this matches your actual module name + +def event_list_view(request): + db_url = settings.DATABASE_URL + try: + events = rust_crud_api.get_all_events(db_url) + return render(request, 'myapp/event_list.html', {'events': events}) + except Exception as e: + return render(request, 'myapp/event_list.html', { + 'error': str(e), + 'events': [] + }) \ No newline at end of file diff --git a/rust_crud_api/src/models/events.rs b/rust_crud_api/src/models/events.rs index 809c61c3e1714a1c67cbd9ad85fa9638d466e099..635c79882cf450a27e5572b25b8e8fa123078b6a 100644 --- a/rust_crud_api/src/models/events.rs +++ b/rust_crud_api/src/models/events.rs @@ -36,4 +36,27 @@ pub fn create_event( ).map_err(pg_err)?; Ok(()) +} + +#[pyfunction] +pub fn get_all_events(db_url: &str) -> PyResult<Vec<PyEvent>> { + let mut client = Client::connect(db_url, NoTls).map_err(pg_err)?; + + let mut events = Vec::new(); + for row in client.query("SELECT * FROM events ORDER BY date, time", &[]).map_err(pg_err)? { + let event = PyEvent { + id: row.get("id"), + title: row.get("title"), + description: row.get("description"), + location: row.get("location"), + date: row.get::<_, chrono::NaiveDate>("date").to_string(), + time: row.get::<_, chrono::NaiveTime>("time").to_string(), + created_by: row.get("created_by"), + group_id: row.get("group_id"), + created_at: row.get::<_, chrono::NaiveDateTime>("created_at").to_string(), + }; + events.push(event); + } + + Ok(events) } \ No newline at end of file