[CZ] Endpointy a byznis logika - Rades98/AlzaCaseStudy GitHub Wiki
Objednávky
- Id - Unikátní identifikátor - časem by bylo vhodné nahradit OrderCode
- OrderCode - kód použitelný jako var. symbol
- Total - celková cena
- UserId - Id uživatele
- OrderStatusId - stav objednávky
Endpointy
HTTP Verb | Cesta | Popis |
---|---|---|
GET | orders | Dotažení všech objednávek pro uživatele |
GET | orders{statusId} | Dotažení všech objednávek pro uživatele, které mají odpovídající status |
PUT | orders | Vytvoření nové objednávky |
PATCH | orders{Id, OrderStatusId} | Změna stavu objednávky |
DELETE | orders{Id} | Zrušení objednávky |
Vytvoření objednávky
Vytvoření objednávky neblokuje žádné zboží, jen se musí vygenerovat číslo objednávky podle toho, jaké je poslední. formát je 5 písmen a 5 čísel.
Vytvoření čísla objednávky
Z db se načte poslední číslo objednávky a inkrementuje se jeho hodnota, pokud se dojde do stavu, kdy se vyčerpá všech 5 číselných pozic, zvýší se poslední písmeno... A -> B a čísla se se nastaví na 0000. Tak samo se postupuje u písmen. Je necelých 31 x 10^12 volných kódů.
Status objednávky
Název EN | CZ | Vysvětlení |
---|---|---|
Delivered | Doručeno | Objednávka byla doručena a je považována za vyřízenou. V DB drží kvůli případné reklamaci. |
WaitingForPayment | Čeká se na platbu | Objednávka byla zaplacena, sklad už se mohl pohnout |
Created | Vytvořeno | Objednávka byla vytvořena, čeká se na zadání adresy atp |
InExpedition | V expedici | Objednávka byla vyexpedována |
Canceled | Zrušeno | Objednávka byla zrušena - čas uvolnit zboží, jenž bylo rezervováno pro objednávku |
New | Nová | Nová objednávka, kdy se ještě může přidat další zboží |
Životní cyklus objednávky
- Objednávka se vytvoří zavoláním endpointu - stav "New"
- Postupně se do tabulky OrderItems přidávají položky košíku (Id objednávky a zboží) - s prvním přidáním se mění stav na "Created"
- Jakmile se v košíku přejde k platbě, stav se musí změnit na "WaitingForPayment"
- Po obdržení platby se změní na "InExpedition"
- Při předání na "Delivered"
- V případě zrušení objednávky se stav mění na Canceled (v tomto případě se mažou záznamy z OrderItems pro Id objednávky)
Do budoucna by možná bylo vhodné vytvořit tabulku s kódy produktů, jenž byly ve zrušené objednávce, pro možnost zakoupení znovu.
Položky objednávek
- Id - Id
- OrderId - Id objednávky
- ProductId - Id produktu
Přidání a odebrání produktů z objednávek probíhá tak, že se vytvoří záznam v této tabulce. V případě, že se objednávka zruší, musí se všechny záznamy pro danou objednávku z této tabulky smazat, neboť i na základě této tabulky se určuje kapacita zboží na skladu.
Endpointy
HTTP Verb | Cesta | Popis |
---|---|---|
PUT | orderItem{productCode} | Přidá položku do objednávky |
DELETE | orderItem{productCode} | Odebere položku z objednávky |
Produkty
Produkt jako takový je popsán ve třech tabulkách.
Products
Zde je pouze ID produktu, bylo by vhodné přidat také sériové číslo a Id detailu. Tato logika zajišťuje to, že je zbytečné mít milion stejných záznamů s ruzným ID.
ProductDetails
Tato tabulka obsahuje vše potřebné pro náhledovou kartu produktu.
- ImgUrl - náhledový obrázek (měl by být uložen na nějakém dostupném místě pro web)
- Name - název
- Price - cena
- Description - popis
- ProductCategoryId - Id kategorie
Endpointy
HTTP Verb | Cesta | Popis |
---|---|---|
GET | productDetails | Dotažení všech produktů |
GET | productDetails{categoryId, sub} | Dotažení všech produktů podle kategorie případně i subkategorie |
PATCH | productDetails{Id, newDesc} | Částečný update - změna popisu |
ProductDetailInfos
Obsahuje detailní popis produktu pro kartu produktu a JSON formátované parametry produktu
Endpointy
HTTP Verb | Cesta | Popis |
---|---|---|
GET | productDetailInfos{Id} | Dotažení detailních informací pro zvolený produkt |
Produktové kategorie
Enum produktových kategorií - needitovatelné (napevno v DB, přidání jedině pomocí migrace s updatem balíčku)
Endpointy
HTTP Verb | Cesta | Popis | Kdy? |
---|---|---|---|
GET | productCategories | Dotažení všech produktových kategorií | První načtení navigace viditelné na webu |
GET | productCategories{Id} | Dotažení všech podkategorií pro kategorii specifikovanou ID | Načítání subkategorií po rozkliknutí |
Uživatelé
..todo popis