diff --git a/R-Meals Test (Public).postman_collection.json b/R-Meals Test (Public).postman_collection.json index 634a9ef..ac9f318 100644 --- a/R-Meals Test (Public).postman_collection.json +++ b/R-Meals Test (Public).postman_collection.json @@ -774,6 +774,39 @@ } }, "response": [] + }, + { + "name": "ADV Get saul's all meals", + "request": { + "method": "GET", + "header": [ + { + "key": "Content-Type", + "name": "Content-Type", + "type": "text", + "value": "application/json" + }, + { + "key": "Authorization", + "type": "text", + "value": "Bearer {{netAppApi_token}}" + } + ], + "url": { + "raw": "https://{{netAppApi_domain}}/Users/4/meals/advanced", + "protocol": "https", + "host": [ + "{{netAppApi_domain}}" + ], + "path": [ + "Users", + "4", + "meals", + "advanced" + ] + } + }, + "response": [] } ], "protocolProfileBehavior": {}, diff --git a/RMeals-server-dotNet/src/RMealsAPI/Features/Meals/MealsController.cs b/RMeals-server-dotNet/src/RMealsAPI/Features/Meals/MealsController.cs index 39b1b7c..12d4c7b 100644 --- a/RMeals-server-dotNet/src/RMealsAPI/Features/Meals/MealsController.cs +++ b/RMeals-server-dotNet/src/RMealsAPI/Features/Meals/MealsController.cs @@ -234,7 +234,7 @@ select new // In memory grouping due EF core limitations var mealsDailySummary = mealsDailySummaryQuery.ToList(); var meals = mealsTimeFilteredQuery.ToList(); - + var groupQuery = from ms in mealsDailySummary select new MealDailySummaryDto() @@ -243,15 +243,15 @@ select new MealsCount = ms.MealsCount, DailyCaloriesConsumed = ms.DailyCaloriesConsumed, DailyCaloriesExceeded = ms.DailyCaloriesExceeded, - Meals = - from m in meals + Meals = + from m in meals where m.Date.Date == ms.Day - select new MealDailySummaryDto.MealDailyItemDto() + select new MealDailySummaryDto.MealDailyItemDto() { Id = m.Id, Date = m.Date, Calories = m.Calories, - Description = m.Description + Description = m.Description } }; @@ -263,6 +263,42 @@ select new var result = groupQuery; // .ToList(); return Ok(result); } + + /// + /// Gets a list of mails (with possible filtering). + /// + /// + /// + [HttpGet] + [Route("advanced")] + [ODataQueryableAttribute] + public async Task>> GetMealsAdvanced( + long userId) + { + var user = dbContext.Set().Include(u => u.Profile).First(u => u.Id == userId); + + var mealsDailySummaryQuery = + from u in dbContext.Set() + from m in u.Meals + group m by m.Date.Date into g + select new MealDailySummaryDto() + { + Day = g.Key, + MealsCount = g.Count(), + DailyCaloriesConsumed = g.Sum(m => m.Calories), + DailyCaloriesExceeded = g.Sum(m => m.Calories) > user.Profile.AllowedCalories, + Meals = g + .Select(m => new MealDailySummaryDto.MealDailyItemDto() + { + Id = m.Id, + Date = m.Date, + Calories = m.Calories, + Description = m.Description + }) + }; + + return Ok(mealsDailySummaryQuery); + } } }