Projekt z Javy → Czat
Implementacja czatu która łączy ze sobą serwer oparty na Javie jak i klient napisany przy użyciu bibliotek języka JavaScript i  HTML, CSS.

Kod Źródłowy:

1. Serwer:

Napisany przy użyciu takich bibliotek jak:

  • Javalin (javalin.io)
Biblioteka służąca do tworzenia prostych REST API która nie wymaga żadnych zewnętrznych zależności, zalety to obsługa żądań http, bardzo proste i przystępne api, obsługa protokołu websocket.

  • Javalite (javalite.io/activejdbc) 
Narzędzie ORM (Mapowanie obiektowo-relacyjne) wykorzystywane do odwzorowania obiektów w relacyjnych bazach danych. W założeniu pozwala programiście na łatwe połączenie serwera z bazą danych.

Projekt skompilowany przy użyciu Maven:
Jest to narzędzie automatyzujące budowę projektu. Poszczególne funkcje Mavena realizowane są poprzez wtyczki, które są automatycznie pobierane przy ich pierwszym wykorzystaniu. (taki menadżer bibliotek i frameworków na platformie java).

Serwer obsługuje zapytania http, każde z nich jest autoryzowane tokenem
(unikatowym kluczem UUID przypisanym każdemu użytkownikowi). 
Zapytanie zakończy się niepowodzeniem jeżeli sesja tokenu wygaśnie. 
(+3H do daty trwania sesji tokenu od ostatniej operacji/logowania podczas trwania sesji)

2. Funkcjonalność Serwera:

  • obsługa wiele kanałów websocketu
  • tworzenie konta + podstawowe operacje na nim (zmiana hasła oraz pseudominu).
  • generowanie unikatowego klucza dla tokenu
  • sprawdzanie przedawnienia tokenu oraz jego odświeżanie
  • logowanie i wylogowanie z sesji
  • tworzenie nowego kanału, usuwanie, subskrybowanie przez użytkownika
  • historia kanału

3. Charakterystyka Bazy Danych:

W projekcie została użyta baza SQLite zawiera takie tabele jak:

  • channel: informacje o kanałach
  • ( id integer not null (PK), 
  • owner_id integer not null (FK user), 
  • name varchar(128), 
  • size integer, 
  • create_date datetime not null default current_timestamp);

  • message: wiadomości kanałów
  • ( id integer not null (PK), 
  • user_id integer not null (FK user), 
  • channel_id integer not null (FK channel), 
  • type integer not null default 0, 
  • date datetime not null default current_timestamp );

  • subscribe: zawiera informacje o tym które kanały są subskrybowane przez użytkownika
  • ( id integer not null (PK),