예제 #1
0
        private async Task SaveVenueDescription(VenueInfo venueInfo, Venue venue)
        {
            var lastVenueDescription = repository.VenueDescription
                                       .Where(venueDescription => venueDescription.VenueId == venue.VenueId)
                                       .OrderByDescending(description => description.ModifiedDate)
                                       .FirstOrDefault();

            if (lastVenueDescription == null ||
                lastVenueDescription.Name != venueInfo.Name ||
                lastVenueDescription.City != venueInfo.City)
            {
                var modifiedTicks = lastVenueDescription?.ModifiedDate.Ticks ?? 0;
                if (modifiedTicks != venueInfo.LastModifiedTicks)
                {
                    throw new DbUpdateConcurrencyException("A new update has occurred since you loaded the page. Please refresh and try again.");
                }

                await repository.AddAsync(new VenueDescription
                {
                    ModifiedDate = DateTime.UtcNow,
                    Venue        = venue,
                    Name         = venueInfo.Name,
                    City         = venueInfo.City
                });

                await repository.SaveChangesAsync();
            }
        }
예제 #2
0
        public async Task SaveVenue(VenueInfo venueInfo)
        {
            var venue = await repository.GetOrInsertVenue(venueInfo.VenueGuid);

            await SaveVenueDescription(venueInfo, venue);
            await SaveVenueLocation(venueInfo, venue);
            await SaveVenueTimeZone(venueInfo, venue);
        }
예제 #3
0
        public async Task <List <VenueInfo> > ListVenues()
        {
            var result = await repository.Venue
                         .Where(venue => !venue.Removed.Any())
                         .Select(venue => new
            {
                venue.VenueGuid,
                Description = venue.Descriptions
                              .OrderByDescending(d => d.ModifiedDate)
                              .FirstOrDefault()
            })
                         .ToListAsync();

            return(result
                   .Select(row => VenueInfo.FromEntities(row.VenueGuid, row.Description))
                   .ToList());
        }
예제 #4
0
        public async Task <VenueInfo> GetVenue(Guid venueGuid)
        {
            var result = await repository.Venue
                         .Where(venue => venue.VenueGuid == venueGuid &&
                                !venue.Removed.Any())
                         .Select(venue => new
            {
                venue.VenueGuid,
                Description = venue.Descriptions
                              .OrderByDescending(d => d.ModifiedDate)
                              .FirstOrDefault(),
                Location = venue.Locations
                           .OrderByDescending(d => d.ModifiedDate)
                           .FirstOrDefault(),
                TimeZone = venue.TimeZones
                           .OrderByDescending(d => d.ModifiedDate)
                           .FirstOrDefault()
            })
                         .SingleOrDefaultAsync();

            return(result == null ? null : VenueInfo.FromEntities(
                       result.VenueGuid, result.Description, result.Location, result.TimeZone));
        }
예제 #5
0
 private async Task SaveVenueLocation(VenueInfo venueInfo, Venue venue)
 {
     switch ((venueInfo.Latitude, venueInfo.Longitude))
     {