using System; using System.Linq; using System.Threading.Tasks; using MongoDB.Bson; using MongoDB.Driver; using MongoDB.Driver.Linq; using Sony.ChartBot.Entities.MessengerApi; using Sony.ChartBot.Entities.Storage; namespace Sony.ChartBot.Repository { public class ConversationRepository : BaseRepository { public ConversationRepository() : base(DbConstants.Database, DbConstants.MessageCollection) { } public ConversationRepository(string database) : base(database, DbConstants.MessageCollection) { } public virtual async Task GetLastAskedQuestionToUserAsync(string recipientId) { var record = await Collection.AsQueryable() .OrderByDescending(m => m.TimestampUtc) .FirstOrDefaultAsync(m => m.RecipientId == recipientId); return record; } public virtual async Task AddMessageToLogAsync( MessagingData input, MessageToSend message, ResponseType responseType, InquiryType inquiryType, string trackReference = null) { var inputText = input.message?.text ?? input.message?.quick_reply?.payload ?? input.postback?.payload; var messageContent = message.text; if (messageContent == null && message.attachment != null) { messageContent = Newtonsoft.Json.JsonConvert.SerializeObject(message.attachment); }; var record = new MessageRecord { Id = ObjectId.GenerateNewId(), MessengerMessageId = input.message?.mid, MessageContent = messageContent, RecipientId = input.sender.id, OriginalInput = inputText, InquiryType = inquiryType, ResponseType = responseType, TrackReference = trackReference, TimestampUtc = DateTime.UtcNow }; await Collection.InsertOneAsync(record); } } }