diff --git a/zero/Numbers/NumberService.cs b/zero/Numbers/NumberService.cs index 925f9f6a..92060686 100644 --- a/zero/Numbers/NumberService.cs +++ b/zero/Numbers/NumberService.cs @@ -18,6 +18,96 @@ public class NumberService : INumberService Db = db; //RegisteredTypes = options.For().GetAll().Select(x => x as NumberType); } + + + /// + public async Task Next(string alias, DateTimeOffset? date = null, bool store = true) + { + Number number = await Get(alias); + throw new NotImplementedException(); + } + + + /// + public Task Reset(string alias) + { + throw new NotImplementedException(); + } + + + /// + public Task ResetAll(string alias) + { + throw new NotImplementedException(); + } + + + /// + public string Compile(string alias, long value, DateTimeOffset? date = null) + { + throw new NotImplementedException(); + } + + + /// + /// Create a new number implementation + /// + protected async Task Get(string alias, string template = "{number}", long startNumber = 1, int minLength = 1) + { + string id = Id(alias); + + Number number = await Db.Load(id); + bool exists = number != null; + + if (!exists) + { + number = new() + { + Id = id, + Template = template, + StartNumber = startNumber, + MinLength = minLength + }; + + await Db.Create(number); + } + else + { + bool changed = false; + + if (!number.Template.Equals(template)) + { + number.Template = template; + changed = true; + } + if (!number.StartNumber.Equals(startNumber)) + { + number.StartNumber = startNumber; + changed = true; + } + if (!number.MinLength.Equals(minLength)) + { + number.MinLength = minLength; + changed = true; + } + + if (changed) + { + await Db.Update(number); + } + } + + return number; + } + + + /// + /// Generate number ID + /// + protected string Id(string alias) + { + return "numbers." + alias; + } }