Esempio n. 1
0
        public async Task <ActionResult <SaveSettingsResponse> > Save([FromBody] SettingsForSave settingsForSave, [FromQuery] SaveArguments args)
        {
            // Authorized access (Criteria are not supported here)
            var updatePermissions = await _repo.UserPermissions(Constants.Update, "settings");

            if (!updatePermissions.Any())
            {
                return(StatusCode(403));
            }

            try
            {
                // Trim all string fields just in case
                settingsForSave.TrimStringProperties();

                // Validate
                ValidateAndPreprocessSettings(settingsForSave);

                if (!ModelState.IsValid)
                {
                    return(UnprocessableEntity(ModelState));
                }

                // Persist
                await _repo.Settings__Save(settingsForSave);

                // Update the settings cache
                var tenantId          = _tenantIdAccessor.GetTenantId();
                var settingsForClient = await LoadSettingsForClient(_repo);

                _settingsCache.SetSettings(tenantId, settingsForClient);

                // If requested, return the updated entity
                if (args.ReturnEntities ?? false)
                {
                    // If requested, return the same response you would get from a GET
                    var res = await GetImpl(new GetByIdArguments { Expand = args.Expand });

                    var result = new SaveSettingsResponse
                    {
                        Entities          = res.Entities,
                        Result            = res.Result,
                        SettingsForClient = settingsForClient
                    };

                    return(result);
                }
                else
                {
                    return(Ok());
                }
            }
            catch (Exception ex)
            {
                _logger.LogError($"Error: {ex.Message} {ex.StackTrace}");
                return(BadRequest(ex.Message));
            }
        }
Esempio n. 2
0
        public async Task <ActionResult <SaveSettingsResponse <TSettings> > > Save([FromBody] TSettingsForSave settingsForSave, [FromQuery] SaveArguments args)
        {
            var _service = GetSettingsService();

            var(settings, settingsForClient) = await _service.SaveSettings(settingsForSave, args);

            var singleton       = new TSettings[] { settings };
            var relatedEntities = ControllerUtilities.Flatten(singleton, cancellation: default);

            var result = new SaveSettingsResponse <TSettings>
            {
                Result            = settings,
                RelatedEntities   = relatedEntities,
                SettingsForClient = settingsForClient
            };

            return(Ok(result));
        }
Esempio n. 3
0
        public async Task <ActionResult <SaveSettingsResponse> > Save([FromBody] SettingsForSave settingsForSave, [FromQuery] SaveArguments args)
        {
            // Authorized access (Criteria are not supported here)
            var updatePermissions = await ControllerUtilities.GetPermissions(_db.AbstractPermissions, PermissionLevel.Update, "settings");

            if (!updatePermissions.Any())
            {
                return(StatusCode(403));
            }

            try
            {
                // Trim all string fields just in case
                settingsForSave.TrimStringProperties();

                // Validate
                ValidateAndPreprocessSettings(settingsForSave);

                if (!ModelState.IsValid)
                {
                    return(UnprocessableEntity(ModelState));
                }

                // Persist
                M.Settings mSettings = await _db.Settings.FirstOrDefaultAsync();

                if (mSettings == null)
                {
                    // This should never happen
                    return(BadRequest("Settings have not been initialized"));
                }

                _mapper.Map(settingsForSave, mSettings);

                mSettings.ModifiedAt      = DateTimeOffset.Now;
                mSettings.ModifiedById    = _tenantInfo.GetCurrentInfo().UserId.Value;
                mSettings.SettingsVersion = Guid.NewGuid(); // prompts clients to refresh

                await _db.SaveChangesAsync();

                // If requested, return the updated entity
                if (args.ReturnEntities ?? false)
                {
                    // If requested, return the same response you would get from a GET
                    var res = await GetImpl(new GetByIdArguments { Expand = args.Expand });

                    var result = new SaveSettingsResponse
                    {
                        CollectionName    = res.CollectionName,
                        Entity            = res.Entity,
                        RelatedEntities   = res.RelatedEntities,
                        SettingsForClient = await GetForClientImpl()
                    };

                    return(result);
                }
                else
                {
                    return(Ok());
                }
            }
            catch (Exception ex)
            {
                _logger.LogError($"Error: {ex.Message} {ex.StackTrace}");
                return(BadRequest(ex.Message));
            }
        }