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)); }