Closed
Description
While getting the workflow details using the endpoint "/workflows/{id}" with response as Task<NovuResponse> is is found that the for each workflow steps for email type it should return "EmailMessageTemplate" but instead it is returning "InAppMessageTemplate".
To fix this need to change the MessageTemplateConverter class:
from
public class MessageTemplateConverter : JsonCreationConverter<IMessageTemplate>
{
protected override IMessageTemplate Create(Type objectType, JObject jObject)
{
if (jObject == null)
{
throw new ArgumentNullException(nameof(jObject));
}
var typeVal = jObject.SelectToken(nameof(IMessageTemplate.Type).ToLower());
if (typeVal is not null)
{
var isEnum = typeVal.ToString().TryParseEnumMember<StepTypeEnum>(out var typeEnum);
if (isEnum)
{
return typeEnum switch
{
StepTypeEnum.InApp => new InAppMessageTemplate(),
StepTypeEnum.Email => new InAppMessageTemplate(),
StepTypeEnum.Sms => new SmsMessageTemplate(),
StepTypeEnum.Chat => new ChatMessageTemplate(),
StepTypeEnum.Push => new PushMessageTemplate(),
StepTypeEnum.Digest => new DigestMessageTemplate(),
StepTypeEnum.Trigger => new TriggerMessageTemplate(),
StepTypeEnum.Delay => new DelayMessageTemplate(),
_ => throw new InvalidOperationException($"Unknown type {typeEnum}"),
};
}
}
return default;
}
}
it is found that the return type for Email is StepTypeEnum.Email => new InAppMessageTemplate(),
it should be StepTypeEnum.Email => new EmailMessageTemplate(),
to :
public class MessageTemplateConverter : JsonCreationConverter<IMessageTemplate>
{
protected override IMessageTemplate Create(Type objectType, JObject jObject)
{
if (jObject == null)
{
throw new ArgumentNullException(nameof(jObject));
}
// All the types have the discriminator 'type' although the actual enum is different and hence not on the interface
var typeVal = jObject.SelectToken(nameof(IMessageTemplate.Type).ToLower());
if (typeVal is not null)
{
var isEnum = typeVal.ToString().TryParseEnumMember<StepTypeEnum>(out var typeEnum);
if (isEnum)
{
return typeEnum switch
{
StepTypeEnum.InApp => new InAppMessageTemplate(),
StepTypeEnum.Email => new `EmailMessageTemplate(),
StepTypeEnum.Sms => new SmsMessageTemplate(),
StepTypeEnum.Chat => new ChatMessageTemplate(),
StepTypeEnum.Push => new PushMessageTemplate(),
StepTypeEnum.Digest => new DigestMessageTemplate(),
StepTypeEnum.Trigger => new TriggerMessageTemplate(),
StepTypeEnum.Delay => new DelayMessageTemplate(),
_ => throw new InvalidOperationException($"Unknown type {typeEnum}"),
};
}
}
return default;
}
}