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
{
public class AssetFieldBuilder : FieldBuilder
public class AssetFieldBuilder : FieldBuilder<AssetFieldBuilder>
{
public AssetFieldBuilder(UpsertSchemaField field, CreateSchema schema)
public AssetFieldBuilder(UpsertSchemaFieldBase field, CreateSchema 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
{
public class BooleanFieldBuilder : FieldBuilder
public class BooleanFieldBuilder : FieldBuilder<BooleanFieldBuilder>
{
public BooleanFieldBuilder(UpsertSchemaField field, CreateSchema schema)
public BooleanFieldBuilder(UpsertSchemaFieldBase field, CreateSchema 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
{
public class DateTimeFieldBuilder : FieldBuilder
public class DateTimeFieldBuilder : FieldBuilder<DateTimeFieldBuilder>
{
public DateTimeFieldBuilder(UpsertSchemaField field, CreateSchema schema)
public DateTimeFieldBuilder(UpsertSchemaFieldBase field, CreateSchema 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
{
private readonly UpsertSchemaField field;
private readonly CreateSchema schema;
protected UpsertSchemaFieldBase Field { get; init; }
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;
this.schema = schema;
Field = field;
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
{
field.Properties = updater((T)field.Properties);
Field.Properties = updater((T)Field.Properties);
}
public FieldBuilder ShowInList()
public T ShowInList()
{
schema.FieldsInLists ??= new FieldNames();
schema.FieldsInLists.Add(field.Name);
Schema.FieldsInLists ??= new FieldNames();
Schema.FieldsInLists.Add(Field.Name);
return this;
return this as T;
}
public FieldBuilder ShowInReferences()
public T ShowInReferences()
{
schema.FieldsInReferences ??= new FieldNames();
schema.FieldsInReferences.Add(field.Name);
Schema.FieldsInReferences ??= new FieldNames();
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
{
public class JsonFieldBuilder : FieldBuilder
public class JsonFieldBuilder : FieldBuilder<JsonFieldBuilder>
{
public JsonFieldBuilder(UpsertSchemaField field, CreateSchema schema)
public JsonFieldBuilder(UpsertSchemaFieldBase field, CreateSchema 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
{
public class NumberFieldBuilder : FieldBuilder
public class NumberFieldBuilder : FieldBuilder<NumberFieldBuilder>
{
public NumberFieldBuilder(UpsertSchemaField field, CreateSchema schema)
public NumberFieldBuilder(UpsertSchemaFieldBase field, CreateSchema 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
{
public class ReferencesFieldBuilder : FieldBuilder
public class ReferencesFieldBuilder : FieldBuilder<ReferencesFieldBuilder>
{
public ReferencesFieldBuilder(UpsertSchemaField field, CreateSchema schema)
public ReferencesFieldBuilder(UpsertSchemaFieldBase field, CreateSchema 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;
}
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()
{
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
{
public class StringFieldBuilder : FieldBuilder
public class StringFieldBuilder : FieldBuilder<StringFieldBuilder>
{
public StringFieldBuilder(UpsertSchemaField field, CreateSchema schema)
public StringFieldBuilder(UpsertSchemaFieldBase field, CreateSchema 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
{
public class TagsFieldBuilder : FieldBuilder
public class TagsFieldBuilder : FieldBuilder<TagsFieldBuilder>
{
public TagsFieldBuilder(UpsertSchemaField field, CreateSchema schema)
: base(field, schema)

Loading…
Cancel
Save