Client-Server Application
🚀

Client-Server Application

notion image

Ta aplikacja prezentuje architekturę klient‑serwer na przykładzie aplikacji imitującej system mailowy. Klient komunikuje się z serverem przy użyciu gniazd sieciowych (socketów). Aplikacja oferuje zaawansowane funkcje zarządzania użytkownikami oraz operacji na skrzynce mailowej.

notion image

🎯 Funkcjonalności


  • Zarządzanie użytkownikami: rejestracja, logowanie, zmiana hasła, usuwanie kont
  • Operacje na skrzynce pocztowej: wysyłanie, czytanie i usuwanie i oraz zarządzanie pojemnością skrzynki
  • Role i uprawnienia: role Admin i User z różnymi prawami dostępu
  • Komunikacja klient‑serwer: interakcja w czasie rzeczywistym
  • Integracja z bazą danych: trwałe przechowywanie danych użytkowników i wiadomości w PostgreSQL
  • Elastic Search: wyszukiwanie wiadomości
notion image

🚀 Technologie i biblioteki


  • Java 17
  • PostgreSQL
  • JOOQ
  • Docker
  • Gradle
  • Log4j2
  • JUnit
  • BCrypt
  • Elasticsearch API
notion image

📂 Struktura projektu


bash Copy . ├── src │ ├── main │ │ ├── java/com/jakub/bone/application # Logika biznesowa │ │ ├── java/com/jakub/bone/command # Komendy klienta i obsługa na serwerze │ │ ├── java/com/jakub/bone/controller # Launcher aplikacji klienta i kontroler │ │ ├── java/com/jakub/bone/data # Baza danych │ │ ├── java/com/jakub/bone/domain # Modele domenowe (User, Mail, Admin) │ │ ├── java/com/jakub/bone/network # Zarządzanie połączeniami klient‑serwer │ │ ├── java/com/jakub/bone/repository # Repozytoria bazy danych (User, Mail) │ │ ├── java/com/jakub/bone/server # Launcher serwera i procesor żądań │ │ ├── java/com/jakub/bone/session # Zarządzanie sesjami użytkowników │ │ ├── java/com/jakub/bone/ui # Konsolowy interfejs użytkownika │ │ └── java/com/jakub/bone/utils # Klasy pomocnicze │ └── resources # Pliki konfiguracyjne ├── test # Testy jednostkowe i integracyjne ├── Dockerfile # Budowanie obrazu Docker ├── docker-compose.yml # Orkiestracja kontenerów └── build.gradle # Konfiguracja Gradle
notion image

✨ Kluczowe funkcjonalności


Po stronie klienta

  • Dynamiczne menu: zmienia się w zależności od statusu logowania i roli
  • Obsługa komend: LOGIN, REGISTER, SEND, READ, DELETE itp.
  • Interaktywny interfejs: przewodnik krok po kroku w konsoli

Po stronie serwera

  • Obsługa żądań: Modularna architektura wykorzystująca handler’y komend do przetwarzania żądań klientów
  • Logika biznesowa: uwierzytelnianie, operacje pocztowe, zadania administracyjne
  • Diagnostyka: komendy do zarządzania użytkownikami i monitorowania działania serwera

Baza danych i bezpieczeństwo

  • PostgreSQL + jOOQ: automatyczne tworzenie i inicjalizacja tabel
  • Bezpieczne hashowanie haseł: BCrypt

Komunikacja

  • Sockety: komunikacja w czasie rzeczywistym
  • JSON: serializacja i deserializacja wiadomości

Wyszukiwanie

  • Elasticsearch API: wyszukiwanie tekstowe
notion image

🔗 Repozytorium

Client-Server-Application
jakubBoneUpdated Mar 28, 2025