Browse Source

Feature/add array builder (#709)

* use UpsertSchemaFieldBase in FieldBuilder

* ArrayFieldBuilder implementation

* formating

* Refactoring Builders (CRTP)

* Formating property

* Update ArrayFieldBuilder.cs
pull/712/head
SEBESTYEN 5 years ago
committed by GitHub
parent
commit
f2f89de480
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 110
      backend/src/Squidex.Domain.Apps.Entities/Apps/Templates/Builders/ArrayFieldBuilder.cs
  2. 4
      backend/src/Squidex.Domain.Apps.Entities/Apps/Templates/Builders/AssetFieldBuilder.cs
  3. 4
      backend/src/Squidex.Domain.Apps.Entities/Apps/Templates/Builders/BooleanFieldBuilder.cs
  4. 4
      backend/src/Squidex.Domain.Apps.Entities/Apps/Templates/Builders/DateTimeFieldBuilder.cs
  5. 65
      backend/src/Squidex.Domain.Apps.Entities/Apps/Templates/Builders/FieldBuilder.cs
  6. 4
      backend/src/Squidex.Domain.Apps.Entities/Apps/Templates/Builders/JsonFieldBuilder.cs
  7. 4
      backend/src/Squidex.Domain.Apps.Entities/Apps/Templates/Builders/NumberFieldBuilder.cs
  8. 4
      backend/src/Squidex.Domain.Apps.Entities/Apps/Templates/Builders/ReferencesFieldBuilder.cs
  9. 9
      backend/src/Squidex.Domain.Apps.Entities/Apps/Templates/Builders/SchemaBuilder.cs
  10. 4
      backend/src/Squidex.Domain.Apps.Entities/Apps/Templates/Builders/StringFieldBuilder.cs
  11. 2
      backend/src/Squidex.Domain.Apps.Entities/Apps/Templates/Builders/TagsFieldBuilder.cs

110
backend/src/Squidex.Domain.Apps.Entities/Apps/Templates/Builders/ArrayFieldBuilder.cs

@ -0,0 +1,110 @@
// ==========================================================================
// Squidex Headless CMS
// ==========================================================================
// Copyright (c) Squidex UG (haftungsbeschraenkt)
// All rights reserved. Licensed under the MIT license.
// ==========================================================================
using System;
using System.Linq;
using Squidex.Domain.Apps.Core.Schemas;
using Squidex.Domain.Apps.Entities.Schemas.Commands;
using Squidex.Text;
namespace Squidex.Domain.Apps.Entities.Apps.Templates.Builders
{
public class ArrayFieldBuilder : FieldBuilder<ArrayFieldBuilder>
{
protected new UpsertSchemaField field
{
get => base.Field as UpsertSchemaField;
init => base.Field = value;
}
public ArrayFieldBuilder(UpsertSchemaField field, CreateSchema schema)
: base(field, schema)
{
}
public ArrayFieldBuilder AddAssets(string name, Action<AssetFieldBuilder> configure)
{
var field = AddField<AssetsFieldProperties>(name);
configure(new AssetFieldBuilder(field, Schema));
return this;
}
public ArrayFieldBuilder AddBoolean(string name, Action<BooleanFieldBuilder> configure)
{
var field = AddField<BooleanFieldProperties>(name);
configure(new BooleanFieldBuilder(field, Schema));
return this;
}
public ArrayFieldBuilder AddDateTime(string name, Action<DateTimeFieldBuilder> configure)
{
var field = AddField<DateTimeFieldProperties>(name);
configure(new DateTimeFieldBuilder(field, Schema));
return this;
}
public ArrayFieldBuilder AddJson(string name, Action<JsonFieldBuilder> configure)
{
var field = AddField<JsonFieldProperties>(name);
configure(new JsonFieldBuilder(field, Schema));
return this;
}
public ArrayFieldBuilder AddNumber(string name, Action<NumberFieldBuilder> configure)
{
var field = AddField<NumberFieldProperties>(name);
configure(new NumberFieldBuilder(field, Schema));
return this;
}
public ArrayFieldBuilder AddReferences(string name, Action<ReferencesFieldBuilder> configure)
{
var field = AddField<ReferencesFieldProperties>(name);
configure(new ReferencesFieldBuilder(field, Schema));
return this;
}
public ArrayFieldBuilder AddString(string name, Action<StringFieldBuilder> configure)
{
var field = AddField<StringFieldProperties>(name);
configure(new StringFieldBuilder(field, Schema));
return this;
}
private UpsertSchemaNestedField AddField<T>(string name) where T : FieldProperties, new()
{
var nestedField = new UpsertSchemaNestedField
{
Name = name.ToCamelCase(),
Properties = new T
{
Label = name
}
};
field.Nested ??= Array.Empty<UpsertSchemaNestedField>();
field.Nested = field.Nested.Union(new[] { nestedField }).ToArray();
return nestedField;
}
}
}

4
backend/src/Squidex.Domain.Apps.Entities/Apps/Templates/Builders/AssetFieldBuilder.cs

@ -10,9 +10,9 @@ using Squidex.Domain.Apps.Entities.Schemas.Commands;
namespace Squidex.Domain.Apps.Entities.Apps.Templates.Builders namespace Squidex.Domain.Apps.Entities.Apps.Templates.Builders
{ {
public class AssetFieldBuilder : FieldBuilder public class AssetFieldBuilder : FieldBuilder<AssetFieldBuilder>
{ {
public AssetFieldBuilder(UpsertSchemaField field, CreateSchema schema) public AssetFieldBuilder(UpsertSchemaFieldBase field, CreateSchema schema)
: base(field, schema) : base(field, schema)
{ {
} }

4
backend/src/Squidex.Domain.Apps.Entities/Apps/Templates/Builders/BooleanFieldBuilder.cs

@ -10,9 +10,9 @@ using Squidex.Domain.Apps.Entities.Schemas.Commands;
namespace Squidex.Domain.Apps.Entities.Apps.Templates.Builders namespace Squidex.Domain.Apps.Entities.Apps.Templates.Builders
{ {
public class BooleanFieldBuilder : FieldBuilder public class BooleanFieldBuilder : FieldBuilder<BooleanFieldBuilder>
{ {
public BooleanFieldBuilder(UpsertSchemaField field, CreateSchema schema) public BooleanFieldBuilder(UpsertSchemaFieldBase field, CreateSchema schema)
: base(field, schema) : base(field, schema)
{ {
} }

4
backend/src/Squidex.Domain.Apps.Entities/Apps/Templates/Builders/DateTimeFieldBuilder.cs

@ -10,9 +10,9 @@ using Squidex.Domain.Apps.Entities.Schemas.Commands;
namespace Squidex.Domain.Apps.Entities.Apps.Templates.Builders namespace Squidex.Domain.Apps.Entities.Apps.Templates.Builders
{ {
public class DateTimeFieldBuilder : FieldBuilder public class DateTimeFieldBuilder : FieldBuilder<DateTimeFieldBuilder>
{ {
public DateTimeFieldBuilder(UpsertSchemaField field, CreateSchema schema) public DateTimeFieldBuilder(UpsertSchemaFieldBase field, CreateSchema schema)
: base(field, schema) : base(field, schema)
{ {
} }

65
backend/src/Squidex.Domain.Apps.Entities/Apps/Templates/Builders/FieldBuilder.cs

@ -14,69 +14,76 @@ namespace Squidex.Domain.Apps.Entities.Apps.Templates.Builders
{ {
public abstract class FieldBuilder public abstract class FieldBuilder
{ {
private readonly UpsertSchemaField field; protected UpsertSchemaFieldBase Field { get; init; }
private readonly CreateSchema schema; protected CreateSchema Schema { get; init; }
}
protected FieldBuilder(UpsertSchemaField field, CreateSchema schema) public abstract class FieldBuilder<T> : FieldBuilder
where T : FieldBuilder
{
protected FieldBuilder(UpsertSchemaFieldBase field, CreateSchema schema)
{ {
this.field = field; Field = field;
this.schema = schema; Schema = schema;
} }
public FieldBuilder Label(string? label) public T Label(string? label)
{ {
field.Properties = field.Properties with { Label = label }; Field.Properties = Field.Properties with { Label = label };
return this; return this as T;
} }
public FieldBuilder Hints(string? hints) public T Hints(string? hints)
{ {
field.Properties = field.Properties with { Hints = hints }; Field.Properties = Field.Properties with { Hints = hints };
return this; return this as T;
} }
public FieldBuilder Localizable() public T Localizable()
{ {
field.Partitioning = Partitioning.Language.Key; if (Field is UpsertSchemaField localizableField)
{
localizableField.Partitioning = Partitioning.Language.Key;
}
return this; return this as T;
} }
public FieldBuilder Disabled() public T Disabled()
{ {
field.IsDisabled = true; Field.IsDisabled = true;
return this; return this as T;
} }
public FieldBuilder Required() public T Required()
{ {
field.Properties = field.Properties with { IsRequired = true }; Field.Properties = Field.Properties with { IsRequired = true };
return this; return this as T;
} }
protected void Properties<T>(Func<T, T> updater) where T : FieldProperties protected void Properties<T>(Func<T, T> updater) where T : FieldProperties
{ {
field.Properties = updater((T)field.Properties); Field.Properties = updater((T)Field.Properties);
} }
public FieldBuilder ShowInList() public T ShowInList()
{ {
schema.FieldsInLists ??= new FieldNames(); Schema.FieldsInLists ??= new FieldNames();
schema.FieldsInLists.Add(field.Name); Schema.FieldsInLists.Add(Field.Name);
return this; return this as T;
} }
public FieldBuilder ShowInReferences() public T ShowInReferences()
{ {
schema.FieldsInReferences ??= new FieldNames(); Schema.FieldsInReferences ??= new FieldNames();
schema.FieldsInReferences.Add(field.Name); Schema.FieldsInReferences.Add(Field.Name);
return this; return this as T;
} }
} }
} }

4
backend/src/Squidex.Domain.Apps.Entities/Apps/Templates/Builders/JsonFieldBuilder.cs

@ -9,9 +9,9 @@ using Squidex.Domain.Apps.Entities.Schemas.Commands;
namespace Squidex.Domain.Apps.Entities.Apps.Templates.Builders namespace Squidex.Domain.Apps.Entities.Apps.Templates.Builders
{ {
public class JsonFieldBuilder : FieldBuilder public class JsonFieldBuilder : FieldBuilder<JsonFieldBuilder>
{ {
public JsonFieldBuilder(UpsertSchemaField field, CreateSchema schema) public JsonFieldBuilder(UpsertSchemaFieldBase field, CreateSchema schema)
: base(field, schema) : base(field, schema)
{ {
} }

4
backend/src/Squidex.Domain.Apps.Entities/Apps/Templates/Builders/NumberFieldBuilder.cs

@ -9,9 +9,9 @@ using Squidex.Domain.Apps.Entities.Schemas.Commands;
namespace Squidex.Domain.Apps.Entities.Apps.Templates.Builders namespace Squidex.Domain.Apps.Entities.Apps.Templates.Builders
{ {
public class NumberFieldBuilder : FieldBuilder public class NumberFieldBuilder : FieldBuilder<NumberFieldBuilder>
{ {
public NumberFieldBuilder(UpsertSchemaField field, CreateSchema schema) public NumberFieldBuilder(UpsertSchemaFieldBase field, CreateSchema schema)
: base(field, schema) : base(field, schema)
{ {
} }

4
backend/src/Squidex.Domain.Apps.Entities/Apps/Templates/Builders/ReferencesFieldBuilder.cs

@ -12,9 +12,9 @@ using Squidex.Infrastructure.Collections;
namespace Squidex.Domain.Apps.Entities.Apps.Templates.Builders namespace Squidex.Domain.Apps.Entities.Apps.Templates.Builders
{ {
public class ReferencesFieldBuilder : FieldBuilder public class ReferencesFieldBuilder : FieldBuilder<ReferencesFieldBuilder>
{ {
public ReferencesFieldBuilder(UpsertSchemaField field, CreateSchema schema) public ReferencesFieldBuilder(UpsertSchemaFieldBase field, CreateSchema schema)
: base(field, schema) : base(field, schema)
{ {
} }

9
backend/src/Squidex.Domain.Apps.Entities/Apps/Templates/Builders/SchemaBuilder.cs

@ -139,6 +139,15 @@ namespace Squidex.Domain.Apps.Entities.Apps.Templates.Builders
return this; return this;
} }
public SchemaBuilder AddArray(string name, Action<ArrayFieldBuilder> configure)
{
var field = AddField<ArrayFieldProperties>(name);
configure(new ArrayFieldBuilder(field, command));
return this;
}
private UpsertSchemaField AddField<T>(string name) where T : FieldProperties, new() private UpsertSchemaField AddField<T>(string name) where T : FieldProperties, new()
{ {
var field = new UpsertSchemaField var field = new UpsertSchemaField

4
backend/src/Squidex.Domain.Apps.Entities/Apps/Templates/Builders/StringFieldBuilder.cs

@ -11,9 +11,9 @@ using Squidex.Infrastructure.Collections;
namespace Squidex.Domain.Apps.Entities.Apps.Templates.Builders namespace Squidex.Domain.Apps.Entities.Apps.Templates.Builders
{ {
public class StringFieldBuilder : FieldBuilder public class StringFieldBuilder : FieldBuilder<StringFieldBuilder>
{ {
public StringFieldBuilder(UpsertSchemaField field, CreateSchema schema) public StringFieldBuilder(UpsertSchemaFieldBase field, CreateSchema schema)
: base(field, schema) : base(field, schema)
{ {
} }

2
backend/src/Squidex.Domain.Apps.Entities/Apps/Templates/Builders/TagsFieldBuilder.cs

@ -11,7 +11,7 @@ using Squidex.Infrastructure.Collections;
namespace Squidex.Domain.Apps.Entities.Apps.Templates.Builders namespace Squidex.Domain.Apps.Entities.Apps.Templates.Builders
{ {
public class TagsFieldBuilder : FieldBuilder public class TagsFieldBuilder : FieldBuilder<TagsFieldBuilder>
{ {
public TagsFieldBuilder(UpsertSchemaField field, CreateSchema schema) public TagsFieldBuilder(UpsertSchemaField field, CreateSchema schema)
: base(field, schema) : base(field, schema)

Loading…
Cancel
Save