public async Task HandleAsync(CreateNoteInSqliteCommand command) { using (var context = _factory.CreateContext()) { var note = _mapper.MapTo <Note>(command); note.Id = Guid.NewGuid(); note.NeedSynchronization = true; note.StatusSynchronization = SynchronizationStatusEnum.NeedInsert; try { var(lot, lat) = await _geolocationService.GeLocationAsync(); note.Latitude = lat; note.Longitude = lot; } catch (PermissionException) { } note.CreatedAt = DateTime.UtcNow; await context.AddAsync(note); await context.SaveChangesAsync(); NPublisher.PublishIt(new NewNotesMessage(note)); } }
public async Task <ICollection <Note> > HandleAsync(GetActiveNotesQuery query) { using (var context = _factory.CreateContext()) { var list = await context.Notes .Where(x => x.Status == StatusEnum.Normal) .OrderByDescending(x => x.CreatedAt) .Skip(query.Page * query.PageSize) .Take(query.PageSize) .ToListAsync(); return(_mapper.MapTo <ICollection <Note> >(list)); } }
public async Task SynchronizeAsync(CancellationToken cts) { await _synchronizationSemaphore.WaitAsync(cts); try { var current = Connectivity.NetworkAccess; if (current != NetworkAccess.Internet) { return; } using (var dbContext = _contextFactory.CreateContext()) { var existed = await dbContext.Synchronizations.ToListAsync(cts); var toInsert = GetDefaultSynchronizations().Where(x => !existed.Any(e => e.Type == x.Type)); await dbContext.Synchronizations.AddRangeAsync(toInsert, cts); var lastSyncs = await dbContext.Synchronizations.AsTracking().ToListAsync(cts); foreach (var x in lastSyncs) { await SynchronizeAsync(x, dbContext, cts); } await dbContext.SaveChangesAsync(cts); } } catch (Exception ex) { Console.WriteLine(ex); } finally { _synchronizationSemaphore.Release(); } }