Shopping Manager - jadłospis, produkt, przepis

 | 

Do usystematyzowania pracy nad projektem Shopping Manager, należy w tym momencie sprecyzować, jak będą wyglądać kluczowe elementy naszego systemu. W tym krótkim wpisie zastanowię się, jakie pola powinien mieć jadłospis, produkt oraz przepis.

Planowanie

Aplikacja Shopping Manager powinna pozwolić użytkownikowi na określenie budżetu tygodniowego. Na tej podstawie powinien być generowany jadłospis. Jadłospis zawiera zbiór przepisów, a każdy przepis zawiera listę produktów potrzebnych do jego sporządzenia.

Jadłospis - Menu

Tutaj sytuacja jest najprostsza. Jak wspomniałem wyżej, jadłospis to zbiór przepisów. W jadłospisie kluczowe pola to id, date oraz recipes.

package menu

import (
  "time"

  "gopkg.in/mgo.v2/bson"

  "../recipe"
)

type Menu struct {
  ID      bson.ObjectId  `json:"id" bson:"_id"`
  Date    time.Time      `json:"date"`
  Recipes recipe.Recipes `json:"recipes"`
}

Przepis - Recipe

Budując przepis, miałem sporo wątpliwości, jak powinna wyglądać jego struktura. Naturalne wydało się, by przepis zawierał listę produktów, ale oprócz tego powinien mieć informację, ile poszczególnych produktów powinno się użyć. Sposób przyrządzenia dania to kolejna zagwozdka. Poszedłem na spore uproszczenia w tym temacie.

Pole sposób przyrządzenia to zwykły string.

Składnik - Ingredient

Zamiast produktu stworzymy nowy byt o nazwie składnik (ingredient), który będzie mieć informację o produkcie oraz dodatkowo będzie posiadać informację o jednostce miary oraz ilości potrzebnej do skomponowania przepisu.

package recipe

import (
  "gopkg.in/mgo.v2/bson"

  "../ingredient"
)

// Recipe represents information about a recipe
type Recipe struct {
  ID          bson.ObjectId `json:"id" bson:"_id"`
  Name        string        `json:"name"`
  Description string        `json:"description"`

  Ingredients ingredient.Ingredients `json:"ingredients"`
}

// Recipes represent information about a recipe list
type Recipes []Recipe

Produkt - Product

Produkt to rdzeń naszego systemu. Jakie pola będzie posiadać, będę weryfikować na bieżąco. Na ten moment na pewno będzie id, nazwa produktu (name), nazwa producenta (manufacturer), kod kreskowy (ean), wartość energetyczna (energy), masa netto (net_weight) oraz jednostka miary (unit_of_measure).

Dodatkowo będziemy zbierać informacje o cenie w postaci kolekcji.

package product

import (
  "time"

  "gopkg.in/mgo.v2/bson"
)

// Product represents information about a product
type Product struct {
  ID            bson.ObjectId `json:"id" bson:"_id"`
  Name          string
  Manufacturer  string
  Ean           string
  Energy        string
  NetWeight     string
  UnitOfMeasure string
  Price         Prices
}

// Products represent information about a product list
type Products []Product

type Price struct {
  Date  time.Time `json:"date"`
  Value float32
}

type Prices []Price

Podsumowanie

Przygotowana struktura pozwoli spełnić minimalne założenia projektu. Niewątpliwym plusem jest wybór MongoDB, który zapewnia mi komfort w tym temacie i oferuje mi sporą elastyczność w ewentualnej rozbudowie. Ma to również swoje minusy, ale jak zawsze, myślmy pozytywnie.


Profile picture

Dawid Ryłko
Github | Twitter | Linkedin

Copyright © 2024 Dawid Ryłko