Esempio n. 1
0
        protected override async Task <UserLogin> HandleInput(UserRegisterParams input)
        {
            using (var connection = database.GetConnection()) {
                using (var transaction = connection.BeginTransaction()) {
                    IUserRepo         userRepo  = database.GetRepo <IUserRepo>(connection);
                    ISpaceRepo        spaceRepo = database.GetRepo <ISpaceRepo>(connection);
                    ISubscriptionRepo subRepo   = database.GetRepo <ISubscriptionRepo>(connection);

                    // Check that the email is free first.
                    if (!String.IsNullOrWhiteSpace(input.Email))
                    {
                        User?emailInUse = await userRepo.FindByEmail(input.Email);

                        if (emailInUse != null)
                        {
                            throw new CollisionException("Email is already in use");
                        }
                    }

                    User?usernameInUse = await userRepo.FindByUsername(input.Username);

                    if (usernameInUse != null)
                    {
                        throw new CollisionException("Username is unavailable");
                    }

                    User user = new User()
                    {
                        Username     = input.Username,
                        PasswordHash = passwordHasher.Hash(input.Password),
                        Email        = StringUtils.NullifyWhiteSpace(input.Email),
                        JoinedDate   = System.DateTime.UtcNow
                    };

                    await userRepo.Add(user);

                    // Subscribe the user to the default spaces.
                    IEnumerable <Space> defaultSpaces = await spaceRepo.FindDefault();

                    IEnumerable <Subscription> defaultSubscriptions = defaultSpaces.Select(space => new Subscription()
                    {
                        User = user, Space = space
                    });

                    foreach (Subscription s in defaultSubscriptions)
                    {
                        await subRepo.Add(s);

                        s.Space.SubscriptionCount++;
                        await spaceRepo.Update(s.Space);
                    }

                    UserView userView  = userMapper.Map(user);
                    string   authToken = tokenHandler.IssueToken(user);

                    transaction.Commit();
                    return(new UserLogin(userView, authToken));
                }
            }
        }
        public async Task Handle(UserRegisterEvent domainEvent)
        {
            IEnumerable <Space> defaultSpaces = await spaceRepo.FindDefault();

            IEnumerable <Subscription> subs = defaultSpaces.Select(s => subscriptionFactory.CreateFor(domainEvent.User, s));

            foreach (Subscription s in subs)
            {
                await subscriptionRepo.Add(s);
            }
        }
Esempio n. 3
0
        public async Task<Subscription> CreateSubscription(SubscriptionCreate create, User user) {
            Space? space = await spaceRepo.FindByName(create.Space);

            if (space == null) {
                throw new NotFoundException($"No space with name {create.Space} found.");
            }

            Subscription s = factory.CreateFor(user, space);
            await repo.Add(s);
            await bus.Dispatch(new SubscriptionCreateEvent(s));

            return s;
        }
Esempio n. 4
0
        protected override async Task <SubscriptionView> HandleInput(SubscriptionCreateParams input)
        {
            using (var connection = database.GetConnection()) {
                ISpaceRepo        spaceRepo = database.GetRepo <ISpaceRepo>(connection);
                ISubscriptionRepo subRepo   = database.GetRepo <ISubscriptionRepo>(connection);

                //Check to see if the Space exists first
                Space?space = await spaceRepo.FindByName(input.Space);

                if (space == null)
                {
                    throw new InvalidOperationException($"No space with name {input.Space} exists.");
                }

                //Ensure no sub for this combo is already in place
                Subscription?existingSub = await subRepo.FindByUserAndSpace(input.User.Username, input.Space);

                if (existingSub != null)
                {
                    return(subscriptionMapper.Map(existingSub));
                }

                //Create the subscription
                Subscription sub = new Subscription()
                {
                    Space = space,
                    User  = input.User
                };

                await subRepo.Add(sub);

                //Update sub count
                space.SubscriptionCount++;

                await spaceRepo.Update(space);

                return(subscriptionMapper.Map(sub));
            }
        }