VoipService: refactor mapping
This commit is contained in:
parent
34a9067aec
commit
4a61f9fce5
@ -10,9 +10,9 @@
|
||||
public Guid AnsweredBy { get; set; }
|
||||
public DateTime DialDate { get; set; }
|
||||
public int DialDuration { get; set; }
|
||||
public string RecordSid { get; set; }
|
||||
public string RecordUrl { get; set; }
|
||||
public int RecordDuration { get; set; }
|
||||
public string Sid { get; set; }
|
||||
public string Uri { get; set; }
|
||||
public int Duration { get; set; }
|
||||
public decimal RecordPrice { get; set; }
|
||||
public int ContactId { get; set; }
|
||||
public decimal Price { get; set; }
|
||||
@ -86,19 +86,19 @@
|
||||
.HasColumnName("price")
|
||||
.HasColumnType("decimal(10,4)");
|
||||
|
||||
entity.Property(e => e.RecordDuration).HasColumnName("record_duration");
|
||||
entity.Property(e => e.Duration).HasColumnName("record_duration");
|
||||
|
||||
entity.Property(e => e.RecordPrice)
|
||||
.HasColumnName("record_price")
|
||||
.HasColumnType("decimal(10,4)");
|
||||
|
||||
entity.Property(e => e.RecordSid)
|
||||
entity.Property(e => e.Sid)
|
||||
.HasColumnName("record_sid")
|
||||
.HasColumnType("varchar(50)")
|
||||
.HasCharSet("utf8")
|
||||
.UseCollation("utf8_general_ci");
|
||||
|
||||
entity.Property(e => e.RecordUrl)
|
||||
entity.Property(e => e.Uri)
|
||||
.HasColumnName("record_url")
|
||||
.HasColumnType("text")
|
||||
.HasCharSet("utf8")
|
||||
@ -157,18 +157,18 @@
|
||||
.HasColumnType("numeric(10,4)")
|
||||
.HasDefaultValueSql("NULL");
|
||||
|
||||
entity.Property(e => e.RecordDuration).HasColumnName("record_duration");
|
||||
entity.Property(e => e.Duration).HasColumnName("record_duration");
|
||||
|
||||
entity.Property(e => e.RecordPrice)
|
||||
.HasColumnName("record_price")
|
||||
.HasColumnType("numeric(10,4)");
|
||||
|
||||
entity.Property(e => e.RecordSid)
|
||||
entity.Property(e => e.Sid)
|
||||
.HasColumnName("record_sid")
|
||||
.HasMaxLength(50)
|
||||
.HasDefaultValueSql("NULL");
|
||||
|
||||
entity.Property(e => e.RecordUrl).HasColumnName("record_url");
|
||||
entity.Property(e => e.Uri).HasColumnName("record_url");
|
||||
|
||||
entity.Property(e => e.Status).HasColumnName("status");
|
||||
|
||||
|
@ -120,14 +120,14 @@ public class VoipDao : AbstractDao
|
||||
{
|
||||
TenantId = TenantID,
|
||||
Id = call.Id,
|
||||
NumberFrom = call.From,
|
||||
NumberTo = call.To,
|
||||
NumberFrom = call.NumberFrom,
|
||||
NumberTo = call.NumberTo,
|
||||
ContactId = call.ContactId
|
||||
};
|
||||
|
||||
if (!string.IsNullOrEmpty(call.ParentID))
|
||||
if (!string.IsNullOrEmpty(call.ParentCallId))
|
||||
{
|
||||
voipCall.ParentCallId = call.ParentID;
|
||||
voipCall.ParentCallId = call.ParentCallId;
|
||||
}
|
||||
|
||||
if (call.Status.HasValue)
|
||||
@ -159,19 +159,19 @@ public class VoipDao : AbstractDao
|
||||
|
||||
if (call.VoipRecord != null)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(call.VoipRecord.Id))
|
||||
if (!string.IsNullOrEmpty(call.VoipRecord.Sid))
|
||||
{
|
||||
voipCall.RecordSid = call.VoipRecord.Id;
|
||||
voipCall.Sid = call.VoipRecord.Sid;
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(call.VoipRecord.Uri))
|
||||
{
|
||||
voipCall.RecordUrl = call.VoipRecord.Uri;
|
||||
voipCall.Uri = call.VoipRecord.Uri;
|
||||
}
|
||||
|
||||
if (call.VoipRecord.Duration != 0)
|
||||
{
|
||||
voipCall.RecordDuration = call.VoipRecord.Duration;
|
||||
voipCall.Duration = call.VoipRecord.Duration;
|
||||
}
|
||||
|
||||
if (call.VoipRecord.Price != default)
|
||||
@ -200,11 +200,11 @@ public class VoipDao : AbstractDao
|
||||
|
||||
var calls = _mapper.Map<List<CallContact>, IEnumerable<VoipCall>>(query.ToList());
|
||||
|
||||
calls = calls.GroupJoin(calls, call => call.Id, h => h.ParentID, (call, h) =>
|
||||
calls = calls.GroupJoin(calls, call => call.Id, h => h.ParentCallId, (call, h) =>
|
||||
{
|
||||
call.ChildCalls.AddRange(h);
|
||||
return call;
|
||||
}).Where(r => string.IsNullOrEmpty(r.ParentID)).ToList();
|
||||
}).Where(r => string.IsNullOrEmpty(r.ParentCallId)).ToList();
|
||||
|
||||
return calls;
|
||||
}
|
||||
@ -298,44 +298,6 @@ public class VoipDao : AbstractDao
|
||||
return GetProvider().GetPhone(r);
|
||||
}
|
||||
|
||||
private VoipCall ToCall(CallContact dbVoipCall)
|
||||
{
|
||||
var call = new VoipCall
|
||||
{
|
||||
Id = dbVoipCall.DbVoipCall.Id,
|
||||
ParentID = dbVoipCall.DbVoipCall.ParentCallId,
|
||||
From = dbVoipCall.DbVoipCall.NumberFrom,
|
||||
To = dbVoipCall.DbVoipCall.NumberTo,
|
||||
AnsweredBy = dbVoipCall.DbVoipCall.AnsweredBy,
|
||||
DialDate = _tenantUtil.DateTimeFromUtc(dbVoipCall.DbVoipCall.DialDate),
|
||||
DialDuration = dbVoipCall.DbVoipCall.DialDuration,
|
||||
Price = dbVoipCall.DbVoipCall.Price,
|
||||
Status = (VoipCallStatus)dbVoipCall.DbVoipCall.Status,
|
||||
VoipRecord = new VoipRecord
|
||||
{
|
||||
Id = dbVoipCall.DbVoipCall.RecordSid,
|
||||
Uri = dbVoipCall.DbVoipCall.RecordUrl,
|
||||
Duration = dbVoipCall.DbVoipCall.RecordDuration,
|
||||
Price = dbVoipCall.DbVoipCall.RecordPrice
|
||||
}
|
||||
};
|
||||
|
||||
if (dbVoipCall.CrmContact != null)
|
||||
{
|
||||
call.ContactId = dbVoipCall.CrmContact.Id;
|
||||
call.ContactIsCompany = dbVoipCall.CrmContact.IsCompany;
|
||||
call.ContactTitle = call.ContactIsCompany
|
||||
? dbVoipCall.CrmContact.CompanyName
|
||||
: dbVoipCall.CrmContact.FirstName == null || dbVoipCall.CrmContact.LastName == null ? null : $"{dbVoipCall.CrmContact.FirstName} {dbVoipCall.CrmContact.LastName}";
|
||||
}
|
||||
else
|
||||
{
|
||||
call.ContactId = 0;
|
||||
}
|
||||
|
||||
return call;
|
||||
}
|
||||
|
||||
public Consumer Consumer
|
||||
{
|
||||
get { return _consumerFactory.GetByKey("twilio"); }
|
||||
|
@ -1,20 +1,12 @@
|
||||
namespace ASC.VoipService.Mappings;
|
||||
|
||||
[Scope]
|
||||
public class CallConverter : ITypeConverter<CallContact, VoipCall>
|
||||
public class CallTypeConverter : ITypeConverter<CallContact, VoipCall>
|
||||
{
|
||||
public VoipCall Convert(CallContact source, VoipCall destination, ResolutionContext context)
|
||||
{
|
||||
var result = context.Mapper.Map<VoipCall>(source.DbVoipCall);
|
||||
result.ParentID = source.DbVoipCall.ParentCallId;
|
||||
result.To = source.DbVoipCall.NumberTo;
|
||||
result.VoipRecord = new VoipRecord
|
||||
{
|
||||
Id = source.DbVoipCall.RecordSid,
|
||||
Uri = source.DbVoipCall.RecordUrl,
|
||||
Duration = source.DbVoipCall.RecordDuration,
|
||||
Price = source.DbVoipCall.RecordPrice
|
||||
};
|
||||
var result = context.Mapper.Map<DbVoipCall, VoipCall>(source.DbVoipCall);
|
||||
result.VoipRecord = context.Mapper.Map<DbVoipCall, VoipRecord>(source.DbVoipCall);
|
||||
|
||||
if (source.CrmContact != null)
|
||||
{
|
||||
@ -37,6 +29,6 @@ public class EventTypeConverterExtension
|
||||
{
|
||||
public static void Register(DIHelper services)
|
||||
{
|
||||
services.TryAdd<CallConverter>();
|
||||
services.TryAdd<CallTypeConverter>();
|
||||
}
|
||||
}
|
@ -55,7 +55,7 @@ namespace ASC.VoipService.Twilio
|
||||
Url = new System.Uri(Settings.Connect(contactId: contactId))
|
||||
}, _twilio);
|
||||
|
||||
return new VoipCall { Id = call.Sid, From = call.From, To = call.To };
|
||||
return new VoipCall { Id = call.Sid, NumberFrom = call.From, NumberTo = call.To };
|
||||
}
|
||||
|
||||
public override VoipCall LocalCall(string to)
|
||||
@ -66,7 +66,7 @@ namespace ASC.VoipService.Twilio
|
||||
public override VoipCall RedirectCall(string callId, string to)
|
||||
{
|
||||
var call = CallResource.Update(callId, url: new System.Uri(Settings.Redirect(to)), method: HttpMethod.Post, client: _twilio);
|
||||
return new VoipCall { Id = call.Sid, To = to };
|
||||
return new VoipCall { Id = call.Sid, NumberTo = to };
|
||||
}
|
||||
|
||||
public override VoipCall HoldUp(string callId)
|
||||
|
@ -58,7 +58,7 @@ namespace ASC.VoipService.Twilio
|
||||
|
||||
public VoipRecord GetRecord(string callId, string recordSid)
|
||||
{
|
||||
var result = new VoipRecord { Id = recordSid };
|
||||
var result = new VoipRecord { Sid = recordSid };
|
||||
var count = 6;
|
||||
|
||||
while (count > 0)
|
||||
|
@ -28,9 +28,9 @@ namespace ASC.VoipService;
|
||||
public class VoipCall : IMapFrom<CallContact>
|
||||
{
|
||||
public string Id { get; set; }
|
||||
public string ParentID { get; set; }
|
||||
public string From { get; set; }
|
||||
public string To { get; set; }
|
||||
public string ParentCallId { get; set; }
|
||||
public string NumberFrom { get; set; }
|
||||
public string NumberTo { get; set; }
|
||||
public Guid AnsweredBy { get; set; }
|
||||
public DateTime DialDate { get; set; }
|
||||
public int DialDuration { get; set; }
|
||||
@ -55,7 +55,7 @@ public class VoipCall : IMapFrom<CallContact>
|
||||
profile.CreateMap<DbVoipCall, VoipCall>();
|
||||
|
||||
profile.CreateMap<CallContact, VoipCall>()
|
||||
.ConvertUsing<CallConverter>();
|
||||
.ConvertUsing<CallTypeConverter>();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -23,6 +23,8 @@
|
||||
*
|
||||
*/
|
||||
|
||||
using AutoMapper;
|
||||
|
||||
namespace ASC.VoipService;
|
||||
|
||||
public class VoipPhone
|
||||
@ -72,10 +74,16 @@ public class VoipPhone
|
||||
}
|
||||
}
|
||||
|
||||
public class VoipRecord
|
||||
public class VoipRecord : IMapFrom<DbVoipCall>
|
||||
{
|
||||
public string Id { get; set; }
|
||||
public string Sid { get; set; }
|
||||
public string Uri { get; set; }
|
||||
public int Duration { get; set; }
|
||||
public decimal Price { get; set; }
|
||||
|
||||
public void Mapping(Profile profile)
|
||||
{
|
||||
profile.CreateMap<DbVoipCall, VoipRecord>()
|
||||
.ForMember(dest => dest.Price, opt => opt.MapFrom(src => src.RecordPrice));
|
||||
}
|
||||
}
|
@ -800,15 +800,15 @@ namespace ASC.CRM.Api
|
||||
var call = dao.GetCall(callId) ?? new VoipCall();
|
||||
|
||||
call.Id = callId;
|
||||
call.From = Update.IfNotEmptyAndNotEquals(call.From, from);
|
||||
call.To = Update.IfNotEmptyAndNotEquals(call.To, to);
|
||||
call.NumberFrom = Update.IfNotEmptyAndNotEquals(call.NumberFrom, from);
|
||||
call.NumberTo = Update.IfNotEmptyAndNotEquals(call.NumberTo, to);
|
||||
call.AnsweredBy = Update.IfNotEmptyAndNotEquals(call.AnsweredBy, answeredBy);
|
||||
|
||||
try
|
||||
{
|
||||
if (call.ContactId == 0)
|
||||
{
|
||||
var contactPhone = call.Status == VoipCallStatus.Incoming || call.Status == VoipCallStatus.Answered ? call.From : call.To;
|
||||
var contactPhone = call.Status == VoipCallStatus.Incoming || call.Status == VoipCallStatus.Answered ? call.NumberFrom : call.NumberTo;
|
||||
if (!string.IsNullOrEmpty(contactId))
|
||||
{
|
||||
call.ContactId = Convert.ToInt32(contactId);
|
||||
|
@ -86,7 +86,7 @@ namespace ASC.Web.CRM.Classes
|
||||
var dao = _daoFactory.GetVoipDao();
|
||||
var call = dao.GetCall(callHistory.Id) ?? callHistory;
|
||||
|
||||
if (string.IsNullOrEmpty(call.ParentID))
|
||||
if (string.IsNullOrEmpty(call.ParentCallId))
|
||||
{
|
||||
GetContact(call);
|
||||
}
|
||||
@ -121,9 +121,9 @@ namespace ASC.Web.CRM.Classes
|
||||
call.VoipRecord = new VoipRecord();
|
||||
}
|
||||
|
||||
if (string.IsNullOrEmpty(call.VoipRecord.Id))
|
||||
if (string.IsNullOrEmpty(call.VoipRecord.Sid))
|
||||
{
|
||||
call.VoipRecord.Id = callHistory.VoipRecord.Id;
|
||||
call.VoipRecord.Sid = callHistory.VoipRecord.Sid;
|
||||
}
|
||||
|
||||
if (call.VoipRecord.Price == default(decimal))
|
||||
@ -193,7 +193,7 @@ namespace ASC.Web.CRM.Classes
|
||||
return null;
|
||||
}
|
||||
|
||||
var contactPhone = call.Status == VoipCallStatus.Incoming || call.Status == VoipCallStatus.Answered ? call.From : call.To;
|
||||
var contactPhone = call.Status == VoipCallStatus.Incoming || call.Status == VoipCallStatus.Answered ? call.NumberFrom : call.NumberTo;
|
||||
|
||||
var newContactIds = _daoFactory.GetContactDao().GetContactIDsByContactInfo(ContactInfoType.Phone, contactPhone.TrimStart('+'), null, true);
|
||||
|
||||
@ -262,9 +262,9 @@ namespace ASC.Web.CRM.Classes
|
||||
|
||||
call = voipEngine.SaveOrUpdateCall(call);
|
||||
|
||||
if (!string.IsNullOrEmpty(call.VoipRecord.Id))
|
||||
if (!string.IsNullOrEmpty(call.VoipRecord.Sid))
|
||||
{
|
||||
call.VoipRecord = _voipDao.GetProvider().GetRecord((string)call.Id, (string)call.VoipRecord.Id);
|
||||
call.VoipRecord = _voipDao.GetProvider().GetRecord((string)call.Id, (string)call.VoipRecord.Sid);
|
||||
voipEngine.SaveOrUpdateCall(call);
|
||||
}
|
||||
|
||||
|
@ -61,8 +61,8 @@ namespace ASC.CRM.Mapping
|
||||
var result = new VoipCallDto
|
||||
{
|
||||
Id = source.Id,
|
||||
From = source.From,
|
||||
To = source.To,
|
||||
From = source.NumberFrom,
|
||||
To = source.NumberTo,
|
||||
Status = source.Status,
|
||||
AnsweredBy = _employeeWraperHelper.Get(source.AnsweredBy),
|
||||
DialDate = _apiDateTimeHelper.Get(source.DialDate),
|
||||
|
Loading…
Reference in New Issue
Block a user