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.
🎯 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
🚀 Technologie i biblioteki
- Java 17
- PostgreSQL
- JOOQ
- Docker
- Gradle
- Log4j2
- JUnit
- BCrypt
- Elasticsearch API
📂 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
✨ 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
🔗 Repozytorium
Client-Server-Application
jakubBone • Updated Mar 28, 2025