public async Task <Community> Create(string name, bool showCurrentUser, string supportEmail)
        {
            var creator = _authService.GetCurrentUser();

            var communityId = _context.Communities.Document().Id;

            var community = new Community
            {
                Id              = communityId,
                Name            = name,
                ShowCurrentUser = showCurrentUser,
                SupportEmail    = supportEmail
            };

            var membership = new CommunityMembership
            {
                Name        = creator.Username,
                Role        = CommunityRole.CommunityAdmin,
                CommunityId = communityId,
                UserId      = creator.Id
            };

            await _context.RunTransactionAsync(transaction =>
            {
                _communityRepository.Add(community, transaction);
                _membershipRepository.Add(membership, transaction);
            });

            return(community);
        }
        public async Task LendBike(Bike bike)
        {
            if (bike.HasLock)
            {
                if (!await _lockService.OpenLock(bike))
                {
                    return;
                }
            }

            bike.CurrentUser   = _userId;
            bike.Location      = null;
            bike.ReservedUntil = null;

            if (bike.StationId != null)
            {
                var station = await _stationRepository.Get(bike.CommunityId, bike.StationId);

                bike.StationId = null;

                await _context.RunTransactionAsync(transaction =>
                {
                    _stationRepository.Update(station, nameof(Station.NumberOfBikes), FieldValue.Increment(-1), transaction);
                    _bikeRepository.Update(bike, transaction);
                });

                return;
            }

            await _bikeRepository.Update(bike);
        }
Esempio n. 3
0
        private async Task <User> Add(string authId, string email)
        {
            if (string.IsNullOrEmpty(authId) || string.IsNullOrEmpty(email))
            {
                throw new ArgumentNullException();
            }

            var user = new User {
                Id = authId, Username = email
            };
            var userEmail = new UserEmail {
                Id = email, UserId = authId
            };

            await _context.RunTransactionAsync(transaction =>
            {
                _userRepository.Add(user, transaction);
                _userEmailRepository.Add(userEmail, transaction);
            });

            return(user);
        }
Esempio n. 4
0
        public Task Remove(Bike bike)
        {
            var @lock = new Lock
            {
                Id = bike.LockId ?? throw new NullReferenceException(nameof(Bike.LockId)),
                           CommunityId = bike.CommunityId,
            };

            return(_context.RunTransactionAsync(transaction =>
            {
                _bikeRepository.Update(bike, nameof(Bike.LockId), null, transaction);
                _bikeRepository.Update(bike, nameof(Bike.LockState), Lock.State.None.ToString(), transaction);
                _lockRepository.Delete(@lock, transaction);
            }));
        }
        public async Task Delete(Station station)
        {
            var bikes = await _bikeRepository.GetBikesFromStation(station);

            await _context.RunTransactionAsync(transaction =>
            {
                foreach (var bike in bikes)
                {
                    bike.StationId = null;
                    bike.Location  = station.Location;
                    _bikeRepository.Update(bike, transaction);
                }

                _stationRepository.Delete(station, transaction);
            });
        }