Example #1
0
        /// <inheritdoc />
        /// <summary>
        /// Add or update dashboard configuration
        /// </summary>
        /// <returns></returns>
        public virtual async Task <ResultModel <IEnumerable <DashboardRowViewModel> > > AddOrUpdateDashboardConfigurationAsync(DashBoardConfigurationViewModel configuration)
        {
            var result = new ResultModel <IEnumerable <DashboardRowViewModel> >();

            if (configuration == null || configuration.DashboardId.HasValue.Negate())
            {
                result.Errors.Add(new ErrorModel(string.Empty, nameof(ArgumentNullException)));
                return(result);
            }

            var dashboard = await _context.Dashboards
                            .Include(x => x.Rows)
                            .FirstOrDefaultAsync(x => x.Id.Equals(configuration.DashboardId));

            if (dashboard == null)
            {
                result.Errors.Add(new ErrorModel(string.Empty, nameof(NotFoundObjectResult)));
                return(result);
            }

            if (configuration.Rows.Any().Negate())
            {
                result.IsSuccess = true;
                return(result);
            }

            var rowsConf = new List <DashboardRowViewModel>();

            foreach (var row in configuration.Rows)
            {
                var existentRow = dashboard.Rows.FirstOrDefault(x => x.Id.Equals(row.RowId));
                if (row.RowId.HasValue && existentRow != null)
                {
                    existentRow.Order = row.Order;
                    _context.Update(existentRow);
                    await AddOrUpdateWidgetsToRowAsync(row);
                }
                else
                {
                    var newRow = new Row
                    {
                        Order       = row.Order,
                        DashboardId = dashboard.Id
                    };

                    rowsConf.Add(new DashboardRowViewModel
                    {
                        RowId = newRow.Id,
                        Order = newRow.Order
                    });
                    await _context.Rows.AddAsync(newRow);

                    await _context.PushAsync();

                    row.RowId = newRow.Id;
                    await AddOrUpdateWidgetsToRowAsync(row, true);
                }
            }

            var dbResult = await _context.PushAsync();

            if (dbResult.IsSuccess.Negate())
            {
                result.Errors = dbResult.Errors;
                return(result);
            }

            result.Result    = rowsConf;
            result.IsSuccess = true;
            return(result);
        }