Пример #1
0
        public async Task <CreateMutationResponse <User> > SignUp(
            SignupInput input,
            [Service] SlackCloneDbContext dbContext,
            CancellationToken cancellationToken)
        {
            try
            {
                string salt = Guid.NewGuid().ToString("N");

                using var sha = SHA512.Create();
                byte[] hash = sha.ComputeHash(Encoding.UTF8.GetBytes(input.Password + salt));

                var user = new User
                {
                    Email        = input.Email,
                    PasswordHash = Convert.ToBase64String(hash),
                    Salt         = salt,
                    DisplayName  = input.DisplayName
                };

                dbContext.Users.Add(user);

                await dbContext.SaveChangesAsync(cancellationToken);

                return(new CreateMutationResponse <User>(true, user));
            }
            catch (DbUpdateException e)
            {
                throw new QueryException($"DbUpdateException error details - {e?.InnerException?.Message}");
            }
        }
        public async Task <CreateMutationResponse <Channel> > CreateChannel(
            CreateChannelInput input,
            [GlobalState] string currentUserEmail,
            [Service] SlackCloneDbContext dbContext,
            [Service] ITopicEventSender eventSender,
            CancellationToken cancellationToken)
        {
            try
            {
                if (string.IsNullOrEmpty(input.Name))
                {
                    throw new QueryException(
                              ErrorBuilder.New()
                              .SetMessage("The channel name can not be null.")
                              .SetCode("INVALID_INPUT")
                              .Build());
                }

                var channel = new Channel()
                {
                    Name           = input.Name,
                    Description    = input.Description,
                    CreatedAt      = DateTime.UtcNow,
                    CreatedByEmail = currentUserEmail
                };

                dbContext.Channels.Add(channel);
                await dbContext.SaveChangesAsync(cancellationToken);

                bool ok = true;

                await eventSender.SendAsync("channelCreated", channel, cancellationToken).ConfigureAwait(false);

                return(new CreateMutationResponse <Channel>(ok, channel));
            }
            catch (DbUpdateException e)
            {
                throw new QueryException($"DbUpdateException error details - {e?.InnerException?.Message}");
            }
        }
        public async Task <AddMessageToChannelResponse> AddMessageToChannel(
            AddMessageToChannelInput input,
            [GlobalState] string currentUserEmail,
            [Service] SlackCloneDbContext dbContext,
            [Service] ITopicEventSender eventSender,
            CancellationToken cancellationToken)
        {
            var message = new ChannelMessage
            {
                Id             = Guid.NewGuid(),
                ChannelId      = input.ChannelId,
                Text           = input.Text,
                CreatedAtUTC   = DateTime.UtcNow,
                CreatedByEmail = currentUserEmail,
                Likes          = 0
            };

            dbContext.ChannelMessages.Add(message);
            await dbContext.SaveChangesAsync(cancellationToken);

            await eventSender.SendAsync(input.ChannelId, message, cancellationToken).ConfigureAwait(false);

            return(new AddMessageToChannelResponse(true));
        }