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));
            }
        }
Esempio n. 2
0
        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));
            }
        }
Esempio n. 3
0
        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();
            }
        }