Git Product home page Git Product logo

post_app_alg2's Introduction

ALG2 Semestrální práce

1. Zadání práce

  • Cílem projektu bylo vytvořit zjednodušenou poštovní aplikaci, která by umožňovala podání a zpracování zásilek.
  • Aplikace obsahuje přihlášení dle rolí - Customer a Admin.
  • K ukládání dat je možné využívat buď soubory nebo DB.
  • Jako externí knihovna byl použit JUnit.

2. Návrh řešení

2.1. Funkční specifikace

2.1.1 Adresy

  • V aplikace jsou používána data všech adres v ČR. Data jsou z RÚIAN.
  • Knihovna AddressLibrary podporuje získávání adres podle ID nebo podle adresy
    • Adresa musí být ve formátu nazevUlice + cisloPopisny (případně ještě /cisloOrientacni) + psc
    • Pokud adresa nemá název ulice, tak je taky podporováno obec + cisloPopisny + psc

2.1.2 Pošta

Aplikace podporuje 2 typy zásilek, které se dělí na podtypy

1. Psaní

  • Doporučené psaní
  • Cenné psaní

2. Balík

Dělí se dle velikosti

  • S <= 35 cm
  • M <= 50 cm
  • L <= 100 cm

Dále uvádím větvenní menu jako ukázku funkcí:

  • Menu pro nepřihlášené:
      - Sledování zásilky
          - Výběr filtrování
      - Přihlášení
      - Registrace
      - O aplikaci
      - Ukončit
    
  • Menu pro zákazníka:
      - Sledování zásilky
        - Výběr filtrování
      - Registrace zásilky
      - Odhlásit
    
  • Menu pro admina:
      - Sklad
          - Sledování zásilky
              - Výběr filtrování
          - Odeslání transportu
          - Odhlásit
      - Pobočka pošty
          - Zásilky na skladě
          - Přijmutí zásilky
          - Odeslat transport do centrálního skladu
          - Roznést zásilky v našem PSČ
          - Odhlásit
    

2.2. Struktura souborů

Aplikace může běžet buď na datech ze souborů nebo z databáze. V této sekci si představíme strukturu souborů. Soubory jsou uloženy v data/storage/*.csv ve formátu csv s oddělovačem ,.

  • users.csv
Název Datový typ Popis
id int ID uživatele
email string Email uživatele
password string Hashované heslo
firstname string Jméno
lastname string Přijmení
address_id int ID adresy bydliště
created_at timestamp Datum a čas vytvoření
enabled 1/0 Lze se přihlásit? (Nepoužito)
role string Role - admin/customer
  • mails.csv
Název Datový typ Popis
id int ID zásilky
sender_id int ID odesílatele
text_id string Textový ID zásilky
location_id int ID pošty, kde se zásilka nachází
receiver_address_id int ID adresy adresáta
receiver_name string Jméno adresáta
status enum (viz níže) Aktuální status zásilky
type string Druh zásilky - balík, psaní
info string Podtyp zásilky
last_changed_at timestamp Datum poslední změny
  • post_offices.csv
Název Datový typ Popis
id int ID pošty
psc int PSČ
address_id int ID adresy pošty

2.3. Diagram

Diagram aplikace

3. Testování

Aplikace používá knihovnu JUnit. Stěžejní chování je tedy testováno tímto způsobem. Ukázka jednotkového testu:

import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.*;

class AuthTest {

  @Test
  @DisplayName("Hashování")
  void hash() {
    String password = "mojetajneheslo";

    assertEquals(
            "9255d313f3f60aadae......",
            Auth.hash(password),
            "Hash"
    );

  }

  @Test
  @DisplayName("Přihlášení")
  void login() throws StorageException {
    System.out.println("storageUsed: "+ Datastore.getStorageUsed());

    String email = "[email protected]";
    String password = "mojeheslo";

    assertTrue(Auth.login(email,password),"Kontrola přihlášení");
  }
}
  • JUnit poskytuje mnoho typu testu, testy se volají metodou assertXXX - např: assertEquals, assertTrue, assertNotNull

  • Každá testovací metoda musí být opatřena anotací @Test, můžeme uvést i název testu pomocí @DisplayName(...)

  • První test nám kontroluje hashování hesel

  • Druhý test zkouší funkčnost přihlašování

post_app_alg2's People

Contributors

vvoleman avatar

Watchers

 avatar

post_app_alg2's Issues

Code review

Z programovací stránky se mi tento projekt líbí a splňuje všechny minimmální požadavky, ale ze stránky přehlednosti se trochu ztrácím. Nejspíš proto, že tento projekt má velké množství tříd. Celkově v dokumentaci je napsáno že by to měla být zjednodušená poštovní aplikace, ale já bych spíš řekla, že je to až kompletní poštovní aplikace, alespoň podle toho kolik možností bylo zahrnuto. Zjednodušenou poštovní aplikaci bych si představila bez trackingu a admina spíše jako čistě zpracování zákazníka na poště, případně jako posílání emailů. Určitě bych dala body navíc za zpracování a opravdu myšlení na všechno možné co se pošty týče.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.