private async Task FetchAllResultsAsync(Domain.Synchronization.Synchronization synchronization, NoteMeContext context, CancellationToken cts) { cts.ThrowIfCancellationRequested(); var syncDate = synchronization.LastSynchronization; var hasMore = false; var allNotes = new List <Note>(); do { var filterBy = $@"{nameof(Note.CreatedAt)} > ""{syncDate}"""; var orderBy = $"{nameof(Note.CreatedAt)}-desc"; var query = new GetNotesQuery() .SetNormalWhere(filterBy) .SetNormalOrderBy(orderBy); var notes = await _webService.SendAsync <PaginationDto <NoteDto> >(HttpMethod.Get, Endpoints.Notes._ + query.ToUri()); if (!notes.Data.Any() && !allNotes.Any()) { return; } hasMore = notes.Data.Count == query.PageSize; foreach (var noteDto in notes.Data) { var note = await context.Notes.FirstOrDefaultAsync(x => x.Id == noteDto.Id, cts); if (note != null) { note.Content = noteDto.Content; note.Tags = noteDto.Tags; note.Name = noteDto.Name; } else { note = _mapper.MapTo <Note>(noteDto); if (note.Status == StatusEnum.Normal) { allNotes.Add(note); } await context.AddRangeAsync(note); } } } while (hasMore); await context.SaveChangesAsync(cts); NPublisher.PublishIt(new NewNotesMessage(allNotes)); }
public async Task HandleAsync( Domain.Synchronization.Synchronization synchronization, NoteMeContext context, CancellationToken cts) { await FetchAllAttachmentsAsync(synchronization, context, cts); await DownloadAllAttachmentsAsync(context, cts); await CreateAllAttachmentsAsync(synchronization, context, cts); await UploadAllAttachmentsAsync(context, cts); }
private async Task FetchAllAttachmentsAsync(Domain.Synchronization.Synchronization synchronization, NoteMeContext context, CancellationToken cts) { cts.ThrowIfCancellationRequested(); var syncDate = synchronization.LastSynchronization; var hasMore = false; do { var filterBy = $@"{nameof(Attachment.CreatedAt)} > ""{syncDate}"""; var orderBy = $"{nameof(Attachment.CreatedAt)}-desc"; var query = new GetAttachmentQuery() .SetNormalWhere(filterBy) .SetNormalOrderBy(orderBy); var items = await _apiWebService.SendAsync <PaginationDto <AttachmentDto> >(HttpMethod.Get, Endpoints.Attachments._ + query.ToUri()); if (!items.Data.Any()) { return; } hasMore = items.Data.Count == query.PageSize; foreach (var itemDto in items.Data) { var item = await context.Attachments.FirstOrDefaultAsync(x => x.Id == itemDto.Id, cts); if (item != null) { continue; } item = _mapper.MapTo <Attachment>(itemDto); item.StatusSynchronization = SynchronizationStatusEnum.Ok; await context.AddRangeAsync(item); } } while (hasMore); await context.SaveChangesAsync(cts); }
private async Task CreateAllAttachmentsAsync(Domain.Synchronization.Synchronization synchronization, NoteMeContext context, CancellationToken cts) { cts.ThrowIfCancellationRequested(); var toInserts = await context.Attachments .AsTracking() .Where(x => x.StatusSynchronization == SynchronizationStatusEnum.NeedInsert) .ToListAsync(cts); var insertsCommands = _mapper.MapTo <ICollection <CreateAttachmentCommand> >(toInserts); foreach (var command in insertsCommands) { var created = await _apiWebService.SendAsync <AttachmentDto>(HttpMethod.Post, Endpoints.Attachments._, command); var entity = toInserts.First(x => x.Id == command.Id); entity.LastSynchronization = DateTime.UtcNow; entity.CreatedAt = created.CreatedAt; entity.StatusSynchronization = SynchronizationStatusEnum.NeedUpload; } await context.SaveChangesAsync(cts); }
public async Task HandleAsync(Domain.Synchronization.Synchronization synchronization, NoteMeContext context, CancellationToken cts) { await UpdateAllNotesAsync(context, cts); await FetchAllResultsAsync(synchronization, context, cts); await SendAllNotesAsync(context, cts); }