VoipService: refactor mapping

This commit is contained in:
Maksim Chegulov 2022-03-04 19:35:12 +03:00
parent 34a9067aec
commit 4a61f9fce5
10 changed files with 51 additions and 89 deletions

View File

@ -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");

View File

@ -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"); }

View File

@ -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>();
}
}

View File

@ -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)

View File

@ -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)

View File

@ -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>();
}
}

View File

@ -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));
}
}

View File

@ -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);

View File

@ -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);
}

View File

@ -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),