DeeKahy / MealMate2-solution

0 stars 0 forks source link

Data struktur og interface til opbevaring af Recipies #2

Open CarlHejlesen opened 1 year ago

CarlHejlesen commented 1 year ago

For at vores recipe search algoritme skal virke skal den have noget at tage udgangspunkt i

Her er forskellige mål stadier, som opfylder og giver forskellige nye krav.

Database 0. Langue database, dette er den første database som udvider vores søgefelt, til at du kan søge på ingridenser på dansk og så også få engelske opskrifter forslået.

Den skal have et interface hvor man kan tilføje og fjerne synonymer og tilføje oversættelserne af forskellige ingridenser til forskellige sprog.
image

Hver data base skal have opskrifter, collections på forskellige sprog. Hver database burde have hver interface til at redigere og tilføje recipes i.

**Database 1 interface vil fuldfører vores step 1 er vores første mål.** Her ville man "bare" skulle copiere opsrkiften ind uden nogen opsætning overhovedet og give det den en titel. så 2 input boxes som interface

Data format: Gemmer det som 1 document med 2 strings inde i, som er title og opskrift.

Refleksion, jeg tror at få det til at se pænt ud på vores app vil blive svært med sådan et format. Så et medførende input som indeholder link til den givende opskrifts hjemmeside, hvor at det er skrevet pænt ud ville være hver at tænke over.

Database 2 fuldfører step 2 Her skal der være title input boks. så input boks til fremgangsmåden til opskriften. Så et givende antal input boxes til hvert ingridiens.

Data format: Gemmer det som 1 document med [title i toppen(som en string)] så kommer [ingredenser som burde være inviduelle strings i objected ingridenser] [(string)til fremgangsmåden]

Database 3 fuldføre step 3. Når man skal skrive mængder i programet skal koden gøre så at hvis den møder duplicets skal den, lægge de 2 mængder sammen.

Sådan skal input format til db 3 se ud image

image

Vi kører først med step 1 så med step 2 så med step 3

CarlHejlesen commented 1 year ago

Engang eksekverende kode som laver opretter databaser og givende collections

Database 0 og 1 Done image

Code der kun skal eksekveres en gang, laver nu 3 daterbaser der hver har 2 sprog collections med 1 recipe i hver på det rigtige format image

Kode kan køres lige så mange gange man løster da den først tjekker om elementerne er oprettet inden den insætter recipesne eller langue

CarlHejlesen commented 1 year ago

Skal senere laves mulighed for at tilføje extra collections inde for de 3 databaser i forhold til sprog. Dette ville være rart hvis der også var et interface for dette. På trods af at det er en engangs ting.

Så ville folk der ikke kan programmre nemlig kunne bidrage med at indskrive flere sprog.

CarlHejlesen commented 1 year ago

her er koden. der eksikvere en gang.

using MongoDB.Bson; using MongoDB.Driver; using System.Text.Json;

var dbClient = new MongoClient("mongodb://localhost:27017"); // Her linker vi vores variable til vores server

IMongoDatabase languedb = dbClient.GetDatabase("languedb"); // her siger vi hvilken database vi vil have adgang til.

var langue_collection = languedb.GetCollection("langue"); // her vælger vi hvilken collection i vores valgte database vi gerne vil have adgang til.

var ingrience = new BsonDocument// her opretter i en ingrediens som vi vil sende til langue databasen { { "danish", new BsonDocument { { "name", "hakket oksekød" }, { "synonym", "hakket kalve- og flæskekød" } } }, { "english", new BsonDocument { { "name", "ground beef" }, { "synonym", "minced meat" } } } }; var filter_langue = Builders.Filter.Eq("danish.name", "hakket oksekød");// Her laver vi et filter. var count2 = langue_collection.CountDocuments(filter_langue);// vi tæller matchende documenter i vores collection, i forhold til vores filter if (count2 == 0) { langue_collection.InsertOne(ingrience); } else { Console.WriteLine("Langue db er sat op"); }

IMongoDatabase recipe_db_1 = dbClient.GetDatabase("recipe_db_1");

var opskrifter_dansk_cl_1 = recipe_db_1.GetCollection("recipe_danish"); var recipes_english_cl_1 = recipe_db_1.GetCollection("recipe_english");

var opskrift_dansk = new BsonDocument { { "title", new BsonDocument(new Dictionary<string, BsonValue> { { "name", "Græske kødboller med orzo" } }) }, { "recipe", new BsonDocument(new Dictionary<string, BsonValue> { {"ingridience_and_documentation", "Ingredienser\r\nGræske kødboller\r\n400 g hakket kalve- og flæskekød\r\n50 g hvedemel\r\n0,50 dl mælk\r\n2 æg\r\n1 løg, finthakket\r\n3 fed hvidløg, finthakket\r\n50 g feta, smuldret\r\n40 g soltørrede tomater i olie, finthakkede\r\n1 tsk stødt spidskommen\r\n1 tsk oregano, tørret\r\n2 tsk salt\r\nsort peber, friskkværnet\r\n2 spsk olivenolie\r\n15 g smør\r\nFremgangsmåde\r\nGræske kødboller\r\nRør alle ingredienserne sammen i en stor skål. Lad\r\nfarsen hvile i minimum 30 minutter i køleskabet,\r\nog gerne et par timer.\r\nSteg kødbollerne på en varm sauterpande med\r\nolie og smør, og vend dem flere gange undervejs,\r\nså de bliver fint runde. Sæt de græske kødboller til\r\nside på en tallerken.\r\nGræsk onepot med græske kødboller og orzo\r\nKom lidt ekstra olie i sauterpanden og sauter løg,\r\nhvidløg og soltørrede tomater i nogle minutter ved\r\nmiddelvarme, til løgene er bløde og klare.\r\nTilsæt squash, hakkede tomater,\r\ngrøntsagsboullion, timian, rosmarin og orzo og rør\r\ndet godt igennem. Læg låg på og lad det simre ved\r\nlav varme til pastaen er perfekt mør – rør flere\r\ngange undervejs.\r\nRør spinat i og anret derefter de græske kødboller\r\ni retten. Smuldr feta over og fordel oliven sammen\r\n×\r\n30.06.2023 19.15 Orzo gryde med græske kødboller og grøntsager\r\nhttps://www.valdemarsro.dk/orzo-gryde-graeske-koedboller/ 2/2\r\nDerudover\r\n1 løg, finthakket\r\n3 fed hvidløg, finthakket\r\n50 g soltørrede tomater i olie, finthakket\r\n1 squash, i små tern\r\n2 dåser hakkede tomater\r\n5 dl grøntsagsbouillon\r\n1 spsk timian, tørret\r\n1 tsk rosmarin, tørret\r\n300 g pasta orzo\r\n150 g spinat\r\n100 g feta\r\n80 g sorte oliven uden sten\r\n1 håndfuld frisk oregano\r\n1 spsk olivenolie\r\nsalt\r\nsort peber, friskkværne" }

    })
},
{ "link", new BsonDocument(new Dictionary<string, BsonValue>
    {
        { "website", "https://www.valdemarsro.dk/orzo-gryde-graeske-koedboller/" }
    })
}

};

var opskrift_engelsk = new BsonDocument { { "title", new BsonDocument(new Dictionary<string, BsonValue> { { "name", "Roast beef with caramelised onion gravy" } }) }, { "recipe", new BsonDocument(new Dictionary<string, BsonValue> { {"ingridience_and_documentation", "Ingredients\r\n1 tbsp black peppercorn\r\n1 tbsp English mustard powder\r\n1 tbsp dried thyme\r\n1 tsp celery seeds\r\n1 tbsp olive oil\r\nabout 2kg/4lb 8oz topside joint of beef\r\nFor the gravy\r\n4 tbsp plain flour\r\n2 beef stock cubes\r\n3 tbsp caramelised onion chutney or marmalade\r\n2-3 tsp yeast extract\r\nMethod\r\nSTEP 1\r\nCrush the peppercorns, mustard powder, thyme and celery seeds together with some salt, using a pestle and mortar. Stir in the oil, then rub it all over the beef. (If you have time, cover and chill the joint overnight to marinate. Bring the beef out of the fridge 1 hr before roasting.)\r\n\r\nSTEP 2\r\nHeat oven to 190C/170C fan/gas 5 and sit the joint in a snug-ish roasting tin. Roast for 12 mins per 450g/1lb (about 55 mins for a 2kg/4lb 8oz joint) for medium-rare, or 15 mins per 450g/1lb (about 1 hr 10 mins) for medium-well.\r\n\r\nSTEP 3\r\nRemove from the oven, lift onto a platter, cover with foil and rest for 30 mins. If you’re making the Yorkies (p90), increase oven to 220C/200C fan/gas 7.\r\n\r\nSTEP 4\r\nFor the gravy, pour any juices from the roasting tin into a jug. Let the juices separate, then spoon 2 tbsp of the fat back into the tin – if there is no fat, use 2 tbsp butter instead. Discard any other fat. Sit the roasting tin on the hob and stir in the flour, stock cubes, onion chutney or marmalade and yeast extract. Cook for 1 min, stirring well to scrape up any beefy bits stuck to the tin, then gradually stir in 750ml hot water from the kettle. Bubble to thicken to a nice consistency, then gently keep warm until ready to serve with the beef, carved into slices." }

    })
},
{ "link", new BsonDocument(new Dictionary<string, BsonValue>
    {
        { "website", "https://www.bbcgoodfood.com/recipes/roast-beef-caramelised-onion-gravy" }
    })
}

};

var filter = Builders.Filter.Eq("title.name", "Græske kødboller med orzo");// Her laver vi et filter. var count = opskrifter_dansk_cl_1.CountDocuments(filter);// vi tæller matchende documenter i vores collection, i forhold til vores filter if (count == 0) { opskrifter_dansk_cl_1.InsertOne(opskrift_dansk); } else { Console.WriteLine("Database 1 collection dansk tjek"); }

// Tjekker om opskriften allerede findes i den engelske samling var filter2 = Builders.Filter.Eq("title.name", "Roast beef with caramelised onion gravy"); count = recipes_english_cl_1.CountDocuments(filter2);// vi tæller matchende documenter i vores collection if (count == 0) { recipes_english_cl_1.InsertOne(opskrift_engelsk); } else { Console.WriteLine("Database 1 collection english tjek"); }

IMongoDatabase recipe_db_2 = dbClient.GetDatabase("recipe_db_2");

var opskrifter_dansk_cl_2 = recipe_db_2.GetCollection("recipe_danish"); var recipes_english_cl_2 = recipe_db_2.GetCollection("recipe_english"); var opskrift_dansk_2 = new BsonDocument { { "title", new BsonDocument(new Dictionary<string, BsonValue> { { "name", "Græske kødboller med orzo" } }) }, { "ingredients", new BsonArray(new List { new BsonDocument { { "ingredient", "400 g hakket kalve- og flæskekød" } }, new BsonDocument { { "ingredient", "50 g hvedemel" } }, new BsonDocument { { "ingredient", "0,50 dl mælk" } }, new BsonDocument { { "ingredient", "2 æg" } }, new BsonDocument { { "ingredient", "1 løg, finthakket" } }, new BsonDocument { { "ingredient", "3 fed hvidløg, finthakket" } }, new BsonDocument { { "ingredient", "50 g feta, smuldret" } }, new BsonDocument { { "ingredient", "40 g soltørrede tomater i olie, finthakkede" } }, new BsonDocument { { "ingredient", "1 tsk stødt spidskommen" } }, new BsonDocument { { "ingredient", "1 tsk oregano, tørret" } }, new BsonDocument { { "ingredient", "2 tsk salt" } }, new BsonDocument { { "ingredient", "sort peber, friskkværnet" } }, new BsonDocument { { "ingredient", "2 spsk olivenolie" } }, new BsonDocument { { "ingredient", "15 g smør" } }, new BsonDocument { { "ingredient", "1 løg, finthakket" } }, new BsonDocument { { "ingredient", "3 fed hvidløg, finthakket" } }, new BsonDocument { { "ingredient", "50 g soltørrede tomater i olie, finthakket" } }, new BsonDocument { { "ingredient", "1 squash, i små tern" } }, new BsonDocument { { "ingredient", "2 dåser hakkede tomater" } }, new BsonDocument { { "ingredient", "5 dl grøntsagsbouillon" } }, new BsonDocument { { "ingredient", "1 spsk timian, tørret" } }, new BsonDocument { { "ingredient", "1 tsk rosmarin, tørret" } }, new BsonDocument { { "ingredient", "300 g pasta orzo" } }, new BsonDocument { { "ingredient", "150 g spinat" } }, new BsonDocument { { "ingredient", "100 g feta" } }, new BsonDocument { { "ingredient", "80 g sorte oliven uden sten" } }, new BsonDocument { { "ingredient", "1 håndfuld frisk oregano" } }, new BsonDocument { { "ingredient", "1 spsk olivenolie" } }, new BsonDocument { { "ingredient", "salt" } }, new BsonDocument { { "ingredient", "sort peber, friskkværnet" } }, }) }, { "recipe", new BsonDocument(new Dictionary<string, BsonValue> { { "procedure", "Fremgangsmåde\r\nGræske kødboller\r\nRør alle ingredienserne sammen i en stor skål. Lad\r\nfarsen hvile i minimum 30 minutter i køleskabet,\r\nog gerne et par timer.\r\nSteg kødbollerne på en varm sauterpande med\r\nolie og smør, og vend dem flere gange undervejs,\r\nså de bliver fint runde. Sæt de græske kødboller til\r\nside på en tallerken.\r\nGræsk onepot med græske kødboller og orzo\r\nKom lidt ekstra olie i sauterpanden og sauter løg,\r\nhvidløg og soltørrede tomater i nogle minutter ved\r\nmiddelvarme, til løgene er bløde og klare.\r\nTilsæt squash, hakkede tomater,\r\ngrøntsagsboullion, timian, rosmarin og orzo og rør\r\ndet godt igennem. Læg låg på og lad det simre ved\r\nlav varme til pastaen er perfekt mør – rør flere\r\ngange undervejs.\r\nRør spinat i og anret derefter de græske kødboller\r\ni retten. Smuldr feta over og fordel oliven sammen\r\n×\r\n30.06.2023 19.15 Orzo gryde med græske kødboller og grøntsager\r\nhttps://www.valdemarsro.dk/orzo-gryde-graeske-koedboller/ 2/2" } }) }, { "link", new BsonDocument(new Dictionary<string, BsonValue> { { "website", "https://www.valdemarsro.dk/orzo-gryde-graeske-koedboller/" } }) } };

var opskrift_engelsk_2 = new BsonDocument { { "title", new BsonDocument(new Dictionary<string, BsonValue> { { "name", "Roast beef with caramelised onion gravy" } }) }, { "ingredients", new BsonArray(new List { new BsonDocument { { "ingredient", "1 tbsp black peppercorn" } }, new BsonDocument { { "ingredient", "1 tbsp English mustard powder" } }, new BsonDocument { { "ingredient", "1 tbsp dried thyme" } }, new BsonDocument { { "ingredient", "1 tsp celery seeds" } }, new BsonDocument { { "ingredient", "1 tbsp olive oil" } }, new BsonDocument { { "ingredient", "about 2kg/4lb 8oz topside joint of beef" } }, new BsonDocument { { "ingredient", "For the gravy" } }, new BsonDocument { { "ingredient", "4 tbsp plain flour" } }, new BsonDocument { { "ingredient", "2 beef stock cubes" } }, new BsonDocument { { "ingredient", "3 tbsp caramelised onion chutney or marmalade" } }, new BsonDocument { { "ingredient", "2-3 tsp yeast extract" } } }) }, { "recipe", new BsonDocument(new Dictionary<string, BsonValue> { { "procedure", "Method\r\nSTEP 1\r\nCrush the peppercorns, mustard powder, thyme and celery seeds together with some salt, using a pestle and mortar. Stir in the oil, then rub it all over the beef. (If you have time, cover and chill the joint overnight to marinate. Bring the beef out of the fridge 1 hr before roasting.)\r\n\r\nSTEP 2\r\nHeat oven to 190C/170C fan/gas 5 and sit the joint in a snug-ish roasting tin. Roast for 12 mins per 450g/1lb (about 55 mins for a 2kg/4lb 8oz joint) for medium-rare, or 15 mins per 450g/1lb (about 1 hr 10 mins) for medium-well.\r\n\r\nSTEP 3\r\nRemove from the oven, lift onto a platter, cover with foil and rest for 30 mins. If you’re making the Yorkies (p90), increase oven to 220C/200C fan/gas 7.\r\n\r\nSTEP 4\r\nFor the gravy, pour any juices from the roasting tin into a jug. Let the juices separate, then spoon 2 tbsp of the fat back into the tin – if there is no fat, use 2 tbsp butter instead. Discard any other fat. Sit the roasting tin on the hob and stir in the flour, stock cubes, onion chutney or marmalade and yeast extract. Cook for 1 min, stirring well to scrape up any beefy bits stuck to the tin, then gradually stir in 750ml hot water from the kettle. Bubble to thicken to a nice consistency, then gently keep warm until ready to serve with the beef, carved into slices." } }) }, { "link", new BsonDocument(new Dictionary<string, BsonValue> { { "website", "https://www.bbcgoodfood.com/recipes/roast-beef-caramelised-onion-gravy" } }) } };

count = opskrifter_dansk_cl_2.CountDocuments(filter);// vi tæller matchende documenter i vores collection, i forhold til vores filter if (count == 0) { opskrifter_dansk_cl_2.InsertOne(opskrift_dansk_2); } else { Console.WriteLine("Database 2 collection dansk tjek."); }

// Tjekker om opskriften allerede findes i den engelske samling count = recipes_english_cl_2.CountDocuments(filter2);// vi tæller matchende documenter i vores collection if (count == 0) { recipes_english_cl_2.InsertOne(opskrift_engelsk_2); } else { Console.WriteLine("Database 2 collection english tjek."); }

IMongoDatabase recipe_db_3 = dbClient.GetDatabase("recipe_db_3");

var opskrifter_dansk_cl_3 = recipe_db_3.GetCollection("recipe_danish"); var recipes_english_cl_3 = recipe_db_3.GetCollection("recipe_english");

var opskrift_engelsk_3 = new BsonDocument { { "title", new BsonDocument(new Dictionary<string, BsonValue> { { "name", "Roast beef with caramelised onion gravy" } }) }, { "ingredients", new BsonDocument(new Dictionary<string, BsonValue> { { "black peppercorn", "1 tbsp" }, { "English mustard powder", "1 tbsp" }, { "dried thyme", "1 tbsp" }, { "celery seeds", "1 tsp" }, { "olive oil", "1 tbsp" }, { "topside joint of beef", "about 2kg/4lb 8oz" }, { "For the gravy", "" }, { "plain flour", "4 tbsp" }, { "beef stock cubes", "2" }, { "caramelised onion chutney or marmalade", "3 tbsp" }, { "yeast extract", "2-3 tsp" } }) }, { "recipe", new BsonDocument(new Dictionary<string, BsonValue> { { "procedure", "Method\r\nSTEP 1\r\nCrush the peppercorns, mustard powder, thyme and celery seeds together with some salt, using a pestle and mortar. Stir in the oil, then rub it all over the beef. (If you have time, cover and chill the joint overnight to marinate. Bring the beef out of the fridge 1 hr before roasting.)\r\n\r\nSTEP 2\r\nHeat oven to 190C/170C fan/gas 5 and sit the joint in a snug-ish roasting tin. Roast for 12 mins per 450g/1lb (about 55 mins for a 2kg/4lb 8oz joint) for medium-rare, or 15 mins per 450g/1lb (about 1 hr 10 mins) for medium-well.\r\n\r\nSTEP 3\r\nRemove from the oven, lift onto a platter, cover with foil and rest for 30 mins. If you’re making the Yorkies (p90), increase oven to 220C/200C fan/gas 7.\r\n\r\nSTEP 4\r\nFor the gravy, pour any juices from the roasting tin into a jug. Let the juices separate, then spoon 2 tbsp of the fat back into the tin – if there is no fat, use 2 tbsp butter instead. Discard any other fat. Sit the roasting tin on the hob and stir in the flour, stock cubes, onion chutney or marmalade and yeast extract. Cook for 1 min, stirring well to scrape up any beefy bits stuck to the tin, then gradually stir in 750ml hot water from the kettle. Bubble to thicken to a nice consistency, then gently keep warm until ready to serve with the beef, carved into slices." } }) }, { "link", new BsonDocument(new Dictionary<string, BsonValue> { { "website", "https://www.bbcgoodfood.com/recipes/roast-beef-caramelised-onion-gravy" } }) } };

var opskrift_dansk_3 = new BsonDocument { { "title", new BsonDocument(new Dictionary<string, BsonValue> { { "name", "Græske kødboller med orzo" } }) }, { "ingredients", new BsonDocument(new Dictionary<string, BsonValue> { { "hakket kalve- og flæskekød", "400 g" }, { "hvedemel", "50 g" }, { "mælk", "0,50 dl" }, { "æg", "2" }, { "løg, finthakket", "1" }, { "fed hvidløg, finthakket", "6" }, { "feta, smuldret", "50 g" }, { "soltørrede tomater i olie, finthakkede", "40 g" }, { "stødt spidskommen", "1 tsk" }, { "oregano, tørret", "1 tsk" }, { "salt", "2 tsk" }, { "olivenolie", "2 spsk" }, { "smør", "15 g" }, { "løg, finthakkett", "1" }, { "soltørrede tomater i olie, finthakket", "50 g" }, { "squash, i små tern", "1" }, { "dåser hakkede tomater", "2" }, { "grøntsagsbouillon", "5 dl" }, { "timian, tørret", "1 spsk" }, { "rosmarin, tørret", "1 tsk" }, { "pasta orzo", "300 g" }, { "spinat", "150 g" }, { "feta", "100 g" }, { "sorte oliven uden sten", "80 g" }, { "håndfuld frisk oregano", "1" }, { "olivenoliee", "1 spsk" }, { "sort peber, friskkværnet", "" } }) }, { "recipe", new BsonDocument(new Dictionary<string, BsonValue> { { "procedure", "Fremgangsmåde\r\nGræske kødboller\r\nRør alle ingredienserne sammen i en stor skål. Lad\r\nfarsen hvile i minimum 30 minutter i køleskabet,\r\nog gerne et par timer.\r\nSteg kødbollerne på en varm sauterpande med\r\nolie og smør, og vend dem flere gange undervejs,\r\nså de bliver fint runde. Sæt de græske kødboller til\r\nside på en tallerken.\r\nGræsk onepot med græske kødboller og orzo\r\nKom lidt ekstra olie i sauterpanden og sauter løg,\r\nhvidløg og soltørrede tomater i nogle minutter ved\r\nmiddelvarme, til løgene er bløde og klare.\r\nTilsæt squash, hakkede tomater,\r\ngrøntsagsboullion, timian, rosmarin og orzo og rør\r\ndet godt igennem. Læg låg på og lad det simre ved\r\nlav varme til pastaen er perfekt mør – rør flere\r\ngange undervejs.\r\nRør spinat i og anret derefter de græske kødboller\r\ni retten. Smuldr feta over og fordel oliven sammen\r\n×\r\n30.06.2023 19.15 Orzo gryde med græske kødboller og grøntsager\r\nhttps://www.valdemarsro.dk/orzo-gryde-graeske-koedboller/ 2/2" } }) }, { "link", new BsonDocument(new Dictionary<string, BsonValue> { { "website", "https://www.valdemarsro.dk/orzo-gryde-graeske-koedboller/" } }) } };

count = opskrifter_dansk_cl_3.CountDocuments(filter);// vi tæller matchende documenter i vores collection, i forhold til vores filter if (count == 0) { opskrifter_dansk_cl_3.InsertOne(opskrift_dansk_3); } else { Console.WriteLine("Database 3 collection dansk tjek."); }

// Tjekker om opskriften allerede findes i den engelske samling count = recipes_english_cl_3.CountDocuments(filter2);// vi tæller matchende documenter i vores collection if (count == 0) { recipes_english_cl_3.InsertOne(opskrift_engelsk_3); } else { Console.WriteLine("Database 3 collection english tjek."); }