Refactoring conversion of data to view model, switching to FillViewModel

This commit is contained in:
rockstardev 2020-06-14 23:17:21 -05:00
parent ffa04b625a
commit 07efa87fe5
3 changed files with 18 additions and 16 deletions

View file

@ -10,19 +10,10 @@ namespace BTCPayServer.Events.Notifications
public string Version { get; set; }
public override NotificationViewModel ToViewModel(NotificationData data)
public override void FillViewModel(NotificationViewModel vm)
{
var casted = JsonConvert.DeserializeObject<NewVersionNotification>(ZipUtils.Unzip(data.Blob));
var obj = new NotificationViewModel
{
Id = data.Id,
Created = data.Created,
Body = $"New version {casted.Version} released!",
ActionLink = "https://github.com/btcpayserver/btcpayserver/releases/tag/v" + casted.Version,
Seen = data.Seen
};
return obj;
vm.Body = $"New version {Version} released!";
vm.ActionLink = $"https://github.com/btcpayserver/btcpayserver/releases/tag/v{Version}";
}
}
}

View file

@ -27,6 +27,6 @@ namespace BTCPayServer.Events.Notifications
return data;
}
public abstract NotificationViewModel ToViewModel(NotificationData data);
public abstract void FillViewModel(NotificationViewModel data);
}
}

View file

@ -31,10 +31,21 @@ namespace BTCPayServer.Models.NotificationViewModels
{
var baseType = typeof(NotificationBase);
var typeName = baseType.FullName.Replace(nameof(NotificationBase), data.NotificationType, StringComparison.OrdinalIgnoreCase);
var instance = Activator.CreateInstance(baseType.Assembly.GetType(typeName)) as NotificationBase;
var fullTypeName = baseType.FullName.Replace(nameof(NotificationBase), data.NotificationType, StringComparison.OrdinalIgnoreCase);
var parsedType = baseType.Assembly.GetType(fullTypeName);
var instance = Activator.CreateInstance(parsedType) as NotificationBase;
return instance.ToViewModel(data);
var casted = JsonConvert.DeserializeObject(ZipUtils.Unzip(data.Blob), parsedType);
var obj = new NotificationViewModel
{
Id = data.Id,
Created = data.Created,
Seen = data.Seen
};
instance.FillViewModel(obj);
return obj;
}
}
}