Discord Clone
uvjako główne narzędzie do zarządzania pakietami i wirtualnymi środowiskami- workdir przygotowany przy użyciu
uv init .iuv 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
-
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)
-
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
-
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)
-
Multimedia
- Wiadomości tekstowe, obrazy, nagrania audio (pliki dźwiękowe)
-
Moderacja
- Blokowanie użytkowników, usuwanie wiadomości
- (Opcjonalnie) zgłaszanie wiadomości/użytkowników
-
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 plikurequirements.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 PostgreSQLdb– baza danych PostgreSQL (używana również jako warstwa kanałów dla Django Channels viachannels_postgres)
- Plik
.envlub komentarze wdocker-compose.ymlwskazują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.ymloraz instrukcję uruchomienia (README.mdz komendądocker-compose up).
- Link do repozytorium umieszczony w pliku
.txtna platformie Moodle. - Nie jest wymagane żadne publiczne wdrożenie – oceniana będzie poprawność działania lokalnego po wykonaniu
docker-compose up.
🚀 Jak uruchomić projekt
-
Wymagania: Upewnij się, że masz zainstalowane Docker oraz Docker Compose.
-
Uruchomienie aplikacji: Otwórz terminal w głównym katalogu projektu i uruchom:
docker-compose up --build -
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.
-
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:
- System użytkowników: Wbudowana rejestracja, logowanie, walidacja unikalności oraz panel edycji profilu (awatar, opis).
- Role i uprawnienia: Działają 3 wymagane role (Admin, Moderator, Użytkownik). Backend skutecznie weryfikuje uprawnienia.
- Komunikacja w czasie rzeczywistym: Wiadomości w kanałach publicznych oraz DM opierają się na technologii WebSockets (Django Channels +
channels_postgres). - 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.
- Moderacja: Administrator/Moderator może usuwać niepożądane wiadomości oraz całkowicie blokować dostęp wybranym użytkownikom.
- Środowisko Docker: Całość działa w odseparowanych kontenerach (web, db) uruchamianych jednym poleceniem, z automatycznymi migracjami i początkowym seedowaniem bazy.