Example #1
0
        public async Task <ActionResult> Create(CreateDailyMenuInputModel input)
        {
            var userId = this.currentUserService.UserId;

            var isUserExists = await this.usersService.IsUserExists(userId);

            if (!isUserExists)
            {
                return(BadRequest(string.Format(UsersConstants.UserNotExists, userId)));
            }

            var isDailyMenuByDateExists = await this.dailyMenusService
                                          .CheckIfDailyMenuExistsByDate(userId, input.Date ?? DateTime.UtcNow);

            if (isDailyMenuByDateExists)
            {
                return(BadRequest(string.Format(FoodsConstants.DailyMenuExistsByDate, userId, input.Date?.ToString("MM/dd/yyyy"))));
            }

            var result = await this.dailyMenusService.CreateDailyMenu(userId, input);

            return(CreatedAtRoute("GetDailyMenuByUserAndDate",
                                  new { date = input.Date },
                                  result));
        }
        public async Task <DailyMenuDto> CreateDailyMenu(string userId, CreateDailyMenuInputModel input)
        {
            if (string.IsNullOrWhiteSpace(userId))
            {
                throw new InvalidOperationException(UsersConstants.UserNullOrWhiteSpace);
            }

            var dailyMenuForDb = input
                                 .MapTo <DailyMenu>();

            dailyMenuForDb.UserId = userId;

            var messageData = new DailyMenuCreatedMessage {
                UserId = dailyMenuForDb.UserId
            };

            var message = new Message(messageData);

            await this.Save(dailyMenuForDb, message);

            await this.publisher.Publish(messageData);

            await this.MarkMessageAsPublished(message.Id);

            var dailyMenuFromDb = await this.context
                                  .DailyMenus
                                  .Include(x => x.DailyMenuFoods)
                                  .ThenInclude(x => x.Food)
                                  .ThenInclude(x => x.FoodCategory)
                                  .FirstOrDefaultAsync(x => x.Id == dailyMenuForDb.Id);

            var dailyMenuToReturn = dailyMenuFromDb
                                    .MapTo <DailyMenuDto>();

            return(dailyMenuToReturn);
        }