public void Setup()
        {
            _virtualNumberAssociationService = new VirtualNumberAssociationService(
                new Repository <VirtualNumberAssociation, VirtualNumberContext>(),
                new Repository <VirtualNumber, VirtualNumberContext>(),
                new Repository <User, VirtualNumberContext>());

            using (var context = new VirtualNumberContext())
            {
                context.VirtualNumbers.Add(new VirtualNumber
                {
                    PurposeId          = 1,
                    ProviderId         = 1,
                    VirtualPhoneNumber = new PhoneNumber("9722244076")
                });

                context.VirtualNumbers.Add(new VirtualNumber
                {
                    PurposeId          = 1,
                    ProviderId         = 1,
                    VirtualPhoneNumber = new PhoneNumber("9722244077")
                });

                context.VirtualNumbers.Add(new VirtualNumber
                {
                    PurposeId          = 2,
                    ProviderId         = 1,
                    VirtualPhoneNumber = new PhoneNumber("9722244078")
                });

                context.VirtualNumbers.Add(new VirtualNumber
                {
                    PurposeId          = 2,
                    ProviderId         = 1,
                    VirtualPhoneNumber = new PhoneNumber("9722244079")
                });

                context.SaveChanges();
            }
        }
        public VirtualNumberModule(
            IVirtualNumberService virtualNumberService,
            IVirtualNumberAssociationService virtualNumberAssociationService)
        {
            _virtualNumberService            = virtualNumberService;
            _virtualNumberAssociationService = virtualNumberAssociationService;

            Get["/VirtualNumbers"] = _ =>
                                     Response.AsJson(_virtualNumberService.Get());

            Post["/VirtualNumbers/Generate"] = _ =>
            {
                var virtualNumberRequest = this.Bind <VirtualNumberRequest>();

                var existingAssociation =
                    _virtualNumberAssociationService.Get(virtualNumberRequest);

                if (existingAssociation != null)
                {
                    return(Response.AsJson(existingAssociation.VirtualNumber.VirtualPhoneNumber));
                }

                var newAssociation = _virtualNumberAssociationService.Generate(virtualNumberRequest);

                return(newAssociation.VirtualNumber);
            };

            Get["/VirtualNumbers/States"] = _ =>
                                            Response.AsJson(_virtualNumberService.GetStates());

            Get["/VirtualNumbers/Purposes"] = _ =>
                                              Response.AsJson(_virtualNumberService.GetPurposes());

            Post["/VirtualNumbers/"] = _ =>
            {
                _virtualNumberService.Save(this.Bind <VirtualNumber>());

                return(Response.AsJson(HttpStatusCode.Created));
            };
        }