From 5e0a31d9778bc83374a7d5baf9937ce789e87b79 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Sun, 27 Nov 2016 14:15:21 +0100 Subject: [PATCH] Small bugs fixes --- Squidex.sln.DotSettings | 3 + src/Squidex.Events/Schemas/FieldDeleted.cs | 2 +- src/Squidex.Events/Schemas/SchemaDeleted.cs | 2 +- src/Squidex.Events/Schemas/SchemaUpdated.cs | 2 +- .../Schemas/MongoSchemaEntity.cs | 2 +- .../Schemas/MongoSchemaRepository.cs | 4 +- .../Schemas/Commands/AddField.cs | 15 ++-- .../Schemas/Commands/UpdateField.cs | 8 +-- .../Schemas/SchemaCommandHandler.cs | 71 ++++++------------- .../Schemas/SchemaDomainObject.cs | 12 ++-- src/Squidex/Config/Domain/WriteModule.cs | 8 +-- .../Config/EventStore/EventStoreModule.cs | 6 +- .../Api/Apps/Models/AssignContributorDto.cs | 2 +- .../Api/Apps/Models/AttachClientDto.cs | 2 +- .../Api/Apps/Models/ConfigureLanguagesDto.cs | 2 +- .../Api/Schemas/Models/AddFieldDto.cs | 28 ++++++++ .../Models/Converters/SchemaConverter.cs | 36 ++++------ .../Api/Schemas/Models/CreateSchemaDto.cs | 2 +- .../Api/Schemas/Models/FieldDto.cs | 32 +++------ .../Api/Schemas/Models/FieldPropertiesDto.cs | 48 +++++++++++++ .../Api/Schemas/Models/Fields/NumberField.cs | 2 +- .../Api/Schemas/Models/Fields/StringField.cs | 2 +- .../Api/Schemas/Models/UpdateFieldDto.cs | 15 ++++ .../Api/Schemas/SchemaFieldsController.cs | 17 ++--- .../Api/Schemas/SchemasController.cs | 2 +- src/Squidex/appsettings.json | 2 +- src/Squidex/project.json | 2 +- src/Squidex/web.config | 6 +- 28 files changed, 181 insertions(+), 154 deletions(-) create mode 100644 src/Squidex/Controllers/Api/Schemas/Models/AddFieldDto.cs create mode 100644 src/Squidex/Controllers/Api/Schemas/Models/FieldPropertiesDto.cs create mode 100644 src/Squidex/Controllers/Api/Schemas/Models/UpdateFieldDto.cs diff --git a/Squidex.sln.DotSettings b/Squidex.sln.DotSettings index 0a5047168..5431400f5 100644 --- a/Squidex.sln.DotSettings +++ b/Squidex.sln.DotSettings @@ -91,5 +91,8 @@ <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> True + True + True + True True True \ No newline at end of file diff --git a/src/Squidex.Events/Schemas/FieldDeleted.cs b/src/Squidex.Events/Schemas/FieldDeleted.cs index 14eb2d338..c8311210e 100644 --- a/src/Squidex.Events/Schemas/FieldDeleted.cs +++ b/src/Squidex.Events/Schemas/FieldDeleted.cs @@ -11,7 +11,7 @@ using Squidex.Infrastructure.CQRS.Events; namespace Squidex.Events.Schemas { - [TypeName("FieldDeleted")] + [TypeName("FieldDeletedEvent")] public class FieldDeleted : IEvent { public long FieldId { get; set; } diff --git a/src/Squidex.Events/Schemas/SchemaDeleted.cs b/src/Squidex.Events/Schemas/SchemaDeleted.cs index 34387aecc..8cc5a6ade 100644 --- a/src/Squidex.Events/Schemas/SchemaDeleted.cs +++ b/src/Squidex.Events/Schemas/SchemaDeleted.cs @@ -11,7 +11,7 @@ using Squidex.Infrastructure.CQRS.Events; namespace Squidex.Events.Schemas { - [TypeName("SchemaDeleted")] + [TypeName("SchemaDeletedEvent")] public class SchemaDeleted : IEvent { } diff --git a/src/Squidex.Events/Schemas/SchemaUpdated.cs b/src/Squidex.Events/Schemas/SchemaUpdated.cs index 490691f9c..58a107248 100644 --- a/src/Squidex.Events/Schemas/SchemaUpdated.cs +++ b/src/Squidex.Events/Schemas/SchemaUpdated.cs @@ -12,7 +12,7 @@ using Squidex.Infrastructure.CQRS.Events; namespace Squidex.Events.Schemas { - [TypeName("SchemaUpdated")] + [TypeName("SchemaUpdatedEvent")] public class SchemaUpdated : IEvent { public SchemaProperties Properties { get; set; } diff --git a/src/Squidex.Store.MongoDb/Schemas/MongoSchemaEntity.cs b/src/Squidex.Store.MongoDb/Schemas/MongoSchemaEntity.cs index a77a62039..e5b2712ca 100644 --- a/src/Squidex.Store.MongoDb/Schemas/MongoSchemaEntity.cs +++ b/src/Squidex.Store.MongoDb/Schemas/MongoSchemaEntity.cs @@ -43,7 +43,7 @@ namespace Squidex.Store.MongoDb.Schemas public Lazy DeserializeSchema(SchemaJsonSerializer serializer) { - schema = new Lazy(() => schema != null ? null : serializer.Deserialize(Schema.ToJToken())); + schema = new Lazy(() => Schema != null ? serializer.Deserialize(Schema.ToJToken()) : null); return schema; } diff --git a/src/Squidex.Store.MongoDb/Schemas/MongoSchemaRepository.cs b/src/Squidex.Store.MongoDb/Schemas/MongoSchemaRepository.cs index aff3a978a..5e60fb92c 100644 --- a/src/Squidex.Store.MongoDb/Schemas/MongoSchemaRepository.cs +++ b/src/Squidex.Store.MongoDb/Schemas/MongoSchemaRepository.cs @@ -137,7 +137,9 @@ namespace Squidex.Store.MongoDb.Schemas public Task On(SchemaCreated @event, EnvelopeHeaders headers) { - return Collection.CreateAsync(headers, s => SimpleMapper.Map(@event, s)); + var schema = Schema.Create(@event.Name, @event.Properties); + + return Collection.CreateAsync(headers, s => { Serialize(s, schema); SimpleMapper.Map(@event, s); }); } public Task On(Envelope @event) diff --git a/src/Squidex.Write/Schemas/Commands/AddField.cs b/src/Squidex.Write/Schemas/Commands/AddField.cs index 29e197906..23aaa52f7 100644 --- a/src/Squidex.Write/Schemas/Commands/AddField.cs +++ b/src/Squidex.Write/Schemas/Commands/AddField.cs @@ -7,7 +7,7 @@ // ========================================================================== using System.Collections.Generic; -using Newtonsoft.Json.Linq; +using Squidex.Core.Schemas; using Squidex.Infrastructure; namespace Squidex.Write.Schemas.Commands @@ -16,9 +16,7 @@ namespace Squidex.Write.Schemas.Commands { public string Name { get; set; } - public string Type { get; set; } - - public JToken Properties { get; set; } + public FieldProperties Properties { get; set; } public void Validate(IList errors) { @@ -27,14 +25,9 @@ namespace Squidex.Write.Schemas.Commands errors.Add(new ValidationError("DisplayName must be a valid slug", nameof(Name))); } - if (string.IsNullOrWhiteSpace(Type)) - { - errors.Add(new ValidationError("Type must be specified", nameof(Type))); - } - - if (Properties != null && !(Properties is JObject)) + if (Properties == null) { - errors.Add(new ValidationError("Properties must be a object or null.", nameof(Properties))); + errors.Add(new ValidationError("Properties must be defined.", nameof(Properties))); } } } diff --git a/src/Squidex.Write/Schemas/Commands/UpdateField.cs b/src/Squidex.Write/Schemas/Commands/UpdateField.cs index 03e3aa14d..7b0d0492b 100644 --- a/src/Squidex.Write/Schemas/Commands/UpdateField.cs +++ b/src/Squidex.Write/Schemas/Commands/UpdateField.cs @@ -7,7 +7,7 @@ // ========================================================================== using System.Collections.Generic; -using Newtonsoft.Json.Linq; +using Squidex.Core.Schemas; using Squidex.Infrastructure; namespace Squidex.Write.Schemas.Commands @@ -16,13 +16,13 @@ namespace Squidex.Write.Schemas.Commands { public long FieldId { get; set; } - public JToken Properties { get; set; } + public FieldProperties Properties { get; set; } public void Validate(IList errors) { - if (!(Properties is JObject)) + if (Properties == null) { - errors.Add(new ValidationError("Properties must be a object.", nameof(Properties))); + errors.Add(new ValidationError("Properties must be defined.", nameof(Properties))); } } } diff --git a/src/Squidex.Write/Schemas/SchemaCommandHandler.cs b/src/Squidex.Write/Schemas/SchemaCommandHandler.cs index 1b0fd6b30..96c282131 100644 --- a/src/Squidex.Write/Schemas/SchemaCommandHandler.cs +++ b/src/Squidex.Write/Schemas/SchemaCommandHandler.cs @@ -6,11 +6,8 @@ // All rights reserved. // ========================================================================== -using System; +using System.Linq; using System.Threading.Tasks; -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; -using Squidex.Core.Schemas; using Squidex.Infrastructure; using Squidex.Infrastructure.CQRS.Commands; using Squidex.Infrastructure.Dispatching; @@ -21,29 +18,18 @@ namespace Squidex.Write.Schemas { public class SchemaCommandHandler : CommandHandler { - private readonly FieldRegistry registry; private readonly ISchemaProvider schemaProvider; - private readonly JsonSerializer serializer; public SchemaCommandHandler( - FieldRegistry registry, ISchemaProvider schemaProvider, IDomainObjectFactory domainObjectFactory, - IDomainObjectRepository domainObjectRepository, - JsonSerializer serializer) + IDomainObjectRepository domainObjectRepository) : base(domainObjectFactory, domainObjectRepository) { - this.registry = registry; - this.serializer = serializer; this.schemaProvider = schemaProvider; } - public override Task HandleAsync(CommandContext context) - { - return context.IsHandled ? Task.FromResult(false) : this.DispatchActionAsync(context.Command); - } - - public async Task On(CreateSchema command) + public async Task On(CreateSchema command, CommandContext context) { if (await schemaProvider.FindSchemaIdByNameAsync(command.AppId, command.Name) != null) { @@ -54,70 +40,59 @@ namespace Squidex.Write.Schemas await CreateAsync(command, s => s.Create(command)); } - public Task On(DeleteSchema command) + public Task On(AddField command, CommandContext context) + { + return UpdateAsync(command, s => + { + s.AddField(command); + + context.Succeed(s.Schema.Fields.Values.First(x => x.Name == command.Name).Id); + }); + } + + public Task On(DeleteSchema command, CommandContext context) { return UpdateAsync(command, s => s.Delete()); } - public Task On(DeleteField command) + public Task On(DeleteField command, CommandContext context) { return UpdateAsync(command, s => s.DeleteField(command.FieldId)); } - public Task On(DisableField command) + public Task On(DisableField command, CommandContext context) { return UpdateAsync(command, s => s.DisableField(command.FieldId)); } - public Task On(EnableField command) + public Task On(EnableField command, CommandContext context) { return UpdateAsync(command, s => s.EnableField(command.FieldId)); } - public Task On(HideField command) + public Task On(HideField command, CommandContext context) { return UpdateAsync(command, s => s.HideField(command.FieldId)); } - public Task On(ShowField command) + public Task On(ShowField command, CommandContext context) { return UpdateAsync(command, s => s.ShowField(command.FieldId)); } - public Task On(UpdateSchema command) + public Task On(UpdateSchema command, CommandContext context) { return UpdateAsync(command, s => s.Update(command)); } - public Task On(AddField command) - { - var propertiesType = registry.FindByTypeName(command.Type).PropertiesType; - var propertiesValue = CreateProperties(command.Properties, propertiesType); - - return UpdateAsync(command, s => s.AddField(command, propertiesValue)); - } - public Task On(UpdateField command) { - return UpdateAsync(command, s => - { - var field = s.Schema.Fields.GetOrDefault(command.FieldId); - - if (field == null) - { - throw new DomainObjectNotFoundException(command.FieldId.ToString(), typeof(Field)); - } - - var propertiesType = registry.FindByPropertiesType(field.RawProperties.GetType()).PropertiesType; - var propertiesValue = CreateProperties(command.Properties, propertiesType); - - s.UpdateField(command, propertiesValue); - }); + return UpdateAsync(command, s => { s.UpdateField(command); }); } - private FieldProperties CreateProperties(JToken token, Type type) + public override Task HandleAsync(CommandContext context) { - return (FieldProperties)token.ToObject(type, serializer); + return context.IsHandled ? Task.FromResult(false) : this.DispatchActionAsync(context.Command, context); } } } diff --git a/src/Squidex.Write/Schemas/SchemaDomainObject.cs b/src/Squidex.Write/Schemas/SchemaDomainObject.cs index 0ca0eee1b..e8f27651d 100644 --- a/src/Squidex.Write/Schemas/SchemaDomainObject.cs +++ b/src/Squidex.Write/Schemas/SchemaDomainObject.cs @@ -103,26 +103,24 @@ namespace Squidex.Write.Schemas isDeleted = true; } - public SchemaDomainObject AddField(AddField command, FieldProperties properties) + public SchemaDomainObject AddField(AddField command) { Guard.Valid(command, nameof(command), () => $"Cannot add field to schema {Id}"); - Guard.NotNull(properties, nameof(properties)); VerifyCreatedAndNotDeleted(); - - RaiseEvent(new FieldAdded { FieldId = ++totalFields, Name = command.Name, Properties = properties }); + + RaiseEvent(SimpleMapper.Map(command, new FieldAdded { FieldId = ++totalFields })); return this; } - public SchemaDomainObject UpdateField(UpdateField command, FieldProperties properties) + public SchemaDomainObject UpdateField(UpdateField command) { Guard.Valid(command, nameof(command), () => $"Cannot update schema '{schema.Name} ({Id})'"); - Guard.NotNull(properties, nameof(properties)); VerifyCreatedAndNotDeleted(); - RaiseEvent(new FieldUpdated { FieldId = command.FieldId, Properties = properties }); + RaiseEvent(SimpleMapper.Map(command, new FieldUpdated())); return this; } diff --git a/src/Squidex/Config/Domain/WriteModule.cs b/src/Squidex/Config/Domain/WriteModule.cs index 6fa0e768b..88086db81 100644 --- a/src/Squidex/Config/Domain/WriteModule.cs +++ b/src/Squidex/Config/Domain/WriteModule.cs @@ -18,10 +18,6 @@ namespace Squidex.Config.Domain { protected override void Load(ContainerBuilder builder) { - builder.RegisterType() - .As() - .SingleInstance(); - builder.RegisterType() .As() .SingleInstance(); @@ -34,6 +30,10 @@ namespace Squidex.Config.Domain .As() .SingleInstance(); + builder.RegisterType() + .As() + .SingleInstance(); + builder.RegisterType() .As() .SingleInstance(); diff --git a/src/Squidex/Config/EventStore/EventStoreModule.cs b/src/Squidex/Config/EventStore/EventStoreModule.cs index dffe83f13..8da9846b7 100644 --- a/src/Squidex/Config/EventStore/EventStoreModule.cs +++ b/src/Squidex/Config/EventStore/EventStoreModule.cs @@ -49,11 +49,7 @@ namespace Squidex.Config.EventStore var options = context.Resolve>().Value; return new DefaultNameResolver(options.Prefix); - }).SingleInstance(); - - builder.Register(c => new DefaultNameResolver("squidex")) - .As() - .SingleInstance(); + }).As().SingleInstance(); } } } diff --git a/src/Squidex/Controllers/Api/Apps/Models/AssignContributorDto.cs b/src/Squidex/Controllers/Api/Apps/Models/AssignContributorDto.cs index 7c0c5201c..de1e9b98d 100644 --- a/src/Squidex/Controllers/Api/Apps/Models/AssignContributorDto.cs +++ b/src/Squidex/Controllers/Api/Apps/Models/AssignContributorDto.cs @@ -13,7 +13,7 @@ using System.ComponentModel.DataAnnotations; namespace Squidex.Controllers.Api.Apps.Models { - public class AssignContributorDto + public sealed class AssignContributorDto { /// /// The id of the user to add to the app (GUID). diff --git a/src/Squidex/Controllers/Api/Apps/Models/AttachClientDto.cs b/src/Squidex/Controllers/Api/Apps/Models/AttachClientDto.cs index 1440dd02d..bf7d779b3 100644 --- a/src/Squidex/Controllers/Api/Apps/Models/AttachClientDto.cs +++ b/src/Squidex/Controllers/Api/Apps/Models/AttachClientDto.cs @@ -10,7 +10,7 @@ using System.ComponentModel.DataAnnotations; namespace Squidex.Controllers.Api.Apps.Models { - public class AttachClientDto + public sealed class AttachClientDto { /// /// The name of the client. diff --git a/src/Squidex/Controllers/Api/Apps/Models/ConfigureLanguagesDto.cs b/src/Squidex/Controllers/Api/Apps/Models/ConfigureLanguagesDto.cs index dba0d38fb..2978cfdf7 100644 --- a/src/Squidex/Controllers/Api/Apps/Models/ConfigureLanguagesDto.cs +++ b/src/Squidex/Controllers/Api/Apps/Models/ConfigureLanguagesDto.cs @@ -11,7 +11,7 @@ using Squidex.Infrastructure; namespace Squidex.Controllers.Api.Apps.Models { - public class ConfigureLanguagesDto + public sealed class ConfigureLanguagesDto { /// /// The list of languages to configure the app. diff --git a/src/Squidex/Controllers/Api/Schemas/Models/AddFieldDto.cs b/src/Squidex/Controllers/Api/Schemas/Models/AddFieldDto.cs new file mode 100644 index 000000000..e22a82ff4 --- /dev/null +++ b/src/Squidex/Controllers/Api/Schemas/Models/AddFieldDto.cs @@ -0,0 +1,28 @@ +// ========================================================================== +// AddFieldDto.cs +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex Group +// All rights reserved. +// ========================================================================== + +using System.ComponentModel.DataAnnotations; + +namespace Squidex.Controllers.Api.Schemas.Models +{ + public sealed class AddFieldDto + { + /// + /// The name of the field. Must be unique within the schema. + /// + [Required] + [RegularExpression("^[a-z0-9]+(\\-[a-z0-9]+)*$")] + public string Name { get; set; } + + /// + /// The field properties. + /// + [Required] + public FieldPropertiesDto Properties { get; set; } + } +} diff --git a/src/Squidex/Controllers/Api/Schemas/Models/Converters/SchemaConverter.cs b/src/Squidex/Controllers/Api/Schemas/Models/Converters/SchemaConverter.cs index de149a74e..18fd38f39 100644 --- a/src/Squidex/Controllers/Api/Schemas/Models/Converters/SchemaConverter.cs +++ b/src/Squidex/Controllers/Api/Schemas/Models/Converters/SchemaConverter.cs @@ -17,31 +17,15 @@ namespace Squidex.Controllers.Api.Schemas.Models.Converters { public static class SchemaConverter { - private static readonly Dictionary> Factories = new Dictionary> + private static readonly Dictionary> Factories = new Dictionary> { { - typeof(NumberField), - field => - { - var dto = new Dtos.NumberField(); - - SimpleMapper.Map(field, dto); - SimpleMapper.Map((NumberFieldProperties)field.RawProperties, dto); - - return dto; - } + typeof(NumberFieldProperties), + p => SimpleMapper.Map((NumberFieldProperties)p, new Dtos.NumberField()) }, { - typeof(StringField), - field => - { - var dto = new Dtos.StringField(); - - SimpleMapper.Map(field, dto); - SimpleMapper.Map((StringFieldProperties)field.RawProperties, dto); - - return dto; - } + typeof(StringFieldProperties), + p => SimpleMapper.Map((StringFieldProperties)p, new Dtos.StringField()) } }; @@ -57,7 +41,15 @@ namespace Squidex.Controllers.Api.Schemas.Models.Converters foreach (var field in entity.Schema.Fields.Values) { - var fieldDto = Factories[field.RawProperties.GetType()](field); + var fieldPropertiesDto = Factories[field.RawProperties.GetType()](field.RawProperties); + + var fieldDto = new FieldDto + { + Name = field.Name, + IsHidden = field.IsHidden, + IsDisabled = field.IsDisabled, + Properties = fieldPropertiesDto + }; dto.Fields.Add(fieldDto); } diff --git a/src/Squidex/Controllers/Api/Schemas/Models/CreateSchemaDto.cs b/src/Squidex/Controllers/Api/Schemas/Models/CreateSchemaDto.cs index adb3755a1..7a52afacd 100644 --- a/src/Squidex/Controllers/Api/Schemas/Models/CreateSchemaDto.cs +++ b/src/Squidex/Controllers/Api/Schemas/Models/CreateSchemaDto.cs @@ -10,7 +10,7 @@ using System.ComponentModel.DataAnnotations; namespace Squidex.Controllers.Api.Schemas.Models { - public class CreateSchemaDto + public sealed class CreateSchemaDto { /// /// The name of the schema. diff --git a/src/Squidex/Controllers/Api/Schemas/Models/FieldDto.cs b/src/Squidex/Controllers/Api/Schemas/Models/FieldDto.cs index e9fae2f05..ff6ffbd93 100644 --- a/src/Squidex/Controllers/Api/Schemas/Models/FieldDto.cs +++ b/src/Squidex/Controllers/Api/Schemas/Models/FieldDto.cs @@ -7,17 +7,10 @@ // ========================================================================== using System.ComponentModel.DataAnnotations; -using System.Runtime.Serialization; -using Newtonsoft.Json; -using NJsonSchema.Converters; -using Squidex.Core.Schemas; namespace Squidex.Controllers.Api.Schemas.Models { - [JsonConverter(typeof(JsonInheritanceConverter), "$type")] - [KnownType(typeof(NumberField))] - [KnownType(typeof(StringField))] - public abstract class FieldDto + public sealed class FieldDto { /// /// The name of the field. Must be unique within the schema. @@ -27,28 +20,19 @@ namespace Squidex.Controllers.Api.Schemas.Models public string Name { get; set; } /// - /// Optional label for the editor. + /// Defines if the field is hidden. /// - [StringLength(100)] - public string Label { get; set; } + public bool IsHidden { get; set; } /// - /// Hints to describe the schema. + /// Defines if the field is disabled. /// - [StringLength(1000)] - public string Hints { get; set; } + public bool IsDisabled { get; set; } /// - /// Placeholder to show when no value has been entered. + /// The field properties. /// - [StringLength(100)] - public string Placeholder { get; set; } - - /// - /// Indicates if the field is required. - /// - public bool IsRequired { get; set; } - - public abstract FieldProperties ToProperties(); + [Required] + public FieldPropertiesDto Properties { get; set; } } } diff --git a/src/Squidex/Controllers/Api/Schemas/Models/FieldPropertiesDto.cs b/src/Squidex/Controllers/Api/Schemas/Models/FieldPropertiesDto.cs new file mode 100644 index 000000000..ca0d2e60b --- /dev/null +++ b/src/Squidex/Controllers/Api/Schemas/Models/FieldPropertiesDto.cs @@ -0,0 +1,48 @@ +// ========================================================================== +// FieldDto.cs +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex Group +// All rights reserved. +// ========================================================================== + +using System.ComponentModel.DataAnnotations; +using System.Runtime.Serialization; +using Newtonsoft.Json; +using NJsonSchema.Converters; +using Squidex.Core.Schemas; +using Dtos = Squidex.Controllers.Api.Schemas.Models.Fields; + +namespace Squidex.Controllers.Api.Schemas.Models +{ + [JsonConverter(typeof(JsonInheritanceConverter), "fieldType")] + [KnownType(typeof(Dtos.NumberField))] + [KnownType(typeof(Dtos.StringField))] + public abstract class FieldPropertiesDto + { + /// + /// Optional label for the editor. + /// + [StringLength(100)] + public string Label { get; set; } + + /// + /// Hints to describe the schema. + /// + [StringLength(1000)] + public string Hints { get; set; } + + /// + /// Placeholder to show when no value has been entered. + /// + [StringLength(100)] + public string Placeholder { get; set; } + + /// + /// Indicates if the field is required. + /// + public bool IsRequired { get; set; } + + public abstract FieldProperties ToProperties(); + } +} diff --git a/src/Squidex/Controllers/Api/Schemas/Models/Fields/NumberField.cs b/src/Squidex/Controllers/Api/Schemas/Models/Fields/NumberField.cs index bebcbd6e2..0ea566c17 100644 --- a/src/Squidex/Controllers/Api/Schemas/Models/Fields/NumberField.cs +++ b/src/Squidex/Controllers/Api/Schemas/Models/Fields/NumberField.cs @@ -11,7 +11,7 @@ using Squidex.Infrastructure.Reflection; namespace Squidex.Controllers.Api.Schemas.Models.Fields { - public class NumberField : FieldDto + public sealed class NumberField : FieldPropertiesDto { /// /// The default value for the field value. diff --git a/src/Squidex/Controllers/Api/Schemas/Models/Fields/StringField.cs b/src/Squidex/Controllers/Api/Schemas/Models/Fields/StringField.cs index 4f3ab24b9..8d9e1082c 100644 --- a/src/Squidex/Controllers/Api/Schemas/Models/Fields/StringField.cs +++ b/src/Squidex/Controllers/Api/Schemas/Models/Fields/StringField.cs @@ -11,7 +11,7 @@ using Squidex.Infrastructure.Reflection; namespace Squidex.Controllers.Api.Schemas.Models.Fields { - public sealed class StringField : FieldDto + public sealed class StringField : FieldPropertiesDto { /// /// The default value for the field value. diff --git a/src/Squidex/Controllers/Api/Schemas/Models/UpdateFieldDto.cs b/src/Squidex/Controllers/Api/Schemas/Models/UpdateFieldDto.cs new file mode 100644 index 000000000..4bbdf9bf1 --- /dev/null +++ b/src/Squidex/Controllers/Api/Schemas/Models/UpdateFieldDto.cs @@ -0,0 +1,15 @@ +// ========================================================================== +// UpdateFieldDto.cs +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex Group +// All rights reserved. +// ========================================================================== + +namespace Squidex.Controllers.Api.Schemas.Models +{ + public class UpdateFieldDto + { + public FieldPropertiesDto Properties { get; set; } + } +} diff --git a/src/Squidex/Controllers/Api/Schemas/SchemaFieldsController.cs b/src/Squidex/Controllers/Api/Schemas/SchemaFieldsController.cs index c2084a390..5225833f8 100644 --- a/src/Squidex/Controllers/Api/Schemas/SchemaFieldsController.cs +++ b/src/Squidex/Controllers/Api/Schemas/SchemaFieldsController.cs @@ -9,11 +9,9 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; -using Newtonsoft.Json.Linq; using NSwag.Annotations; using Squidex.Infrastructure.CQRS.Commands; using Squidex.Controllers.Api.Schemas.Models; -using Squidex.Infrastructure; using Squidex.Pipeline; using Squidex.Write.Schemas.Commands; @@ -22,7 +20,7 @@ namespace Squidex.Controllers.Api.Schemas /// /// Manages and retrieves information about schemas. /// - [Authorize("app-owner,app-developer")] + [Authorize(Roles = "app-owner,app-developer")] [ApiExceptionFilter] [ServiceFilter(typeof(AppFilterAttribute))] [SwaggerTag("Schemas")] @@ -50,14 +48,9 @@ namespace Squidex.Controllers.Api.Schemas [ProducesResponseType(typeof(EntityCreatedDto), 201)] [ProducesResponseType(typeof(ErrorDto), 409)] [ProducesResponseType(typeof(ErrorDto), 400)] - public async Task PostField(string app, string name, [FromBody] FieldDto model) + public async Task PostField(string app, string name, [FromBody] AddFieldDto model) { - var properties = model.ToProperties(); - - var fieldName = model.Name; - var fieldType = TypeNameRegistry.GetName(properties.GetType()); - - var command = new AddField { Name = fieldName, Type = fieldType, Properties = JToken.FromObject(properties) }; + var command = new AddField { Name = model.Name, Properties = model.Properties.ToProperties() }; var context = await CommandBus.PublishAsync(command); var result = context.Result(); @@ -81,9 +74,9 @@ namespace Squidex.Controllers.Api.Schemas [Route("apps/{app}/schemas/{name}/fields/{id:long}/")] [ProducesResponseType(typeof(ErrorDto), 409)] [ProducesResponseType(typeof(ErrorDto), 400)] - public async Task PutField(string app, string name, long id, [FromBody] FieldDto model) + public async Task PutField(string app, string name, long id, [FromBody] UpdateFieldDto model) { - var command = new UpdateField { FieldId = id, Properties = JToken.FromObject(model) }; + var command = new UpdateField { FieldId = id, Properties = model.Properties.ToProperties() }; await CommandBus.PublishAsync(command); diff --git a/src/Squidex/Controllers/Api/Schemas/SchemasController.cs b/src/Squidex/Controllers/Api/Schemas/SchemasController.cs index 96092f067..6247c4cc2 100644 --- a/src/Squidex/Controllers/Api/Schemas/SchemasController.cs +++ b/src/Squidex/Controllers/Api/Schemas/SchemasController.cs @@ -25,7 +25,7 @@ namespace Squidex.Controllers.Api.Schemas /// /// Manages and retrieves information about schemas. /// - [Authorize("app-owner,app-developer")] + [Authorize(Roles = "app-owner,app-developer")] [ApiExceptionFilter] [ServiceFilter(typeof(AppFilterAttribute))] [SwaggerTag("Schemas")] diff --git a/src/Squidex/appsettings.json b/src/Squidex/appsettings.json index ea9f8d444..214731f31 100644 --- a/src/Squidex/appsettings.json +++ b/src/Squidex/appsettings.json @@ -10,7 +10,7 @@ "eventStore": { "ipAddress": "127.0.0.1", "port": 1113, - "prefix": "squidex", + "prefix": "squidex_v2", "username": "admin", "password": "changeit" } diff --git a/src/Squidex/project.json b/src/Squidex/project.json index 901413294..792af8b6e 100644 --- a/src/Squidex/project.json +++ b/src/Squidex/project.json @@ -62,7 +62,7 @@ "nowarn": [ "1591", "1573", "1572" ], "embed": { "include": [ - "Configurations/Identity/Cert/*.*" + "Config/Identity/Cert/*.*" ] } }, diff --git a/src/Squidex/web.config b/src/Squidex/web.config index 2cf9311fb..142605f6f 100644 --- a/src/Squidex/web.config +++ b/src/Squidex/web.config @@ -2,8 +2,8 @@ - + - + - + \ No newline at end of file