private async Task SendNotesToApi <TCommand>(Func <TCommand, Task <NoteDto> > sendAsync, Expression <Func <Note, bool> > predicate, NoteMeContext context, CancellationToken cts) where TCommand : IIdProvider { cts.ThrowIfCancellationRequested(); var toInserts = await context.Notes .AsTracking() .Where(predicate) .ToListAsync(cts); var insertsCommands = _mapper.MapTo <ICollection <TCommand> >(toInserts); foreach (var command in insertsCommands) { var created = await sendAsync.Invoke(command); var entity = toInserts.First(x => x.Id == command.Id); entity.LastSynchronization = DateTime.UtcNow; entity.CreatedAt = created.CreatedAt; entity.Status = created.Status; entity.StatusSynchronization = SynchronizationStatusEnum.Ok; } await context.SaveChangesAsync(cts); }
public async Task DispatchAsync <TCommand>(TCommand command) where TCommand : ICommandProvider { var handler = _container.Resolve <ICommandHandler <TCommand> >(); await handler.HandleAsync(command); await _context.SaveChangesAsync(); }
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 SeedAsync() { var users = _userSeeder.GetDataToSeed(); var ids = users.Select(x => x.Id); var existed = await _noteMeContext.Users.Where(x => ids.Any(s => s == x.Id)).ToListAsync(); var toInsert = users.Where(x => !existed.Any(s => s.Id == x.Id)); await _noteMeContext.AddRangeAsync(toInsert); await _noteMeContext.SaveChangesAsync(); }
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 DownloadAllAttachmentsAsync(NoteMeContext context, CancellationToken cts) { cts.ThrowIfCancellationRequested(); var attachmentsWithoutPath = await context.Attachments .AsTracking() .ToListAsync(cts); foreach (var attachment in attachmentsWithoutPath.Where(x => string.IsNullOrEmpty(x.Path) || !File.Exists(x.Path))) { cts.ThrowIfCancellationRequested(); var fullFilePath = Path.Combine(_filePathService.GetFilesDirectory(), attachment.Name); await _apiWebService.DownloadAsync(Endpoints.Attachments.Download + attachment.Id, fullFilePath); attachment.Path = fullFilePath; await context.SaveChangesAsync(cts); } }
private async Task UploadAllAttachmentsAsync( NoteMeContext context, CancellationToken cts) { cts.ThrowIfCancellationRequested(); var attachmentsToUpload = await context.Attachments .Where(x => x.StatusSynchronization == SynchronizationStatusEnum.NeedUpload) .AsTracking() .ToListAsync(cts); foreach (var attachment in attachmentsToUpload) { await _apiWebService.UploadAsync(Endpoints.Attachments.Upload, attachment.Path, attachment.Id); attachment.StatusSynchronization = SynchronizationStatusEnum.Ok; await context.SaveChangesAsync(cts); cts.ThrowIfCancellationRequested(); } }
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); }