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