public static TagBuilder FirstChild(this TagBuilder tagBuilder, string html) { StringBuilder builder = new StringBuilder(html); builder.A(tagBuilder.InnerHtml); tagBuilder.InnerHtml = builder.ToString(); return(tagBuilder); }
private static StringBuilder CreateAppInitScriptTag(WebViewPage page, object appNameObj) { HttpServerUtilityBase server = page.Context.Server; UrlHelper url = page.Url; StringBuilder initPath = new StringBuilder(); initPath.A(AppRoot).A("init.js").ToString().NamedFormat(appNameObj); return(CreateScriptTags(url, appNameObj, initPath.ToString())); }
private static StringBuilder CreateDustBamTemplatesScriptTag(WebViewPage page, object appNameObj) { HttpServerUtilityBase server = page.Context.Server; UrlHelper url = page.Url; StringBuilder templatePath = new StringBuilder(); Tag script = new Tag("script", new { src = "/dust/bamtemplates?appName={appName}".NamedFormat(appNameObj) }); templatePath.A(script.ToHtmlString()); return(templatePath); }
public static MvcHtmlString DustTemplateFor(this HtmlHelper helper, object value, object wrapperAttrs = null) { Type type = value.GetType(); foreach (PropertyInfo prop in type.GetProperties()) { if (prop.CanWrite && prop.PropertyType == typeof(string)) { StringBuilder str = new StringBuilder(); str.A("{").Af("{0}", prop.Name).A("}"); prop.SetValue(value, str.ToString(), null); } } return(helper.InputsFor(type, value, wrapperAttrs)); }
public IOutput Create() { var sb = new StringBuilder(); sb.Al($"namespace {_module.Namespace}.Commands"); sb.Al("{"); sb.I(1).Al($"public class {_request.Name} : INotification"); sb.I(1).Al("{"); sb.I(2).A($"public {_request.Name}("); foreach (var field in _request.Fields) { sb.A($"{field.GetDataType()} {field.Name.Singular.LocalVariable}, "); } sb.TrimEnd(", "); sb.Al(")"); sb.I(2).Al("{"); foreach (var field in _request.Fields) { sb.I(3).Al($"{field.Name.Value} = {field.Name.Singular.LocalVariable};"); } sb.I(2).Al("}"); sb.B(); foreach (var item in _request.Fields) { var property = (ISnippet) new Property.Generator(item, setScope: Property.PropertyScope.NotAvailable).Create(); sb.Al(property.Content); } sb.I(1).Al("}"); sb.B(); sb.I(1).Al($"public class {_request.Name}Handler : INotificationHandler<{_request.Name}>"); sb.I(1).Al("{"); sb.I(2).Al($"public async Task Handle({_request.Name} command, CancellationToken cancellationToken)"); sb.I(2).Al("{"); sb.I(3).Al("// todo: Add code to complete the command"); sb.I(2).Al("}"); sb.I(1).Al("}"); sb.Al("}"); return(new File(_request.Name + ".cs", sb.ToString(), path: "Commands")); }
public static string ArchiveText(string namespaceName, string archiveName, List <Entity> entities) { var sb = new StringBuilder(@"using System; using System.IO; using System.Linq; using System.Collections; using System.Collections.Generic; using Bitemporal; namespace ").A(namespaceName).A(@" { public class ").A(archiveName).A(@" { uint[] Counts; readonly SetSlim<string> Text;"); for (int e = 0; e < entities.Count; e++) { var fieldCount = entities[e].Fields.Count; for (int f = 0; f < fieldCount; f++) { sb.A(@" DataSeries[] Entity").A(e).A(@"_Field").A(f).A(@";"); } } sb.A(@" public ").A(archiveName).A(@"() { Counts = new uint[").A(entities.Count).A(@"]; Text = new();"); for (int e = 0; e < entities.Count; e++) { var fieldCount = entities[e].Fields.Count; for (int f = 0; f < fieldCount; f++) { sb.A(@" Entity").A(e).A(@"_Field").A(f).A(@" = Array.Empty<DataSeries>();"); } } sb.A(@" } public ").A(archiveName).A(@"(string filename) { using var s = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read); Counts = Serialize.UIntArrayGet(s); Text = Serialize.SetSlimStringGet(s);"); for (int e = 0; e < entities.Count; e++) { var fieldCount = entities[e].Fields.Count; for (int f = 0; f < fieldCount; f++) { sb.A(@" Entity").A(e).A(@"_Field").A(f).A(@" = Serialize.DataSeriesArrayGet(s, Counts[").A(e).A(@"]);"); } } sb.A(@" } public void Save(string filename) { using var s = new FileStream(filename, FileMode.Create, FileAccess.Write, FileShare.None); Serialize.UIntArraySet(s, Counts); Serialize.SetSlimStringSet(s, Text);"); for (int e = 0; e < entities.Count; e++) { var fieldCount = entities[e].Fields.Count; for (int f = 0; f < fieldCount; f++) { sb.A(@" Serialize.DataSeriesArraySet(s, Entity").A(e).A(@"_Field").A(f).A(@");"); } } sb.A(@" } public Snapshot SnapshotLatest => new(this, Counts, new(Counts[0]-1U)); public Snapshot SnapshotAt(TxId txId) { var newCounts = new uint[").A(entities.Count).A(@"]; Array.Copy(Counts, 0, newCounts, 0, ").A(entities.Count).A(@"); var i = txId.I; newCounts[0] = i;"); for (int e = 1; e < entities.Count; e++) { sb.A(@" i = newCounts[").A(e).A(@"]; while (Entity").A(e).A(@"_Field0[--i].After(txId)) { }; newCounts[").A(e).A(@"] = i;"); } sb.A(@" return new(this, newCounts, txId); } public class Snapshot { public readonly ").A(archiveName).A(@" Archive; public readonly uint[] Counts; public readonly TxId TxId; public TxId NextTxId => new(TxId.I + 1U); SetSlim<string>? Text;"); for (int e = 0; e < entities.Count; e++) { var fieldCount = entities[e].Fields.Count; for (int f = 0; f < fieldCount; f++) { sb.A(@" internal MapSlim<uint, DataSeries>? Entity").A(e).A(@"_Field").A(f).A(@";"); } } sb.A(@" internal Snapshot(").A(archiveName).A(@" archive, uint[] counts, TxId txId) { Archive = archive; Counts = counts; TxId = txId; } public SnapshotDate this[Date date] => new(this, date); internal Vint AddString(string s) { var i = Archive.Text.IndexOf(s); if (i >= 0) return new(i); return new((Text ??= new()).Add(s) + Archive.Text.Count); } internal string GetString(Vint v) { return v.I < Archive.Text.Count ? Archive.Text[(int)v.I] : Text![(int)v.I - Archive.Text.Count]; } public void Commit("); var fields0 = entities[0].Fields; var fieldCount0 = fields0.Count; sb.A(fields0[0].Type).A(@" ").A(fields0[0].Name.ToLower()); for (int f = 1; f < fieldCount0; f++) { if (!fields0[f].Type.EndsWith(" Set")) { sb.A(@", ").A(fields0[f].Type).A(@" ").A(fields0[f].Name.ToLower()); } } sb.A(@") { this[time.ToDate()].TxCollection.New("); sb.A(fields0[0].Name.ToLower()); for (int f = 1; f < fieldCount0; f++) { if (!fields0[f].Type.EndsWith(" Set")) { sb.A(@", ").A(fields0[f].Name.ToLower()); } } sb.A(@"); var newCounts = new uint[").A(entities.Count).A(@"]; Array.Copy(Counts, 0, newCounts, 0, ").A(entities.Count).A(@"); if(Text is not null) { for(int i = 0; i < Text.Count; i++) Archive.Text.Add(Text[i]); }"); for (int e = 0; e < entities.Count; e++) { var fieldCount = entities[e].Fields.Count; for (int f = 0; f < fieldCount; f++) { sb.A(@" if (Entity").A(e).A(@"_Field").A(f).A(@" is not null) { var maxID = 0U; for(int i = Entity").A(e).A(@"_Field").A(f).A(@".Count - 1; i >= 0; i--) { var k = Entity").A(e).A(@"_Field").A(f).A(@".Key(i); if(k > maxID) maxID = k; } if (Archive.Entity").A(e).A(@"_Field").A(f).A(@".Length <= maxID) { var a = new DataSeries[maxID + 1]; Array.Copy(Archive.Entity").A(e).A(@"_Field").A(f).A(@", 0, a, 0, Archive.Entity").A(e).A(@"_Field").A(f).A(@".Length); Archive.Entity").A(e).A(@"_Field").A(f).A(@" = a; newCounts[").A(e).A(@"] = maxID + 1; } foreach (var kv in Entity").A(e).A(@"_Field").A(f).A(@") { Archive.Entity").A(e).A(@"_Field").A(f).A(@"[kv.Key] = kv.Value; } }"); } } sb.A(@" Archive.Counts = newCounts; } } public class SnapshotDate { public readonly Snapshot Snapshot; public readonly Date Date; internal SnapshotDate(Snapshot snapshot, Date date) { Snapshot = snapshot; Date = date; }"); for (int e = 0; e < entities.Count; e++) { sb.A(@" public ").A(entities[e].Name).A(@"Collection ").A(entities[e].Name).A(@"Collection => new(this);"); } sb.A(@" }"); for (int e = 0; e < entities.Count; e++) { if (e != 0) { sb.A(@" public struct ").A(entities[e].Name).A(@"Id { public readonly uint I; public ").A(entities[e].Name).A(@"Id(uint id) => I = id; } "); } sb.A(@" public struct ").A(entities[e].Name).A(@"Collection : IReadOnlyCollection<").A(entities[e].Name).A(@"> { public readonly SnapshotDate SD; public ").A(entities[e].Name).A(@"Collection(SnapshotDate sd) => SD = sd; public IEnumerator<").A(entities[e].Name).A(@"> GetEnumerator() => Entities().GetEnumerator(); IEnumerator IEnumerable.GetEnumerator() => Entities().GetEnumerator(); IEnumerable<").A(entities[e].Name).A(@"> Entities() { var i = SD.Snapshot.Counts[").A(e).A(@"]; while (i > 0) yield return new(SD, new(--i)); } public ").A(entities[e].Name).A(@" this[").A(entities[e].Name).A(@"Id id] => new(SD, id);"); var fields = entities[e].Fields; var fieldCount = fields.Count; sb.A(@" public int Count => (int)SD.Snapshot.Counts[").A(e).A(@"]; public ").A(entities[e].Name).A(@" New("); sb.A(fields[0].Type).A(@" ").A(fields[0].Name.ToLower()); for (int f = 1; f < fieldCount; f++) { if (!fields[f].Type.EndsWith(" Set")) { sb.A(@", ").A(fields[f].Type).A(@" ").A(fields[f].Name.ToLower()); } } sb.A(@") { var sd = SD; var id = sd.Snapshot.Counts[").A(e).A(@"]; if (sd.Snapshot.Entity").A(e).A(@"_Field0 is null) {"); for (int f = 0; f < fieldCount; f++) { sb.A(@" sd.Snapshot.Entity").A(e).A(@"_Field").A(f).A(@" = new();"); } sb.A(@" } else { var m = sd.Snapshot.Entity").A(e).A(@"_Field0.Key(sd.Snapshot.Entity").A(e).A(@"_Field0.Count - 1); if (m >= id) id = m + 1; }"); for (int f = 0; f < fieldCount; f++) { if (fields[f].Type.EndsWith(" Set")) { sb.A(@" sd.Snapshot.Entity").A(e).A(@"_Field").A(f).A(@"![id] = default;"); } else { sb.A(@" sd.Snapshot.Entity").A(e).A(@"_Field").A(f).A(@"![id] = DataSeries.Single(sd.Date, sd.Snapshot.NextTxId, ").ToVint(entities, fields[f].Type, fields[f].Name.ToLower()).A(@");"); } } sb.A(@" return new(sd, new(id)); }"); sb.A(@" } public struct ").A(entities[e].Name).A(@" { readonly SnapshotDate SD; public readonly ").A(entities[e].Name).A(@"Id Id; public ").A(entities[e].Name).A(@"(SnapshotDate query, ").A(entities[e].Name).A(@"Id id) { SD = query; Id = id; }"); for (int f = 0; f < fieldCount; f++) { var field = fields[f]; sb.A(@" DataSeries ").A(field.Name).A(@"_DataSeries { get { var sd = SD; int i; return sd.Snapshot.Entity").A(e).A(@"_Field").A(f).A(@" is not null && (i = sd.Snapshot.Entity").A(e).A(@"_Field").A(f).A(@".IndexOf(Id.I)) != -1 ? sd.Snapshot.Entity").A(e).A(@"_Field").A(f).A(@".Value(i) : sd.Snapshot.Archive.Entity").A(e).A(@"_Field").A(f).A(@"[Id.I]; } set { (SD.Snapshot.Entity").A(e).A(@"_Field").A(f).A(@" ??= new())[Id.I] = value; } } "); if (field.Type.EndsWith(" Set")) { sb.A(@" public struct PositionsSet : IEnumerable<Position> { [System.Diagnostics.CodeAnalysis.SuppressMessage(""Style"", ""IDE0044: Add readonly modifier"")] Asset E; public PositionsSet(Asset entity) => E = entity; IEnumerable<Position> Items() { var sd = E.SD; return E.Positions_DataSeries.SetGet(sd.Date, sd.Snapshot.TxId).Select(i => new Position(sd, new((uint)i.I))); } public IEnumerator<Position> GetEnumerator() => Items().GetEnumerator(); IEnumerator IEnumerable.GetEnumerator() => Items().GetEnumerator(); public void Add(Position p) { var sd = E.SD; E.Positions_DataSeries = E.Positions_DataSeries.SetAdd(sd.Date, sd.Snapshot.NextTxId, new(p.Id.I)); } public void Remove(Position p) { var sd = E.SD; E.Positions_DataSeries = E.Positions_DataSeries.SetRemove(sd.Date, sd.Snapshot.NextTxId, new(p.Id.I)); } } public PositionsSet Positions => new(this);"); } else { sb.A(@" public ").A(field.Type).A(@" ").A(field.Name).A(@" { get { var sd = SD; var ds = ").A(field.Name).A(@"_DataSeries; return ").ToType(entities, field.Type, "ds[sd.Date, sd.Snapshot.TxId].Item3").A(@"; } set { var sd = SD; ").A(field.Name).A(@"_DataSeries = ").A(field.Name).A(@"_DataSeries.Add(sd.Date, sd.Snapshot.NextTxId, ").ToVint(entities, field.Type, "value").A(@"); } } public IEnumerable<(Date, TxId, ").A(field.Type).A(@")> ").A(field.Name).A(@"_Audit { get { var sd = SD; var date = sd.Date; var txId = sd.Snapshot.TxId; return ").A(field.Name).A(@"_DataSeries .Where(i => i.Item1 <= date && i.Item2 <= txId) .Select(i => (i.Item1, i.Item2, ").ToType(entities, field.Type, "i.Item3").A(@")); } } public (Date, TxId, ").A(field.Type).A(@") ").A(field.Name).A(@"_Detail { get { var sd = SD; var row = ").A(field.Name).A(@"_DataSeries[sd.Date, sd.Snapshot.TxId]; return (row.Item1, row.Item2, ").ToType(entities, field.Type, "row.Item3").A(@"); } }"); } } sb.A(@" }"); } sb.A(@" } }"); return(sb.ToString()); }
public override void CSGenerateProcess(CSGenerate rGenerate) { StartGenerateCommon(); foreach (var rType in SerializerBinaryTypes.Types) { var rText = new StringBuilder(); rText .A("using System.IO;").N() .A("using Core;").N() .A("using Core.Serializer;").N() .A("using Game.Serializer;").N() .L(2) .A("/// <summary>").N() .A("/// 文件自动生成无需又该!如果出现编译错误,删除文件后会自动生成").N() .A("/// </summary>").N(); if (!string.IsNullOrEmpty(rType.Namespace)) { rText .F("namespace {0}", rType.Namespace).N() .A("{").N(); } rText .F("public partial class {0}", rType.Name).N() .A("{").N(); var rSerializeMemberInfo = SearchSerializeMember(rType); // Serialize Function rText .T(1).A("public override void Serialize(BinaryWriter rWriter)").N() .T(1).A("{").N() .T(2).A("base.Serialize(rWriter);").N(); foreach (var rMemberInfo in rSerializeMemberInfo) { var rParamText = GenerateClassMemberDummyText(rMemberInfo); if (rMemberInfo.IsDefined(typeof(SBDynamicAttribute), true) && !IsBaseType(GetMemberType(rMemberInfo), false)) { rText.T(2).F("rWriter.SerializeDynamic({0});", rParamText).N(); } else { rText.T(2).F("rWriter.Serialize({0});", rParamText).N(); } } rText .T(1).A("}").N(); // Deserialize Function rText .T(1).A("public override void Deserialize(BinaryReader rReader)").N() .T(1).A("{").N() .T(2).A("base.Deserialize(rReader);").N(); foreach (var rMemberInfo in rSerializeMemberInfo) { if (rMemberInfo.IsDefined(typeof(SBDynamicAttribute), false) && !IsBaseType(GetMemberType(rMemberInfo), false)) { rText.T(2).F("this.{0} = {1}rReader.DeserializeDynamic({2});", rMemberInfo.Name, GenerateClassMemberTypeText(rMemberInfo), GenerateClassMemberDummyText(rMemberInfo)).N(); } else { rText.T(2).F("this.{0} = {1}rReader.Deserialize({2});", rMemberInfo.Name, GenerateClassMemberTypeText(rMemberInfo), GenerateClassMemberDummyText(rMemberInfo)).N(); } } rText .T(1).A("}").N(); rText.A("}").N(); if (!string.IsNullOrEmpty(rType.Namespace)) { rText.A("}").N(); } var rGroupName = string.Empty; var rAttributes = rType.GetCustomAttributes <SBGroupAttribute>(true); if (rAttributes.Length > 0) { rGroupName = rAttributes[0].GroupName; } rGenerate.Add(rText.ToString(), UtilTool.PathCombine(GeneratePath, rGroupName, rType.FullName + ".Binary.cs")); foreach (var rMemberInfo in rSerializeMemberInfo) { var bDynamic = rMemberInfo.IsDefined(typeof(SBDynamicAttribute), false); if (rMemberInfo.MemberType == MemberTypes.Field) { AnalyzeGenerateCommon((rMemberInfo as FieldInfo).FieldType, bDynamic); } else if (rMemberInfo.MemberType == MemberTypes.Property) { AnalyzeGenerateCommon((rMemberInfo as PropertyInfo).PropertyType, bDynamic); } } } EndGenerateCommon(); rGenerate.AddHead(mCommonSerializer.ToString(), CommonSerializerPath); }
public IOutput Create() { string dt; if (_field.DataType == DataTypes.DateTimeOffset && _convertToLocalDates) { dt = "DateTime"; if (_field.Nullable) { dt += "?"; } } else { dt = _field.GetDataType(ShowNullable, GuidNullable); } if (ShowNullable && _field.DataType == DataTypes.String && _field.Nullable && !dt.EndsWith("?")) { dt += "?"; } var sb = new StringBuilder(); if (_useBackingField) { sb.I(_indent).Al($"private {dt} {_field.Name.Singular.ModuleVariable}"); } var display = _field.Name.Singular.Display; if (_field.Name.ToString() != display) { if (display.EndsWith(" Id")) { display = display.Substring(0, display.Length - 3); } if (_useDataAnnotations) { sb.I(_indent).Al($"[Display(Name = \"{display}\")]"); } } if (_field.DataType == DataTypes.String) { if (!_field.Nullable && _useDataAnnotations) { sb.I(_indent).Al("[Required]"); } if (_field.MaxLength.HasValue && _useDataAnnotations) { sb.I(_indent).A($"[StringLength({_field.MaxLength.Value}"); if (_field.MinLength.HasValue) { sb.A($", MinimumLength={_field.MinLength.Value}"); } sb.Al(")]"); } } else if (_field.DataType == DataTypes.DateTimeOffset && _convertToLocalDates) { sb.I(_indent).Al("[DisplayFormat(DataFormatString = Constants.DateFormatVm)]"); } else if (_field.DataType == DataTypes.Decimal) { if (_field.Scale.HasValue && _field.Precision.HasValue && _useDataAnnotations) { sb.I(_indent).Al($"[Range(typeof(decimal), \"{_field.Scale.Value}\", \"{_field.Precision.Value}\", ConvertValueInInvariantCulture = true)]"); } } var scopes = SetScopes(); sb.I(_indent).A($"{scopes.prop} {dt} {_field.Name}"); if (_useBackingField) { sb.B(); sb.I(_indent).Al("{"); sb.I(_indent + 1).Al($"{scopes.get} get => {_field.Name.Singular.ModuleVariable};"); sb.I(_indent + 1).Al($"{scopes.set} set"); sb.I(_indent + 1).Al("{"); sb.I(_indent + 2).Al($"{_field.Name.Singular.ModuleVariable} = value;"); sb.I(_indent + 1).Al("}"); sb.I(_indent).Al("}"); } else { sb.A(" {"); sb.A($"{scopes.get} get; "); sb.A($"{scopes.set} set; "); sb.Al("}"); } return(new Snippet(sb.ToString())); }
public IOutput Create() { if (!_model.IsRoot) { return(null); } var sb = new StringBuilder(); if (Settings.SupportRegen) { sb.Al(((ISnippet) new OverwriteHeader.Generator(Settings, new GeneratorDetails()).Create()).Content); } else { sb.Al(((ISnippet) new Header.Generator(Settings, new GeneratorDetails()).Create()).Content); } foreach (var behaviour in _model.Behaviours) { sb.Al($"using {_module.Namespace}.BusinessLogic.{_model.Name}.{behaviour.Name};"); } sb.B(); sb.Al($"namespace {_module.Namespace}.Application.Controllers"); sb.Al("{"); sb.I(1).Al("[Route(\"api/[controller]/[action]\")]"); sb.I(1).A(Settings.SupportRegen ? "partial" : "public"); sb.A($" class {_model.Name}Controller"); if (!Settings.SupportRegen) { sb.A(": ApplicationController"); } sb.B(); sb.I(1).Al("{"); sb.I(2).Al("private readonly IMediator _mediator;"); if (!Settings.SupportRegen) { sb.B(); sb.I(2).Al($"public {_model.Name}Controller(IMediator mediator)"); sb.I(2).Al("{"); sb.I(3).Al("_mediator = mediator;"); sb.I(2).Al("}"); } foreach (var behaviour in _model.Behaviours) { sb.B(); sb.I(2).Al($"[Http{behaviour.Verb}]"); sb.I(2).A($"public async Task<IActionResult> {behaviour.Name}Async("); if (behaviour.Request is not null) { sb.A($"[FromBody] {behaviour.Request.Name} {behaviour.Request.Name.Singular.LocalVariable}"); } sb.Al(")"); sb.I(2).Al("{"); var request = behaviour.Request is null ? new Name($"{_model.Name}{behaviour.Name}Request") : behaviour.Request.Name; if (behaviour.Request is null) { sb.I(3).Al($"var {request.Singular.LocalVariable} = new {request}();"); } sb.I(3).A($"var result = await _mediator.Send("); sb.Al($"{request.Singular.LocalVariable});"); if (behaviour.Response is not null) { sb.I(3).A("return FromResult"); sb.A(behaviour.Response.IsCollection ? "<IEnumerable" : ""); sb.A($"<{behaviour.Response.Name}>"); sb.A(behaviour.Response.IsCollection ? ">" : ""); sb.Al("(result);"); } else { sb.I(3).Al("return NoContent();"); } sb.I(2).Al("}"); } sb.I(1).Al("}"); sb.Al("}"); var filename = _model.Name.ToString(); filename += "Controller"; if (Settings.SupportRegen) { filename += ".generated"; } filename += ".cs"; return(new File(filename, sb.ToString(), canOverwrite: Settings.SupportRegen)); }
public IOutput Create() { var sb = new StringBuilder(); if (Settings.SupportRegen) { sb.Al(((ISnippet) new OverwriteHeader.Generator(Settings, new GeneratorDetails()).Create()).Content); } else { sb.Al(((ISnippet) new Header.Generator(Settings, new GeneratorDetails()).Create()).Content); } sb.Al($"namespace {_module.Namespace}.BusinessLogic.{_model.Name}.{_behaviour.Name}"); sb.Al("{"); var request = _behaviour.Request is null ? new Name($"{_model.Name}{_behaviour.Name}Request") : _behaviour.Request.Name; sb.I(1).A(Settings.SupportRegen ? $"public partial record" : $"public class"); sb.A($" {request} : IRequest"); if (_behaviour.Response is not null) { sb.A("<Result"); sb.A(_behaviour.Response.IsCollection ? "<IEnumerable" : ""); sb.A($"<{_behaviour.Response.Name}>"); sb.A(_behaviour.Response.IsCollection ? ">>" : ">"); } sb.B(); sb.I(1).Al("{"); if (_behaviour.Request is not null) { foreach (var field in _behaviour.Request.Fields) { sb.Al(((ISnippet) new Property.Generator(field).Create()).Content); } } sb.I(1).Al("}"); if (_behaviour.Response is not null) { sb.I(1).A(Settings.SupportRegen ? $"public partial record" : $"public class"); sb.Al($" {_behaviour.Response.Name}"); sb.I(1).Al("{"); foreach (var field in _behaviour.Response.Fields) { sb.Al(((ISnippet) new Property.Generator(field).Create()).Content); } sb.I(1).Al("}"); } sb.Al("}"); var filename = _model.Name.ToString(); if (Settings.SupportRegen) { filename += ".generated"; } filename += ".cs"; return(new File(filename, sb.ToString(), path: System.IO.Path.Combine(_model.Name.ToString(), _behaviour.Name.ToString()), canOverwrite: Settings.SupportRegen)); }
public IOutput Create() { var bk = _model.HasBusinessKey(); var isEntity = _model.IsEntity(); var sb = new StringBuilder(); if (Settings.SupportRegen) { sb.Al(((ISnippet) new OverwriteHeader.Generator(Settings, new GeneratorDetails()).Create()).Content); } else { sb.Al(((ISnippet) new Header.Generator(Settings, new GeneratorDetails()).Create()).Content); } sb.Al($"namespace {_module.Namespace}.Common.Domain"); sb.Al("{"); sb.I(1).A(Settings.SupportRegen ? $"partial class {_model.Name}" : $"public class {_model.Name}"); var entity = string.Empty; if (isEntity) { entity += $" : BaseAggregateRoot<{_model.Name}, "; if (_model.Key.Fields.Count == 1) { entity += $"{_model.Key.Fields.First().GetDataType()}>"; } else { entity += "{ "; foreach (var item in _model.Key.Fields) { entity += item.GetDataType() + ","; } entity.TrimEnd(','); entity += " }>;"; } } sb.Al(entity); sb.I(1).Al("{"); if (!Settings.SupportRegen) { sb.I(2).A($"public {_model.Name}("); foreach (var field in _model.Fields) { sb.A($"{field.GetDataType()} {field.Name.Singular.LocalVariable}, "); } sb.TrimEnd(", "); sb.Al(")"); sb.I(2).Al("{"); foreach (var field in _model.Fields.Where(f => !f.Nullable && f.DataType == DataTypes.String)) { sb.I(3).Al($"if(string.IsNullOrWhiteSpace({field.Name.Singular.LocalVariable}))"); sb.I(4).Al($"throw new ArgumentException(\"Must include a value for {field.Name.Singular.Display}\");"); } foreach (var field in _model.Fields) { sb.I(3).Al($"{field.Name.Value} = {field.Name.Singular.LocalVariable};"); } sb.I(2).Al("}"); sb.B(); } foreach (var item in _model.Key.Fields) { if (isEntity && item.Name.ToString() == "Id") { continue; } var property = (ISnippet) new Property.Generator(item, setScope: Property.PropertyScope.Private).Create(); sb.Al(property.Content); } foreach (var item in _model.Fields) { var property = (ISnippet) new Property.Generator(item, setScope: Property.PropertyScope.Private).Create(); sb.Al(property.Content); } foreach (var item in _model.Behaviours) { if (Settings.SupportRegen) { sb.I(2).A($"public partial void {item.Name}("); if (item.Request != null) { foreach (var field in item.Request.Fields) { sb.A($"{field.GetDataType()} {field.Name.Singular.LocalVariable}, "); } sb.TrimEnd(", "); } sb.Al(");"); } else { sb.I(2).A($"public void {item.Name}("); if (item.Request != null) { foreach (var field in item.Request.Fields) { sb.A($"{field.GetDataType()} {field.Name.Singular.LocalVariable}, "); } sb.TrimEnd(", "); } sb.Al(")"); sb.I(2).Al("{"); sb.I(3).Al($"// todo: Add {item.Name.Singular.Display} behaviour here"); sb.I(2).Al("}"); } sb.B(); } if (!Settings.SupportRegen) { sb.I(2).Al($"protected override void Apply(IDomainEvent<Guid> @event)"); sb.I(2).Al("{"); sb.I(3).Al($"// todo: Apply events"); sb.I(2).Al("}"); } sb.TrimEnd(Environment.NewLine); sb.B(); sb.I(1).Al("}"); sb.Al("}"); var filename = _model.Name.ToString(); if (Settings.SupportRegen) { filename += ".generated"; } filename += ".cs"; return(new File(filename, sb.ToString(), canOverwrite: Settings.SupportRegen)); }
public IOutput Create() { if (!Settings.SupportRegen) { return(null); } var relationships = _module.FindRelationshipsByModel(_model); var sb = new StringBuilder(); sb.Al(((ISnippet) new Header.Generator(Settings, new GeneratorDetails()).Create()).Content); sb.Al($"namespace {_module.Namespace}.Common.Domain"); sb.Al("{"); sb.I(1).Al($"public partial class {_model.Name}"); sb.I(1).Al("{"); sb.I(2).A($"public {_model.Name}("); foreach (var field in _model.Fields) { sb.A($"{field.GetDataType()} {field.Name.Singular.LocalVariable}, "); } sb.TrimEnd(", "); sb.Al(")"); sb.I(2).Al("{"); foreach (var field in _model.Fields.Where(f => !f.Nullable && f.DataType == DataTypes.String)) { sb.I(3).Al($"if(string.IsNullOrWhiteSpace({field.Name.Singular.LocalVariable}))"); sb.I(4).Al($"throw new ArgumentException(\"Must include a value for {field.Name.Singular.Display}\");"); } foreach (var field in _model.Fields) { sb.I(3).Al($"{field.Name.Value} = {field.Name.Singular.LocalVariable};"); } sb.I(2).Al("}"); sb.B(); var p = "public partial "; foreach (var item in _model.Behaviours) { sb.I(2).A($"{p}void {item.Name}("); if (item.Request != null) { foreach (var field in item.Request.Fields) { sb.A($"{field.GetDataType()} {field.Name.Singular.LocalVariable}, "); } sb.TrimEnd(", "); } sb.Al(")"); sb.I(2).Al("{"); sb.I(3).Al($"// todo: Add {item.Name.Singular.Display} behaviour here"); sb.I(2).Al("}"); sb.B(); } //sb.I(2).Al($"protected override void Apply(IDomainEvent<Guid> @event)"); //sb.I(2).Al("{"); //sb.I(3).Al($"// todo: Apply events"); //sb.I(2).Al("}"); sb.I(1).Al("}"); sb.Al("}"); return(new File(_model.Name + ".cs", sb.ToString())); }