예제 #1
0
        //Create a venue or return 0
        public int CreateVenue(VenueDto venueDto)
        {
            VenueType    type;
            VenuePrivacy privacy;

            //parse type and privacy
            if (!Enum.TryParse <VenueType>(venueDto.Type, true, out type)
                ||
                !Enum.TryParse <VenuePrivacy>(venueDto.Privacy, true, out privacy))
            {
                return(0);
            }
            try
            {
                var venue = new Venue()
                {
                    Name     = venueDto.Name,
                    Address  = venueDto.Address,
                    Capacity = venueDto.Capacity,
                    Type     = type,
                    Privacy  = privacy
                };
                Context.Add(venue);
                Context.SaveChanges();
                return(venue.id);
            }
            catch (Exception)
            {
                return(0);
            }
        }
예제 #2
0
        //update a venue
        public Status UpdateVenue(int id, VenueDto venueDto)
        {
            var venue = Context.Venues.SingleOrDefault(v => v.id == id);

            if (venue == null)
            {
                return(Status.NotFound);
            }
            VenueType    type;
            VenuePrivacy privacy;

            //parse type and privacy
            if (!Enum.TryParse <VenueType>(venueDto.Type, true, out type)
                ||
                !Enum.TryParse <VenuePrivacy>(venueDto.Privacy, true, out privacy))
            {
                return(Status.Error);
            }
            //update venue data
            venue.Name     = venueDto.Name;
            venue.Address  = venueDto.Address;
            venue.Capacity = venueDto.Capacity;
            venue.Type     = type;
            venue.Privacy  = privacy;

            Context.Update(venue);
            Context.SaveChanges();
            return(Status.Success);
        }
예제 #3
0
        public async Task <ActionResult <VenueDto> > CreateVenue(
            [FromRoute] Guid classroomId,
            [FromBody] VenueDto venueDto)
        {
            var user = (ApplicationUser)HttpContext.Items["ApplicationUser"];

            Debug.Assert(user != null, nameof(user) + " != null");

            try
            {
                var classroom = await _classroomService.FindAsync(classroomId);

                var authorization = await _authorizationService.AuthorizeAsync(User, classroom, "IsOwner");

                if (!authorization.Succeeded)
                {
                    return(Forbid());
                }

                var venue = venueDto.ToVenue();
                venue = await _classroomService.CreateVenueAsync(venue);

                await _classroomService.AddVenueAsync(classroom, venue);

                return(Ok(venue.ToDto()));
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                return(BadRequest());
            }
        }
예제 #4
0
        /// <summary>
        /// Create a venue. A venue can not be created without layouts
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public async Task Create(VenueDto entity)
        {
            if (entity == null)
            {
                throw new ArgumentNullException();
            }

            if (!IsNameUnique(entity, true))
            {
                throw new VenueException("Such venue already exists");
            }

            if (entity.LayoutList == null || !entity.LayoutList.Any())
            {
                throw new VenueException("Incorrect state of the venue. The venue must have at least one layout");
            }

            var venueAdd = VenueParser.MapToVenue(entity);

            using (var transaction = CustomTransactionScope.GetTransactionScope())
            {
                _context.VenueRepository.Create(venueAdd);
                await _context.SaveAsync();

                entity.Id = venueAdd.Id;
                foreach (var layout in entity.LayoutList)
                {
                    layout.VenueId = venueAdd.Id;
                    await _layoutService.Create(layout);
                }

                transaction.Complete();
            }
        }
예제 #5
0
        private TMLayoutDto CreateDefaultLayoutForVenue(VenueDto obj)
        {
            var layout = new TMLayoutDto {
                Description = "defailt", VenueId = obj.Id
            };

            var area = new AreaDto
            {
                CoordX      = 0,
                CoordY      = 0,
                Description = "all size area",
            };

            var seats = new List <SeatDto>();

            for (int j = 0; j < obj.Lenght; j++)
            {
                for (int i = 0; i < obj.Weidth; i++)
                {
                    seats.Add(new SeatDto {
                        Row = j, Number = i
                    });
                }
            }

            return(CreateLayout(layout, new List <AreaDto> {
                area
            }, seats));
        }
        public async Task <ActionResult <VenueDto> > Put(int venueId, [FromBody] VenueDto dto)
        {
            try
            {
                var events = await _eventRepository.GetEvents();

                var oldVenue = events.Where(v => v.VenueId == venueId).Select(c => c.Venue).FirstOrDefault();

                if (oldVenue == null)
                {
                    return(NotFound($"Could not find venue with id {venueId}"));
                }

                var newVenue = _mapper.Map(dto, oldVenue);

                _eventRepository.Update(newVenue);

                if (await _eventRepository.Save())
                {
                    return(NoContent());
                }
            }
            catch (Exception ex)
            {
                return(this.StatusCode(StatusCodes.Status500InternalServerError, "Database Failure"));
            }

            return(BadRequest());
        }
        public static void ImportVenues()
        {
            using (WeddingsPlannerContext context = new WeddingsPlannerContext())
            {
                XDocument documentNode = XDocument.Load(Constants.VenuesPath);

                IEnumerable <XElement> venuesNode = documentNode.XPathSelectElements("venues/venue");

                foreach (XElement venueNode in venuesNode)
                {
                    string venueNodeName         = venueNode.Attribute("name")?.Value;
                    int    venueNodeNameCapacity = int.Parse(venueNode.Element("capacity").Value);
                    string venueNodeTown         = venueNode.Element("town")?.Value;

                    VenueDto venueDto = new VenueDto()
                    {
                        Name     = venueNodeName,
                        Capacity = venueNodeNameCapacity,
                        Town     = venueNodeTown
                    };

                    Venue venueEntity = new Venue()
                    {
                        Name     = venueDto.Name,
                        Capacity = venueDto.Capacity,
                        Town     = venueDto.Town
                    };

                    try
                    {
                        context.Venues.Add(venueEntity);
                        context.SaveChanges();
                        Console.WriteLine($"Successfully imported {venueEntity.Name}");
                    }
                    catch (DbEntityValidationException)
                    {
                        context.Venues.Remove(venueEntity);
                        Console.WriteLine(Messages.InvalidData);
                    }
                }

                Random random = new Random();
                foreach (Wedding wedding in context.Weddings.ToList())
                {
                    int   randomId = random.Next(1, context.Venues.Count() + 1);
                    Venue venue    = context.Venues.Find(randomId);

                    wedding.Venues.Add(venue);

                    randomId = random.Next(1, context.Venues.Count() + 1);
                    venue    = context.Venues.Find(randomId);
                    wedding.Venues.Add(venue);
                }

                context.SaveChanges();
            }
        }
예제 #8
0
        public void CreateVenueTest()
        {
            List <Venue> venues = new List <Venue>();

            venues.Add(new Venue {
                Id = 1, Address = "a", Description = "d"
            });
            venues.Add(new Venue {
                Id = 2, Address = "a2", Description = "d2"
            });
            venues.Add(new Venue {
                Id = 3, Address = "a3", Description = "d3"
            });

            VenueDto venueCreate_service = new VenueDto {
                Address = "a4", Description = "d4"
            };
            Venue venuePost = new Venue {
                Id = 4, Address = "a4", Description = "d4"
            };
            VenueDto venuePost_service = new VenueDto {
                Id = 4, Address = "a4", Description = "d4"
            };

            Mock <IVenueRepository> mockVenueRepository = new Mock <IVenueRepository>();

            mockVenueRepository.Setup(x => x.GetAll()).Returns(venues);
            mockVenueRepository.Setup(x => x.Create(It.IsAny <Venue>())).Returns(venuePost);

            Mock <ISeatService> mockSeatService = new Mock <ISeatService>();

            mockSeatService.Setup(x => x.CreateSeat(It.IsAny <SeatDto>()))
            .Returns(new SeatDto {
                Id = 1
            });

            Mock <ITMLayoutService> mockTMLayoutService = new Mock <ITMLayoutService>();

            mockTMLayoutService.Setup(x => x.CreateTMLayout(It.IsAny <TMLayoutDto>()))
            .Returns(new TMLayoutDto {
                Id = 1
            });

            Mock <IAreaService> mockAreaService = new Mock <IAreaService>();

            mockAreaService.Setup(x => x.CreateArea(It.IsAny <AreaDto>()))
            .Returns(new AreaDto {
                Id = 1
            });

            VenueService venueService = new VenueService(mockVenueRepository.Object,
                                                         mockTMLayoutService.Object, mockAreaService.Object, mockSeatService.Object);

            VenueDto venue = venueService.CreateVenue(venueCreate_service);

            venue.Should().BeEquivalentTo(venuePost_service);
        }
        private async Task EnsureAddressAndNameIsUnique(VenueDto item)
        {
            var venues = (await _venueEntityService.GetAll().ToListAsync()).AsReadOnly();

            if (venues.Any(v => v.Location == item.Location && v.Name == item.Name && v.Id != item.Id))
            {
                throw new ValidationException(Resources.StringRes.NotUniqueAddressNameMsg);
            }
        }
예제 #10
0
        public void Create_venue_without_layout_expected_exception()
        {
            //Arrange
            var venue = new VenueDto {
                Name = "Club Koko", LayoutList = new List <LayoutDto>()
            };
            var venueService = _container.Resolve <IVenueService>();

            //Assert
            Assert.ThrowsAsync <VenueException>(async() => await venueService.Create(venue));
        }
예제 #11
0
        public async Task Update(VenueDto entity)
        {
            if (entity == null)
            {
                throw new ArgumentNullException();
            }

            if (!IsNameUnique(entity, false))
            {
                throw new VenueException("Such venue already exists");
            }

            if (entity.LayoutList == null || !entity.LayoutList.Any())
            {
                throw new VenueException("Incorrect state of the venue. The venue must have at least one layout");
            }

            using (var transaction = CustomTransactionScope.GetTransactionScope())
            {
                var update = await _context.VenueRepository.GetAsync(entity.Id);

                update.Name        = entity.Name;
                update.Phone       = entity.Phone;
                update.Description = entity.Description;
                update.Address     = entity.Address;
                update.Timezone    = entity.Timezone;
                _context.VenueRepository.Update(update);
                await _context.SaveAsync();

                var existingLayouts = await _context.LayoutRepository.FindByAsync(x => x.VenueId == entity.Id);

                //find and remove layouts which were deleted
                existingLayouts.Where(list2 => entity.LayoutList.All(list1 => list1.Id != list2.Id)).ToList()
                .ForEach(x =>
                {
                    _context.LayoutRepository.Delete(x);
                });

                foreach (var layout in entity.LayoutList)
                {
                    if (layout.Id == 0)
                    {
                        layout.VenueId = update.Id;
                        await _layoutService.Create(layout);
                    }
                    else
                    {
                        await _layoutService.Update(layout);
                    }
                }

                transaction.Complete();
            }
        }
예제 #12
0
 public static Venue MapToVenue(VenueDto from)
 {
     return(new Venue
     {
         Address = from.Address,
         Description = from.Description,
         Name = from.Name,
         Phone = from.Phone,
         Timezone = from.Timezone
     });
 }
예제 #13
0
        public static VenueResponse MapDtoToResponse(this IEnumerable <VenueDto> venueDtos, List <SpaceResponse> spacesToAddToVenue)
        {
            VenueDto venueDto = venueDtos.FirstOrDefault();

            VenueResponse model = new VenueResponse
            {
                VenueId                        = venueDto.VenueId,
                Description                    = venueDto.Description,
                MUrl                           = venueDto.MUrl,
                Summary                        = venueDto.Summary,
                Title                          = venueDto.Title,
                Testimonial                    = venueDto.Testimonial,
                TestimonialContactEmail        = venueDto.TestimonialContactEmail,
                TestimonialContactName         = venueDto.TestimonialContactName,
                TestimonialContactOrganisation = venueDto.TestimonialContactOrganisation,
                Spaces                         = spacesToAddToVenue,
                VenueImages                    = new List <VenueImageDto>(),
                VenueType                      = new VenueTypeDto
                {
                    VenueTypeId = venueDto.VenueTypeId,
                    Description = venueDto.VenueTypeDescription
                },
                Address = new VenueAddress
                {
                    Postcode             = venueDto.Postcode,
                    BuildingNameOrNumber = venueDto.BuildingNameOrNumber,
                    Road    = venueDto.Road,
                    Country = venueDto.Country,
                    County  = venueDto.County,
                    State   = venueDto.State,
                    Suburb  = venueDto.Suburb,
                    Town    = venueDto.Town,
                    Village = venueDto.Village
                }
            };

            model.Address.DisplayName = model.Address.MapDisplayNameProperties();

            foreach (VenueDto venue in venueDtos)
            {
                if (venue.VenueImageId != Guid.Empty && !model.VenueImages.Any(x => x.VenueImageId == venue.VenueImageId))
                {
                    model.VenueImages.Add(new VenueImageDto
                    {
                        Base64VenueImageString = venue.Base64VenueImageString,
                        VenueId      = venue.VenueId,
                        VenueImageId = venue.VenueImageId
                    });
                }
            }

            return(model);
        }
예제 #14
0
        public void Should_Map()
        {
            // Arrange
            Venue    venue       = FakeVenues.WeiherhofSchule;
            VenueDto expectedDto = VenueDtoData.WeiherhofSchule;

            // Act
            VenueDto dto = _mapper.Map <VenueDto>(venue);

            // Assert
            dto.Should().BeEquivalentTo(expectedDto);
        }
예제 #15
0
 private static Venue ConvertToEntity(VenueDto obj)
 {
     return(new Venue
     {
         Id = obj.Id,
         Description = obj.Description,
         Address = obj.Address,
         Lenght = obj.Lenght,
         Phone = obj.Phone,
         Weidth = obj.Weidth,
     });
 }
예제 #16
0
        public async Task <VenueResponse> EditVenueAsync(VenueRequest venue, Guid venueId)
        {
            LocationIqReverseResponse locationResponse = await _locationIqProvider.GetLocationDetailsAsync(venue.Postcode);

            VenueAddress venueAddress = locationResponse.MapAddressProperties(venue.BuildingNameOrNumber);

            VenueDto venueDto = venue.MapRequestToDto(Guid.Empty, venueAddress);

            await _venueRepo.EditVenueAsync(venueDto);

            return(await GetVenueAsync(venueId));
        }
예제 #17
0
        private bool IsNameUnique(VenueDto entity, bool isCreating)
        {
            var data = from venues in _context.VenueRepository.GetList()
                       where venues.Name.Equals(entity.Name, StringComparison.OrdinalIgnoreCase)
                       select venues;

            return(isCreating ?
                   !data.Any() :
                   !(from venues in data
                     where venues.Id != entity.Id
                     select venues).Any());
        }
예제 #18
0
        public int CreateVenue(VenueDto venue)
        {
            ModelValidation.IsValidModel(venue);
            if (IsVenueExist(venue))
            {
                throw new ValidationException("Venue can't be created for this name");
            }

            var ven = _mapper.Map <Venue>(venue);

            return(_venueRepository.Add(ven));
        }
예제 #19
0
        public void CreateVenue_WhenModelValid_ShouldReturnNewId()
        {
            var venue = new VenueDto
            {
                Name  = "New Venue", Description = "Description", Address = "Address",
                Phone = "8-800-555-35-35"
            };

            var result = _venueService.CreateVenue(venue);

            Assert.AreEqual(result, ReturnIdVenue);
        }
예제 #20
0
        public void CreateVenue_WhenVenueExists_ShouldReturnValidationException()
        {
            var venue = new VenueDto
            {
                Name  = "First Venue", Description = "Description", Address = "Address",
                Phone = "8-800-555-35-35"
            };

            var exception = Assert.Throws <ValidationException>(() => _venueService.CreateVenue(venue));

            Assert.AreEqual("Venue can't be created for this name", exception.Message);
        }
예제 #21
0
 public static Venue ToVenueContract(VenueDto from)
 {
     return(new Venue
     {
         Address = from.Address,
         Description = from.Description,
         Id = from.Id,
         Name = from.Name,
         Phone = from.Phone,
         Timezone = from.Timezone,
         LayoutList = from.LayoutList.Select(x => LayoutParser.ToLayoutContract(x)).ToList()
     });
 }
예제 #22
0
        public void CreateVenue_WhenVenueExists_ShouldReturnValidationException()
        {
            using (var scope = new TransactionScope())
            {
                var venue = new VenueDto
                {
                    Name  = "First Venue", Description = "Description", Address = "Address",
                    Phone = "8-800-555-35-35"
                };

                Assert.Throws <ValidationException>(() => _venueService.CreateVenue(venue));
            }
        }
예제 #23
0
        public ActionResult <VenueDto> CreateVenue(VenueDto dto)
        {
            var adding = dataContext.Set <Venue>().Add(new Venue
            {
                Name     = dto.Name,
                Capacity = dto.Capacity
            });

            dataContext.SaveChanges();
            dto.Id = adding.Entity.Id;

            return(Created($"/api/venues/{adding.Entity.Id}", dto));
        }
예제 #24
0
        public void CreateVenue_WhenModelNotValid_ShouldReturnArgumentException()
        {
            var venue = new VenueDto
            {
                Name        = null,
                Description = "Description",
                Address     = "Address",
                Phone       = "8-800-555-35-35"
            };

            var exception = Assert.Throws <ArgumentException>(() => _venueService.CreateVenue(venue));

            Assert.AreEqual("The Name field is required.", exception.Message);
        }
예제 #25
0
        public void Venue_name__is_unique_expected_exception(string venueName)
        {
            //Arrange
            var venue = new VenueDto {
                Name = venueName
            };
            var venueService = _container.Resolve <IVenueService>();

            //Act
            var exception = Assert.CatchAsync <VenueException>(async() => await venueService.Create(venue));

            //Assert
            StringAssert.AreEqualIgnoringCase(exception.Message, "Such venue already exists");
        }
예제 #26
0
        public void Venue_name_is_unique(string venueName)
        {
            //Arrange
            var venue = new VenueDto {
                Name = venueName
            };
            var venueService = _container.Resolve <IVenueService>();

            //Act
            var exception = Assert.CatchAsync(async() => await venueService.Create(venue));

            //Assert
            Assert.That(exception.Message, Is.Not.EqualTo("Such venue already exists"));
        }
예제 #27
0
        public async Task <bool> EditVenueAsync(VenueDto venue)
        {
            using (SqlConnection con = new SqlConnection(_connectionString))
            {
                bool updateVenueResult = await con.UpdateAsync(venue);

                if (!updateVenueResult)
                {
                    throw new HttpStatusCodeResponseException(HttpStatusCode.NotModified);
                }

                return(updateVenueResult);
            }
        }
예제 #28
0
        public IActionResult PostVenue([FromBody] VenueDto venueDto)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            var id = VenueRepository.CreateVenue(venueDto);

            if (id == 0)
            {
                return(BadRequest());
            }
            venueDto.id = id;
            return(CreatedAtAction(nameof(GetVenue), new { id = id }, venueDto));
        }
예제 #29
0
        public void CreateVenue_WhenModelValid_ShouldInsertNewVenue()
        {
            using (var scope = new TransactionScope())
            {
                var venue = new VenueDto
                {
                    Name  = "New Venue", Description = "Description", Address = "Address",
                    Phone = "8-800-555-35-35"
                };

                var result = _venueService.CreateVenue(venue);

                venue.Should().BeEquivalentTo(_venueService.GetVenue(result), options => options.Excluding(x => x.Id));
            }
        }
예제 #30
0
        public static Venue ToVenue(this VenueDto venueDto)
        {
            var validId = Guid.TryParse(venueDto.Id, out var id);

            if (!validId && !string.IsNullOrWhiteSpace(venueDto.Id))
            {
                throw new Exception("Invalid Venue.Id");
            }

            return(new Venue
            {
                Id = id,
                Name = venueDto.Name
            });
        }