Discord Clone

  • uv jako główne narzędzie do zarządzania pakietami i wirtualnymi środowiskami
  • workdir przygotowany przy użyciu uv init . i uv venv

Cel zadania

Stworzenie webowej aplikacji komunikacyjnej inspirowanej platformą Discord. Aplikacja umożliwia komunikację w czasie rzeczywistym, zarządzanie rolami i uprawnieniami oraz udostępnia interfejs responsywny.

Wymagania funkcjonalne

  1. System użytkowników

    • Rejestracja (login, email, hasło)
    • Logowanie i wylogowanie
    • Walidacja (unikalny login i email, siła hasła)
    • Edycja profilu (awatar, opis)
  2. Role i uprawnienia (minimum 3 role)

    • Administrator pełny dostęp, zarządzanie użytkownikami i kanałami
    • Moderator zarządzanie wiadomościami, blokowanie użytkowników
    • Użytkownik wysyłanie wiadomości, korzystanie z kanałów
    • Dynamiczne przypisywanie ról, egzekwowanie uprawnień w backendzie
  3. Komunikacja

    • Kanały publiczne/grupowe: tworzenie, dołączanie, historia wiadomości
    • Wiadomości prywatne (DM) między dwoma użytkownikami
    • Obsługa czasu rzeczywistego (WebSocket, np. Django Channels + PostgreSQL)
  4. Multimedia

    • Wiadomości tekstowe, obrazy, nagrania audio (pliki dźwiękowe)
  5. Moderacja

    • Blokowanie użytkowników, usuwanie wiadomości
    • (Opcjonalnie) zgłaszanie wiadomości/użytkowników
  6. Funkcje dodatkowe (mile widziane)

    • Status online/offline, powiadomienia o nowych wiadomościach
    • Wyszukiwanie użytkowników/kanałów, emoji/reakcje

Frontend

  • Interfejs inspirowany Discordem (responsywny)
  • Wykorzystanie frameworka Bootstrap
  • Estetyczne formularze logowania i rejestracji (gotowe szablony CSS)
  • Obsługa WebSocket po stronie klienta (np. JavaScript)

Backend

  • Framework: Django (zalecane rozszerzenia: Django REST Framework, Django Channels)
  • WebSocket do komunikacji w czasie rzeczywistym (z użyciem PostgreSQL jako warstwy kanałów channels_postgres)
  • Obsługa przesyłania plików (obrazy, audio)
  • Własna strona błędu 404 i 500

Środowisko uruchomieniowe kontenery Docker

Aplikacja nie wymaga hostowania na zewnętrznych platformach. Całość musi być gotowa do uruchomienia w kontenerach za pomocą Docker i Docker Compose.

Pliki wymagane w repozytorium:

  • Dockerfile budujący obraz aplikacji Django (wraz z zależnościami, np. z pliku requirements.txt)
  • docker-compose.yml definiujący wszystkie usługi niezbędne do działania systemu, co najmniej:
    • web serwer Django (z obsługą ASGI np. Daphne/Uvicorn dla WebSocket)
    • db baza danych PostgreSQL
    • db baza danych PostgreSQL (używana również jako warstwa kanałów dla Django Channels via channels_postgres)
  • Plik .env lub komentarze w docker-compose.yml wskazujące, jak skonfigurować zmienne środowiskowe (np. SECRET_KEY, dane dostępowe do bazy)

Uruchomienie aplikacji sprowadza się do:

docker-compose up --build

Po starcie wszystkie migracje powinny zostać wykonane automatycznie, a aplikacja dostępna pod http://localhost:8000.

Sposób oddania pracy

  • Repozytorium kodu (np. GitHub, GitLab) zawierające cały projekt, w tym Dockerfile, docker-compose.yml oraz instrukcję uruchomienia (README.md z komendą docker-compose up).
  • Link do repozytorium umieszczony w pliku .txt na platformie Moodle.
  • Nie jest wymagane żadne publiczne wdrożenie oceniana będzie poprawność działania lokalnego po wykonaniu docker-compose up.

🚀 Jak uruchomić projekt

  1. Wymagania: Upewnij się, że masz zainstalowane Docker oraz Docker Compose.

  2. Uruchomienie aplikacji: Otwórz terminal w głównym katalogu projektu i uruchom:

    docker-compose up --build
    
  3. Automatyczna inicjalizacja:

    • Uruchomi się baza danych PostgreSQL oraz serwer webowy Daphne.
    • Migracje bazy danych zostaną wygenerowane i zaaplikowane automatycznie.
    • Domyślne konto Administratora zostanie stworzone.
  4. Dostęp do aplikacji: Otwórz przeglądarkę i wejdź na: http://localhost:8000

👑 Przewodnik dla Administratora

Domyślne dane logowania (Administrator):

  • Login: admin
  • Hasło: admin

Funkcje i uprawnienia:

  • Panel Administracyjny: Dostępny z paska nawigacji po zalogowaniu. Pozwala na przegląd użytkowników, zmianę ról (Administrator, Moderator, Użytkownik) oraz globalne blokowanie/odblokowywanie.
  • Hierarchia ról:
    • Administrator ma pełny dostęp do wszystkich kanałów, może usuwać dowolne wiadomości i kanały, a także zarządzać rolami.
    • Moderator może usuwać nieodpowiednie wiadomości i blokować użytkowników, ale nie może zmieniać ról.
    • Użytkownik może tworzyć kanały, pisać w nich, wysyłać wiadomości prywatne i usuwać własne wiadomości.

Zgodność z wymaganiami

Projekt w pełni realizuje założenia:

  1. System użytkowników: Wbudowana rejestracja, logowanie, walidacja unikalności oraz panel edycji profilu (awatar, opis).
  2. Role i uprawnienia: Działają 3 wymagane role (Admin, Moderator, Użytkownik). Backend skutecznie weryfikuje uprawnienia.
  3. Komunikacja w czasie rzeczywistym: Wiadomości w kanałach publicznych oraz DM opierają się na technologii WebSockets (Django Channels + channels_postgres).
  4. Multimedia: Dodano obsługę przesyłania plików, które od razu po przesłaniu wyświetlają się innym użytkownikom jako obrazy lub odtwarzacze audio.
  5. Moderacja: Administrator/Moderator może usuwać niepożądane wiadomości oraz całkowicie blokować dostęp wybranym użytkownikom.
  6. Środowisko Docker: Całość działa w odseparowanych kontenerach (web, db) uruchamianych jednym poleceniem, z automatycznymi migracjami i początkowym seedowaniem bazy.
S
Languages
JavaScript 57%
CSS 24.6%
HTML 11.3%
Python 6.9%
Dockerfile 0.2%