GithubHelp home page GithubHelp logo

d-bald / sportfest Goto Github PK

View Code? Open in Web Editor NEW
1.0 2.0 4.0 16.4 MB

Zur Organisation und Live-Auswertung des Sportfestes.

License: MIT License

CSS 1.54% JavaScript 68.54% Elixir 25.23% HTML 4.24% Shell 0.15% Dockerfile 0.29% Batchfile 0.01%

sportfest's Introduction

Sportfest

Nutzungshinweise

Login

Es gibt noch keine personalisierten Accounts. Zurzeit wird jeweils ein Account mit der Rolle admin, moderator und user angelegt.

Routen

Jede Route beginnt mit dem festgelegten Host Namen durch PHX_HOST (s.u.).

Route Beschreibung Autorisierte Rolle(n)
/ Startseite admin, moderator, user, anonyme:r Nutzer:in
/users/log_in Login um Zugang zu den anderen Seiten zu erhalten. anonyme:r Nutzer:in
/stationen Auflistung zum Anzeigen und Bearbeiten der Stationen admin, moderator, user
/stationen/:id Erklärung der Station admin, moderator, user
/leaderboard Anzeigen der Ranglisten admin, moderator, user
/scores Bearbeiten von Medaillen für aktive Schüler:innen für alle Stationen und Klassen admin, moderator
/klassen Auflistung zum Anzeigen und Bearbeiten der Klassen admin, moderator
/klassen/:id Bearbeiten von inaktiven Schüler:innen einer Klasse admin, moderator
/schueler Auflistung zum Bearbeiten der Schüler:innen admin

Import von Schüler:innen

Auf der Seite HOSTNAME/schueler können Schüler:innen-Daten durch Hochladen von CSV-Dateien eingelesen werden. Die CSV-Dateien müssen folgende Eigenschaften erfüllen:

  • Trennzeichen: Komma (,)
  • Spalten: Klasse, Vorname, Nachname
  • Die Klassenbezeichnung muss am Anfang den Jahrgang als Zahl stehen haben: 5 b) oder 5.1.1

Videoeinbettung für Stationen

Es werden aktuell nur Links zu Videos auf Vimeo unterstützt.

Installation

Lokal

Datenbank

Installiere Postgres SQL

https://www.postgresql.org/

Konfiguration

Aus der Dokumentation des Phoenix Frameworks:

"Phoenix assumes that our PostgreSQL database will have a postgres user account with the correct permissions and a password of "postgres"."

Falls das Password noch nicht stimmt:

$ psql -U postgres
psql (13.6)
Type "help" for help.

postgres=# ALTER USER postgres PASSWORD 'postgres';
ALTER ROLE
Erstelle Datenbank sportfest_prod für die Sportfest App
$ psql -U postgres
psql (13.6)
Type "help" for help.

postgres=# CREATE DATABASE sportfest_prod;
CREATE DATABASE

Code herunterladen

$ sudo git clone https://github.com/D-Bald/Sportfest.git
$ cd Sportfest
$ sudo mix deps.get
$ sudo mix compile

Deployment mit Releases

Vorbereiten des Skripts

Benenne das Startskript um:

$ sudo mv setup_and_run.sh.sample setup_and_run.sh

Generiere eine sicheres Passwort für SECRET_KEY_BASE durch Ausführen folgender Zeile im Projektordner (Phoenix Installation vorausgesetzt):

$ mix phx.gen.secret

Setze das generierte Passwort in der entsprechenden Zeile im Skript ein.

Ändere auch den Eintrag für PHX_HOST.

Vgl. auch Hinweis aus der Phoenix Dokumentation:

"Do not copy those values directly, set SECRET_KEY_BASE according to the result of mix phx.gen.secret and DATABASE_URL according to your database address."

Ausführen des Skripts
$ sudo sh setup_and_run.sh

Falls noch keine Accounts angelegt wurden, wird hier durch Ausführen der Funktion Sportfest.Release.maybe_create_accounts/0 die Eingabe einer E-Mail Adresse und eines Passworts für jeweils einen Account mit den Rollen "admin", "moderator" und "user" gefordert. Die E-Mail Adresse muss ein @ enthalten und das Passwort mindestens 12 Zeichen lang sein. Um die Accounts zu resetten, kann die Zeile mit der genannten Funktion auskommentiert und dafür die Zeile mit der Funktion Sportfest.Release.maybe_create_accounts/0 ausgeführt werden.

Um die so gestartete App zu stoppen
$ _build/prod/rel/sportfest/bin/sportfest stop
Option zum Starten der App im Vordergrund
$ _build/prod/rel/sportfest/bin/sportfest start

Fly.io

Getting started

Folge den Schritten in der Dokumentation von Fly.io: https://fly.io/docs/elixir/getting-started/

Hier werden alle Schritte, von der Installation der flyctl bis hin zum Erstellen der Fly App mit fly launch vorgestellt.

Initialisierung der Accounts

Die Initialisierung ist am einfachsten von der IEx shell anzustoßen: https://fly.io/docs/elixir/the-basics/iex-into-running-app/ Angenommen, die Fly App heißt sportfest, dann lautet der Befehl:

$ fly ssh console --pty -C "app/bin/sportfest remote"

Zur Initialisierung der Accounts, verwende die Funktionen im Sportfest.Release Modul:

  iex> Sportfest.Release.maybe_create_accounts()

TODO

Bug-fixes

  • Fehler: Ändern der Klasse eines Schülers ändert nicht den foreign key für klasse des zum Schüler gehörenden Scores. Dadurch wird der Score in der Medaillenbearbeitung in der falschen (vorherigen) Klasse angezeigt.
  • Fehler beim Öffnen des Leaderboards, wenn in einem Jahrgang kein:e Schüler:in eingetragen ist:
    <%= for i <- 0..min(Enum.count(@jhg_schueler_map[jahrgang]) - 1, 9) do %>
  • Tests fixen und vervollständigen (insb. Integration Tests für LiveViews)

Dokumentation

  • Examples in Dokumentationen checken: würden sie so durch doc-test gehen?
  • Module doc bearbeiten/hinzufügen
  • Beschreibung der Anwendung in application in mix.ex ändern/angeben

Inhalt

  • Impressum hinzufügen
  • Export von Daten (als Download) (https://fullstackphoenix.com/tutorials/csv-export)
    • Scores
    • Stationen (gespeicherte Bilder werden noch nicht exportiert)
    • Eigene Seite mit Auswahl der zu exportierenden Ressourcen und jeweiligen Felder
  • Übersetzung der Validierungs-Errors
  • Anzeigebild für Stationen
    • Feld in Schema und Migration hinzufügen
    • Upload ermöglichen
    • Anzeige neben Namen in Auflistung aller Stationen
  • Accountverwaltung für Admins
  • Schon implementiert: Ändern von Email und Passwort aller Accounts
  • Offen: Hinzufügen neuer Accounts; Löschen von Accounts

Maintenance

Performance

  • Repo.preload nur falls nötig durchführen, um die ausgetauschte Datenmenge und die Anzahl an Datenbank Queries zu reduzieren.

Lizenz

MIT License. Copyright (c) 2022 David Potschka.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.