Fix CreatedAt to never change after being created
This commit is contained in:
parent
a5871e9c0b
commit
307a0b8cdc
36
imm/Imm.cs
36
imm/Imm.cs
@ -63,8 +63,8 @@ public interface Obj<T> : Obj where T : Obj<T>
|
|||||||
string reason = "Processed",
|
string reason = "Processed",
|
||||||
[CallerMemberName] string dbgName = "",
|
[CallerMemberName] string dbgName = "",
|
||||||
[CallerFilePath] string dbgPath = "",
|
[CallerFilePath] string dbgPath = "",
|
||||||
[CallerLineNumber] int dbgLine = 0 ,
|
[CallerLineNumber] int dbgLine = 0,
|
||||||
[CallerArgumentExpression("fn")] string expStr = "" );
|
[CallerArgumentExpression( "fn" )] string expStr = "" );
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -192,8 +192,8 @@ public record class Versioned<T> : Obj<T> where T : Versioned<T>
|
|||||||
string reason = "Processed",
|
string reason = "Processed",
|
||||||
[CallerMemberName] string dbgName = "",
|
[CallerMemberName] string dbgName = "",
|
||||||
[CallerFilePath] string dbgPath = "",
|
[CallerFilePath] string dbgPath = "",
|
||||||
[CallerLineNumber] int dbgLine = 0 ,
|
[CallerLineNumber] int dbgLine = 0,
|
||||||
[CallerArgumentExpression("fn")] string expStr = "" )
|
[CallerArgumentExpression( "fn" )] string expStr = "" )
|
||||||
{
|
{
|
||||||
var current = (T)this;
|
var current = (T)this;
|
||||||
var next = fn( current );
|
var next = fn( current );
|
||||||
@ -245,7 +245,7 @@ public record class Recorded<T> : Versioned<T> where T : Recorded<T>
|
|||||||
//Metadata_Versioned Obj.Meta => this.Meta;
|
//Metadata_Versioned Obj.Meta => this.Meta;
|
||||||
|
|
||||||
public Recorded() { }
|
public Recorded() { }
|
||||||
protected Recorded(Recorded<T> original) : base(original) { Meta = original.Meta; }
|
protected Recorded( Recorded<T> original ) : base( original ) { Meta = original.Meta; }
|
||||||
|
|
||||||
public virtual T Process(
|
public virtual T Process(
|
||||||
Func<T, T> fn,
|
Func<T, T> fn,
|
||||||
@ -253,12 +253,13 @@ public record class Recorded<T> : Versioned<T> where T : Recorded<T>
|
|||||||
[CallerMemberName] string dbgName = "",
|
[CallerMemberName] string dbgName = "",
|
||||||
[CallerFilePath] string dbgPath = "",
|
[CallerFilePath] string dbgPath = "",
|
||||||
[CallerLineNumber] int dbgLine = 0,
|
[CallerLineNumber] int dbgLine = 0,
|
||||||
[CallerArgumentExpression("fn")] string expStr = "")
|
[CallerArgumentExpression( "fn" )] string expStr = "" )
|
||||||
{
|
{
|
||||||
var current = (T)this;
|
var current = (T)this;
|
||||||
var next = fn(current);
|
var next = fn( current );
|
||||||
|
|
||||||
if (ReferenceEquals(current, next)) return current;
|
if( ReferenceEquals( current, next ) )
|
||||||
|
return current;
|
||||||
|
|
||||||
var newMeta = new Metadata_Recorded
|
var newMeta = new Metadata_Recorded
|
||||||
{
|
{
|
||||||
@ -272,7 +273,7 @@ public record class Recorded<T> : Versioned<T> where T : Recorded<T>
|
|||||||
};
|
};
|
||||||
|
|
||||||
var newVersion = next with { Meta = newMeta, OnChange = current.OnChange };
|
var newVersion = next with { Meta = newMeta, OnChange = current.OnChange };
|
||||||
newVersion.OnChange(current, newVersion);
|
newVersion.OnChange( current, newVersion );
|
||||||
return newVersion;
|
return newVersion;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -280,9 +281,9 @@ public record class Recorded<T> : Versioned<T> where T : Recorded<T>
|
|||||||
string reason = "Recorded",
|
string reason = "Recorded",
|
||||||
[CallerMemberName] string dbgName = "",
|
[CallerMemberName] string dbgName = "",
|
||||||
[CallerFilePath] string dbgPath = "",
|
[CallerFilePath] string dbgPath = "",
|
||||||
[CallerLineNumber] int dbgLine = 0)
|
[CallerLineNumber] int dbgLine = 0 )
|
||||||
{
|
{
|
||||||
return Process(t => t, reason, dbgName, dbgPath, dbgLine );
|
return Process( t => t, reason, dbgName, dbgPath, dbgLine );
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -294,11 +295,11 @@ public record class Timed<T> : Recorded<T> where T : Timed<T>
|
|||||||
{
|
{
|
||||||
new public Metadata_Timed Meta { get; init; } = new();
|
new public Metadata_Timed Meta { get; init; } = new();
|
||||||
//Metadata_Versioned Obj.Meta => this.Meta;
|
//Metadata_Versioned Obj.Meta => this.Meta;
|
||||||
public TimeSpan SinceLastTouch => Meta.TouchedAt - (Old?.Meta as Metadata_Timed)?.TouchedAt ?? TimeSpan.Zero;
|
public TimeSpan SinceLastTouch => Meta.TouchedAt - ( Old?.Meta as Metadata_Timed )?.TouchedAt ?? TimeSpan.Zero;
|
||||||
public TimeSpan TotalAge => Meta.TouchedAt - Meta.CreatedAt;
|
public TimeSpan TotalAge => Meta.TouchedAt - Meta.CreatedAt;
|
||||||
|
|
||||||
public Timed() { }
|
public Timed() { }
|
||||||
protected Timed(Timed<T> original) : base(original) { Meta = original.Meta; }
|
protected Timed( Timed<T> original ) : base( original ) { Meta = original.Meta; }
|
||||||
|
|
||||||
|
|
||||||
public override T Process(
|
public override T Process(
|
||||||
@ -324,7 +325,7 @@ public record class Timed<T> : Recorded<T> where T : Timed<T>
|
|||||||
LineNumber = dbgLine,
|
LineNumber = dbgLine,
|
||||||
Expression = dbgExpression,
|
Expression = dbgExpression,
|
||||||
OldObject = current,
|
OldObject = current,
|
||||||
CreatedAt = DateTime.UtcNow,
|
CreatedAt = current.Meta.CreatedAt,
|
||||||
TouchedAt = DateTime.UtcNow
|
TouchedAt = DateTime.UtcNow
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -338,9 +339,9 @@ public record class Timed<T> : Recorded<T> where T : Timed<T>
|
|||||||
string reason = "Recorded",
|
string reason = "Recorded",
|
||||||
[CallerMemberName] string dbgName = "",
|
[CallerMemberName] string dbgName = "",
|
||||||
[CallerFilePath] string dbgPath = "",
|
[CallerFilePath] string dbgPath = "",
|
||||||
[CallerLineNumber] int dbgLine = 0)
|
[CallerLineNumber] int dbgLine = 0 )
|
||||||
{
|
{
|
||||||
return Process(t => t, reason, dbgName, dbgPath, dbgLine );
|
return Process( t => t, reason, dbgName, dbgPath, dbgLine );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -354,8 +355,7 @@ public static class TimedExt
|
|||||||
[CallerFilePath] string dbgPath = "",
|
[CallerFilePath] string dbgPath = "",
|
||||||
[CallerLineNumber] int dbgLine = 0,
|
[CallerLineNumber] int dbgLine = 0,
|
||||||
[CallerArgumentExpression( "fn" )] string dbgExpression = ""
|
[CallerArgumentExpression( "fn" )] string dbgExpression = ""
|
||||||
)
|
) where T : imm.Timed<T>
|
||||||
where T : imm.Timed<T>
|
|
||||||
{
|
{
|
||||||
obj = obj.Process( fn, reason, dbgName, dbgPath, dbgLine, dbgExpression );
|
obj = obj.Process( fn, reason, dbgName, dbgPath, dbgLine, dbgExpression );
|
||||||
return obj;
|
return obj;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user