Browse Source

Surrogate keys added.

pull/241/head
Sebastian Stehle 8 years ago
parent
commit
87c1cd0f0f
  1. 2
      src/Squidex.Domain.Apps.Core.Model/Freezable.cs
  2. 13
      src/Squidex.Domain.Apps.Core.Model/Rules/Triggers/ContentChangedTrigger.cs
  3. 2
      src/Squidex.Domain.Apps.Core.Model/Rules/Triggers/ContentChangedTriggerSchema.cs
  4. 1
      src/Squidex.Domain.Apps.Entities/Contents/ContentOperationContext.cs
  5. 3
      src/Squidex/Areas/Api/Controllers/Apps/AppClientsController.cs
  6. 3
      src/Squidex/Areas/Api/Controllers/Apps/AppContributorsController.cs
  7. 3
      src/Squidex/Areas/Api/Controllers/Apps/AppLanguagesController.cs
  8. 18
      src/Squidex/Areas/Api/Controllers/Assets/AssetContentController.cs
  9. 6
      src/Squidex/Areas/Api/Controllers/Assets/AssetsController.cs
  10. 16
      src/Squidex/Areas/Api/Controllers/Content/ContentsController.cs
  11. 3
      src/Squidex/Areas/Api/Controllers/Plans/AppPlansController.cs
  12. 1
      src/Squidex/Areas/Api/Controllers/Rules/Models/Actions/AlgoliaActionDto.cs
  13. 3
      src/Squidex/Areas/Api/Controllers/Schemas/SchemasController.cs
  14. 1
      src/Squidex/Config/Domain/StoreServices.cs
  15. 3
      src/Squidex/Pipeline/CommandMiddlewares/ETagCommandMiddleware.cs
  16. 1
      src/Squidex/WebStartup.cs

2
src/Squidex.Domain.Apps.Core.Model/Freezable.cs

@ -27,7 +27,7 @@ namespace Squidex.Domain.Apps.Core
}
}
public void Freeze()
public virtual void Freeze()
{
isFrozen = true;
}

13
src/Squidex.Domain.Apps.Core.Model/Rules/Triggers/ContentChangedTrigger.cs

@ -19,5 +19,18 @@ namespace Squidex.Domain.Apps.Core.Rules.Triggers
{
return visitor.Visit(this);
}
public override void Freeze()
{
base.Freeze();
if (Schemas != null)
{
foreach (var schema in Schemas)
{
schema.Freeze();
}
}
}
}
}

2
src/Squidex.Domain.Apps.Core.Model/Rules/Triggers/ContentChangedTriggerSchema.cs

@ -9,7 +9,7 @@ using System;
namespace Squidex.Domain.Apps.Core.Rules.Triggers
{
public sealed class ContentChangedTriggerSchema
public sealed class ContentChangedTriggerSchema : Freezable
{
public Guid SchemaId { get; set; }

1
src/Squidex.Domain.Apps.Entities/Contents/ContentOperationContext.cs

@ -8,7 +8,6 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Squidex.Domain.Apps.Core.EnrichContent;
using Squidex.Domain.Apps.Core.Scripting;

3
src/Squidex/Areas/Api/Controllers/Apps/AppClientsController.cs

@ -8,7 +8,6 @@
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using NSwag.Annotations;
using Squidex.Areas.Api.Controllers.Apps.Models;
using Squidex.Domain.Apps.Core.Apps;
@ -53,7 +52,7 @@ namespace Squidex.Areas.Api.Controllers.Apps
{
var response = App.Clients.Select(x => SimpleMapper.Map(x.Value, new ClientDto { Id = x.Key })).ToList();
Response.Headers["ETag"] = new StringValues(App.Version.ToString());
Response.Headers["ETag"] = App.Version.ToString();
return Ok(response);
}

3
src/Squidex/Areas/Api/Controllers/Apps/AppContributorsController.cs

@ -8,7 +8,6 @@
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using NSwag.Annotations;
using Squidex.Areas.Api.Controllers.Apps.Models;
using Squidex.Domain.Apps.Entities.Apps.Commands;
@ -55,7 +54,7 @@ namespace Squidex.Areas.Api.Controllers.Apps
var response = new ContributorsDto { Contributors = contributors, MaxContributors = appPlansProvider.GetPlanForApp(App).MaxContributors };
Response.Headers["ETag"] = new StringValues(App.Version.ToString());
Response.Headers["ETag"] = App.Version.ToString();
return Ok(response);
}

3
src/Squidex/Areas/Api/Controllers/Apps/AppLanguagesController.cs

@ -10,7 +10,6 @@ using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using NSwag.Annotations;
using Squidex.Areas.Api.Controllers.Apps.Models;
using Squidex.Domain.Apps.Core.Apps;
@ -60,7 +59,7 @@ namespace Squidex.Areas.Api.Controllers.Apps
Fallback = x.LanguageFallbacks.ToList()
})).OrderByDescending(x => x.IsMaster).ThenBy(x => x.Iso2Code).ToList();
Response.Headers["ETag"] = new StringValues(App.Version.ToString());
Response.Headers["ETag"] = App.Version.ToString();
return Ok(response);
}

18
src/Squidex/Areas/Api/Controllers/Assets/AssetContentController.cs

@ -62,24 +62,24 @@ namespace Squidex.Areas.Api.Controllers.Assets
[ApiCosts(0.5)]
public async Task<IActionResult> GetAssetContent(string app, Guid id, [FromQuery] int version = -1, [FromQuery] int? width = null, [FromQuery] int? height = null, [FromQuery] string mode = null)
{
var asset = await assetRepository.FindAssetAsync(id);
var entity = await assetRepository.FindAssetAsync(id);
if (asset == null || asset.FileVersion < version || width == 0 || height == 0)
if (entity == null || entity.FileVersion < version || width == 0 || height == 0)
{
return NotFound();
}
var assetId = asset.Id.ToString();
var assetId = entity.Id.ToString();
return new FileCallbackResult(asset.MimeType, asset.FileName, async bodyStream =>
return new FileCallbackResult(entity.MimeType, entity.FileName, async bodyStream =>
{
if (asset.IsImage && (width.HasValue || height.HasValue))
if (entity.IsImage && (width.HasValue || height.HasValue))
{
var assetSuffix = $"{width}_{height}_{mode}";
try
{
await assetStorage.DownloadAsync(assetId, asset.FileVersion, assetSuffix, bodyStream);
await assetStorage.DownloadAsync(assetId, entity.FileVersion, assetSuffix, bodyStream);
}
catch (AssetNotFoundException)
{
@ -87,13 +87,13 @@ namespace Squidex.Areas.Api.Controllers.Assets
{
using (var destinationStream = GetTempStream())
{
await assetStorage.DownloadAsync(assetId, asset.FileVersion, null, sourceStream);
await assetStorage.DownloadAsync(assetId, entity.FileVersion, null, sourceStream);
sourceStream.Position = 0;
await assetThumbnailGenerator.CreateThumbnailAsync(sourceStream, destinationStream, width, height, mode);
destinationStream.Position = 0;
await assetStorage.UploadAsync(assetId, asset.FileVersion, assetSuffix, destinationStream);
await assetStorage.UploadAsync(assetId, entity.FileVersion, assetSuffix, destinationStream);
destinationStream.Position = 0;
await destinationStream.CopyToAsync(bodyStream);
@ -103,7 +103,7 @@ namespace Squidex.Areas.Api.Controllers.Assets
}
else
{
await assetStorage.DownloadAsync(assetId, asset.FileVersion, null, bodyStream);
await assetStorage.DownloadAsync(assetId, entity.FileVersion, null, bodyStream);
}
});
}

6
src/Squidex/Areas/Api/Controllers/Assets/AssetsController.cs

@ -12,7 +12,6 @@ using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Options;
using Microsoft.Extensions.Primitives;
using NSwag.Annotations;
using Squidex.Areas.Api.Controllers.Assets.Models;
using Squidex.Domain.Apps.Entities.Apps.Services;
@ -104,6 +103,8 @@ namespace Squidex.Areas.Api.Controllers.Assets
Items = assets.Select(x => SimpleMapper.Map(x, new AssetDto { FileType = x.FileName.FileType() })).ToArray()
};
Response.Headers["Surrogate-Key"] = string.Join(" ", response.Items.Select(x => x.Id));
return Ok(response);
}
@ -132,7 +133,8 @@ namespace Squidex.Areas.Api.Controllers.Assets
var response = SimpleMapper.Map(entity, new AssetDto { FileType = entity.FileName.FileType() });
Response.Headers["ETag"] = new StringValues(entity.Version.ToString());
Response.Headers["ETag"] = entity.Version.ToString();
Response.Headers["Surrogate-Key"] = entity.Id.ToString();
return Ok(response);
}

16
src/Squidex/Areas/Api/Controllers/Content/ContentsController.cs

@ -10,7 +10,6 @@ using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using NSwag.Annotations;
using Squidex.Areas.Api.Controllers.Contents.Models;
using Squidex.Domain.Apps.Core.Contents;
@ -106,6 +105,8 @@ namespace Squidex.Areas.Api.Controllers.Contents
}).ToArray()
};
Response.Headers["Surrogate-Key"] = string.Join(" ", response.Items.Select(x => x.Id));
return Ok(response);
}
@ -115,18 +116,19 @@ namespace Squidex.Areas.Api.Controllers.Contents
[ApiCosts(1)]
public async Task<IActionResult> GetContent(string name, Guid id)
{
var content = await contentQuery.FindContentAsync(App, name, User, id);
var (schema, entity) = await contentQuery.FindContentAsync(App, name, User, id);
var response = SimpleMapper.Map(content.Content, new ContentDto());
var response = SimpleMapper.Map(entity, new ContentDto());
if (content.Content.Data != null)
if (entity.Data != null)
{
var isFrontendClient = User.IsFrontendClient();
response.Data = content.Content.Data.ToApiModel(content.Schema.SchemaDef, App.LanguagesConfig, !isFrontendClient);
response.Data = entity.Data.ToApiModel(schema.SchemaDef, App.LanguagesConfig, !isFrontendClient);
}
Response.Headers["ETag"] = new StringValues(content.Content.Version.ToString());
Response.Headers["ETag"] = entity.Version.ToString();
Response.Headers["Surrogate-Key"] = entity.Id.ToString();
return Ok(response);
}
@ -148,7 +150,7 @@ namespace Squidex.Areas.Api.Controllers.Contents
response.Data = content.Content.Data.ToApiModel(content.Schema.SchemaDef, App.LanguagesConfig, !isFrontendClient);
}
Response.Headers["ETag"] = new StringValues(version.ToString());
Response.Headers["ETag"] = version.ToString();
return Ok(response.Data);
}

3
src/Squidex/Areas/Api/Controllers/Plans/AppPlansController.cs

@ -8,7 +8,6 @@
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using NSwag.Annotations;
using Squidex.Areas.Api.Controllers.Plans.Models;
using Squidex.Domain.Apps.Entities.Apps.Commands;
@ -65,7 +64,7 @@ namespace Squidex.Areas.Api.Controllers.Plans
HasPortal = appPlansBillingManager.HasPortal
};
Response.Headers["ETag"] = new StringValues(App.Version.ToString());
Response.Headers["ETag"] = App.Version.ToString();
return Ok(response);
}

1
src/Squidex/Areas/Api/Controllers/Rules/Models/Actions/AlgoliaActionDto.cs

@ -5,7 +5,6 @@
// All rights reserved. Licensed under the MIT license.
// ==========================================================================
using System;
using System.ComponentModel.DataAnnotations;
using NJsonSchema.Annotations;
using Squidex.Domain.Apps.Core.Rules;

3
src/Squidex/Areas/Api/Controllers/Schemas/SchemasController.cs

@ -9,7 +9,6 @@ using System;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using NSwag.Annotations;
using Squidex.Areas.Api.Controllers.Schemas.Models;
using Squidex.Areas.Api.Controllers.Schemas.Models.Converters;
@ -96,7 +95,7 @@ namespace Squidex.Areas.Api.Controllers.Schemas
var response = entity.ToDetailsModel();
Response.Headers["ETag"] = new StringValues(entity.Version.ToString());
Response.Headers["ETag"] = entity.Version.ToString();
return Ok(response);
}

1
src/Squidex/Config/Domain/StoreServices.cs

@ -16,7 +16,6 @@ using Newtonsoft.Json;
using Squidex.Domain.Apps.Entities;
using Squidex.Domain.Apps.Entities.Apps.Repositories;
using Squidex.Domain.Apps.Entities.Apps.State;
using Squidex.Domain.Apps.Entities.Assets.Edm;
using Squidex.Domain.Apps.Entities.Assets.Repositories;
using Squidex.Domain.Apps.Entities.Assets.State;
using Squidex.Domain.Apps.Entities.Contents.Repositories;

3
src/Squidex/Pipeline/CommandMiddlewares/ETagCommandMiddleware.cs

@ -9,7 +9,6 @@ using System;
using System.Globalization;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Primitives;
using Squidex.Infrastructure;
using Squidex.Infrastructure.Commands;
@ -42,7 +41,7 @@ namespace Squidex.Pipeline.CommandMiddlewares
if (context.Result<object>() is EntitySavedResult result)
{
httpContextAccessor.HttpContext.Response.Headers["ETag"] = new StringValues(result.Version.ToString());
httpContextAccessor.HttpContext.Response.Headers["ETag"] = result.Version.ToString();
}
}
}

1
src/Squidex/WebStartup.cs

@ -6,7 +6,6 @@
// ==========================================================================
using System;
using Ben.Diagnostics;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;

Loading…
Cancel
Save