package resources import ( "fmt" "strconv" "strings" "time" "git.bissendorf.co/bissendorf/unifood/m/v2/model/external/stwbremen" "git.bissendorf.co/bissendorf/unifood/m/v2/util" ) type Menu struct { Location string Dishes []Dish } func DishFromDTO(dish stwbremen.Dish) (*Dish, error) { date, err := time.Parse(time.DateOnly, dish.Date) if err != nil { return nil, fmt.Errorf("unable to parse dish date: %w", err) } return &Dish{ Title: dish.Title, Date: date, Tags: strings.Split(strings.Replace(dish.Tags, " ", "", -1), ","), Counter: dish.Counter, Prices: util.Transform(dish.Prices, func(i *stwbremen.Price) price { p, err := strconv.ParseFloat(strings.Trim(i.Price, " "), 32) if err != nil { p = 0 } return price{ Label: i.Label, Price: float32(p), } }), Ingredients: util.Select(util.Transform(dish.Ingredients, func(i *stwbremen.Ingredient) ingredient { return ingredient{ Name: i.Label, Additionals: i.Additionals, } }), func(i *ingredient) bool { return i.Name != "" }), }, nil } type Dish struct { Title string Ingredients []ingredient Prices []price Date time.Time Counter string Tags []string } type ingredient struct { Name string Additionals []string } type price struct { Label string Price float32 }