Mathias007 / pallet-manager

Projekt aplikacji do przetwarzania danych dotyczących czasu pakowania palet, przygotowany z wykorzystaniem m. in. ReactJS, Redux, Sass, NodeJS, ExpressJS.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Pallet Manager.

I. O aplikacji.

Projekt fullstackowej aplikacji webowej do zarządzania danymi dotyczącymi palet. Od strony użytkownika jej główne funkcjonalności koncentrują się na gromadzeniu, prezentowaniu i przetwarzaniu danych na temat zgłoszeń, ich realizacji oraz czasu dostaw palet, z uwzględnieniem ich typów i geograficznych obszarów działania przedsiębiorstwa.

Pod względem programistycznym projekt stanowi twórcze wykorzystanie nowoczesnych technologii webowych. Od strony frontendu wykorzystany został przede wszystkim JavaScript we frameworku ReactJS, który to z kolei został usprawniony przy pomocy licznych bibliotek zewnętrznych i wbudowanych mechanizmów, takich jak:

  • biblioteka komponentów Ant Design dla stworzenia struktury i logiki widoku aplikacji wraz z wizualnymi fragmentami darmowego layoutu Muse (w zakresie efektów czysto graficznych) w celu usprawnienia User Experience,
  • React Redux do obsługi głównej komunikacji z backendem wraz z redux-thunk dla zapewnienia middleware,
  • React Router wraz z React Router Dom do zarządzania routingiem aplikacji po stronie klienta,
  • React Apexcharts do generowania dynamicznych wykresów,
  • React to Print w celu umożliwienia drukowania i zapisywania w postaci plikó PDF danych ujętych w tabelach i na wykresach dostarczanych przez aplikację,
  • React Hooks w celu wykonywania operacji asynchronicznych i zapewnienia stanu komponentom funkcyjnym.

Z kolei warstwa backendu została zbudowana w oparciu o NodeJS z frameworkiem ExpressJS. Serwer został połączony z nierelacyjną bazą danych MongoDB z wykorzystaniem biblioteki mongoose. Backend zapewnia REST API aplikacji, a dzięki odpowiednim zewnętrznym bibliotekom umożliwia zapisywanie plików na dysku, jak i odczytywanie zawartości plików CSV dostarczanych przez użytkownika, ich konwersję do formatu JSON, a następnie zapisanie w bazie danych.

Autorem rozwiązania jest Mateusz Stawowski. Istotnym założeniem twórcy, poza twórczym i racjonalnym wykorzystaniem dostępnych bibliotek i narzędzi w celu zbudowania pełnoprawnej aplikacji typu fullstack, stanowi jej zgodność z dobrymi praktyki współczesnego programowania, stąd też wraz z postępami prac nad funkcjonalnościami programu wdrażane są kolejne czynności refaktoryzacyjne.

II. Instalacja i uruchomienie (propozycja).

Po ściągnięciu/sklonowaniu repozytorium lokalnie należy uwzględnić trzy czynniki. Po pierwsze, frontend i backend zostały umieszczone w osobnych folderach, a także posiadają swoje własne pliki package.json. Z tego też względu każdy z nich należy kolejno zainstalować, co w modelowej sytuacji powinno przebiec następująco:

cd frontend
npm install
npm start
cd backend
npm install
npm run start

Druga kwestia to wykorzystanie w projekcie zmiennych środowiskowych. Ich zawartość została ukryta przed Githubem ze względów bezpieczeństwa. Przed uruchomieniem konieczne zatem będzie stworzenie lokalnie plików .env i uwzględnienie w ich zmiennych wylistowanych w plikach config.js - odpowiednio dla frontendu oraz backendu. Po trzecie, aplikacja działa z bazą danych MongoDB. Należy więc zadbać o połączenie z bazą tego typu z kolekcją o nazwie pallets, przy czym w przypadku, gdyby była ona niepusta, konieczne jest bezwzględne przestrzeganie następującego schematu pojedynczego rekordu:

    {
        title: string,
        area: string.
        type: string,
        startDate: date,
        finishDate: date,
        quantity: number,
    }

III. Zawartość aplikacji z perspektywy użytkownika.

  1. Strona główna (Dashboard/Home):
    • wykres kolumnowy (liczba palet wg typów łącznie),
    • wykres liniowy (liczba zgłoszeń i średni czas wg miesięcy - domyślnie wyświetla dane za rok 2015, można to zmienić z pomocą DatePickera),
    • drukowanie wykresów oraz ich zapis w formacie PDF.
  2. Zgłoszenia (Notifications/Tables):
    • tabela zgłoszeń z filtrami, paginacją, sortowaniem, lekkim renderem oraz opcjami (do obsłużenia na kolejnym etapie rozwoju aplikacji - endpointy i redux zostały już przygotowane),
    • tabela typów palet z ilością, procentowym udziałem, średnim czasem trwania,
    • drukowanie tabel oraz ich zapis w formacie PDF,
    • upload pliku CSV -> konwersja w backendzie,
    • dodawanie nowego zgłoszenia - formularz.

IV. Przebieg prac.

  • czwartek, 20 października 2022 r. - założenie repozytorium GitHub, zbudowanie podstawowej struktury frontendu i backendu, przygotowanie przykładowego pliku CSV, uporządkowanie plików, zbudowanie reduxa zapewniającego połączenie z serwerem.
  • piątek, 21 października 2022 r. - rozbudowa reduxa pod CRUD`a, stworzenie schematu oraz kontrolerów dla zgłoszeń w backendzie, połączenie z bazą danych, utworzenie routów w backendzie pod REST API.
  • sobota, 22 października 2022 r. - utworzenie mechanizmu konwersji i zapisu danych z uploadowanego pliku CSV, implementacja Antd oraz wybranych elementów Muse (style/layout), stworzenie routingu we frontendzie, głównych komponentów struktury (AppHeader, AppSidebar, AppFooter), stworzenie struktury i logiki sekcji Tables, refaktoryzacja kodu.
  • niedziela, 23 października 2022 r. - implementacja wykresów i ich logiki - sekcja Home, wprowadzenie funkcji drukowania/PDF, implementacja filtrowania i sortowania tabel, refaktoryzacja, aktualizacja Readme.
  • poniedziałek, 24 października 2022 r. - uzupełnienie Readme, dodanie Datepickera dla wykresu liniowego, finalizacja i oddanie obecnej wersji projektu (rekrutacja) po końcowych poprawkach.

V. Proponowane dalsze kierunki rozwoju.

  1. Pełna implementacja CRUD`a (formularz edycji oraz okno usuwania zgłoszenia).
  2. Wprowadzenie mechanizmów logowania oraz autentykacji.
  3. Aktualizacja niektórych wersji implementacji bibliotek (zwł. store, router).
  4. Testy.
  5. Deploy.

About

Projekt aplikacji do przetwarzania danych dotyczących czasu pakowania palet, przygotowany z wykorzystaniem m. in. ReactJS, Redux, Sass, NodeJS, ExpressJS.


Languages

Language:JavaScript 58.0%Language:CSS 40.8%Language:HTML 1.1%