Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Change to file-scoped namespaces #773

Merged
merged 1 commit into from
Apr 14, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 21 additions & 22 deletions samples/Samples.Schemas.Chat/ChatMutation.cs
Original file line number Diff line number Diff line change
@@ -1,31 +1,30 @@
using GraphQL.Types;

namespace GraphQL.Samples.Schemas.Chat
namespace GraphQL.Samples.Schemas.Chat;

public class ChatMutation : ObjectGraphType<object>
{
public class ChatMutation : ObjectGraphType<object>
public ChatMutation(IChat chat)
{
public ChatMutation(IChat chat)
{
Field<MessageType>("addMessage",
arguments: new QueryArguments(
new QueryArgument<MessageInputType> { Name = "message" }
),
resolve: context =>
{
var receivedMessage = context.GetArgument<ReceivedMessage>("message");
var message = chat.AddMessage(receivedMessage);
return message;
});
}
Field<MessageType>("addMessage",
arguments: new QueryArguments(
new QueryArgument<MessageInputType> { Name = "message" }
),
resolve: context =>
{
var receivedMessage = context.GetArgument<ReceivedMessage>("message");
var message = chat.AddMessage(receivedMessage);
return message;
});
}
}

public class MessageInputType : InputObjectGraphType
public class MessageInputType : InputObjectGraphType
{
public MessageInputType()
{
public MessageInputType()
{
Field<StringGraphType>("fromId");
Field<StringGraphType>("content");
Field<DateGraphType>("sentAt");
}
Field<StringGraphType>("fromId");
Field<StringGraphType>("content");
Field<DateGraphType>("sentAt");
}
}
11 changes: 5 additions & 6 deletions samples/Samples.Schemas.Chat/ChatQuery.cs
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
using GraphQL.Types;

namespace GraphQL.Samples.Schemas.Chat
namespace GraphQL.Samples.Schemas.Chat;

public class ChatQuery : ObjectGraphType
{
public class ChatQuery : ObjectGraphType
public ChatQuery(IChat chat)
{
public ChatQuery(IChat chat)
{
Field<ListGraphType<MessageType>>("messages", resolve: context => chat.AllMessages.Take(100));
}
Field<ListGraphType<MessageType>>("messages", resolve: context => chat.AllMessages.Take(100));
}
}
15 changes: 7 additions & 8 deletions samples/Samples.Schemas.Chat/ChatSchema.cs
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
using GraphQL.Types;

namespace GraphQL.Samples.Schemas.Chat
namespace GraphQL.Samples.Schemas.Chat;

public class ChatSchema : Schema
{
public class ChatSchema : Schema
public ChatSchema(IChat chat, IServiceProvider provider) : base(provider)
{
public ChatSchema(IChat chat, IServiceProvider provider) : base(provider)
{
Query = new ChatQuery(chat);
Mutation = new ChatMutation(chat);
Subscription = new ChatSubscriptions(chat);
}
Query = new ChatQuery(chat);
Mutation = new ChatMutation(chat);
Subscription = new ChatSubscriptions(chat);
}
}
97 changes: 48 additions & 49 deletions samples/Samples.Schemas.Chat/ChatSubscriptions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,67 +4,66 @@
using GraphQL.Server.Transports.Subscriptions.Abstractions;
using GraphQL.Types;

namespace GraphQL.Samples.Schemas.Chat
namespace GraphQL.Samples.Schemas.Chat;

public class ChatSubscriptions : ObjectGraphType<object>
{
public class ChatSubscriptions : ObjectGraphType<object>
{
private readonly IChat _chat;
private readonly IChat _chat;

public ChatSubscriptions(IChat chat)
public ChatSubscriptions(IChat chat)
{
_chat = chat;
AddField(new FieldType
{
_chat = chat;
AddField(new FieldType
{
Name = "messageAdded",
Type = typeof(MessageType),
Resolver = new FuncFieldResolver<Message>(ResolveMessage),
StreamResolver = new SourceStreamResolver<Message>(Subscribe)
});

AddField(new FieldType
{
Name = "messageAddedByUser",
Arguments = new QueryArguments(
new QueryArgument<NonNullGraphType<StringGraphType>> { Name = "id" }
),
Type = typeof(MessageType),
Resolver = new FuncFieldResolver<Message>(ResolveMessage),
StreamResolver = new SourceStreamResolver<Message>(SubscribeById)
});
}
Name = "messageAdded",
Type = typeof(MessageType),
Resolver = new FuncFieldResolver<Message>(ResolveMessage),
StreamResolver = new SourceStreamResolver<Message>(Subscribe)
});

private IObservable<Message> SubscribeById(IResolveFieldContext context)
AddField(new FieldType
{
var messageContext = (MessageHandlingContext)context.UserContext;
var user = messageContext.Get<ClaimsPrincipal>("user");
Name = "messageAddedByUser",
Arguments = new QueryArguments(
new QueryArgument<NonNullGraphType<StringGraphType>> { Name = "id" }
),
Type = typeof(MessageType),
Resolver = new FuncFieldResolver<Message>(ResolveMessage),
StreamResolver = new SourceStreamResolver<Message>(SubscribeById)
});
}

string sub = "Anonymous";
if (user != null)
sub = user.Claims.FirstOrDefault(c => c.Type == "sub")?.Value;
private IObservable<Message> SubscribeById(IResolveFieldContext context)
{
var messageContext = (MessageHandlingContext)context.UserContext;
var user = messageContext.Get<ClaimsPrincipal>("user");

var messages = _chat.Messages(sub);
string sub = "Anonymous";
if (user != null)
sub = user.Claims.FirstOrDefault(c => c.Type == "sub")?.Value;

string id = context.GetArgument<string>("id");
return messages.Where(message => message.From.Id == id);
}
var messages = _chat.Messages(sub);

private Message ResolveMessage(IResolveFieldContext context)
{
var message = context.Source as Message;
string id = context.GetArgument<string>("id");
return messages.Where(message => message.From.Id == id);
}

return message;
}
private Message ResolveMessage(IResolveFieldContext context)
{
var message = context.Source as Message;

private IObservable<Message> Subscribe(IResolveFieldContext context)
{
var messageContext = (MessageHandlingContext)context.UserContext;
var user = messageContext.Get<ClaimsPrincipal>("user");
return message;
}

private IObservable<Message> Subscribe(IResolveFieldContext context)
{
var messageContext = (MessageHandlingContext)context.UserContext;
var user = messageContext.Get<ClaimsPrincipal>("user");

string sub = "Anonymous";
if (user != null)
sub = user.Claims.FirstOrDefault(c => c.Type == "sub")?.Value;
string sub = "Anonymous";
if (user != null)
sub = user.Claims.FirstOrDefault(c => c.Type == "sub")?.Value;

return _chat.Messages(sub);
}
return _chat.Messages(sub);
}
}
105 changes: 52 additions & 53 deletions samples/Samples.Schemas.Chat/IChat.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,74 +2,73 @@
using System.Reactive.Linq;
using System.Reactive.Subjects;

namespace GraphQL.Samples.Schemas.Chat
namespace GraphQL.Samples.Schemas.Chat;

public interface IChat
{
public interface IChat
{
ConcurrentStack<Message> AllMessages { get; }
ConcurrentStack<Message> AllMessages { get; }

Message AddMessage(Message message);
Message AddMessage(Message message);

IObservable<Message> Messages(string user);
IObservable<Message> Messages(string user);

Message AddMessage(ReceivedMessage message);
}
Message AddMessage(ReceivedMessage message);
}

public class Chat : IChat
{
private readonly ISubject<Message> _messageStream = new ReplaySubject<Message>(1);
public class Chat : IChat
{
private readonly ISubject<Message> _messageStream = new ReplaySubject<Message>(1);

public Chat()
public Chat()
{
AllMessages = new ConcurrentStack<Message>();
Users = new ConcurrentDictionary<string, string>
{
AllMessages = new ConcurrentStack<Message>();
Users = new ConcurrentDictionary<string, string>
{
["1"] = "developer",
["2"] = "tester"
};
}
["1"] = "developer",
["2"] = "tester"
};
}

public ConcurrentDictionary<string, string> Users { get; set; }
public ConcurrentDictionary<string, string> Users { get; set; }

public ConcurrentStack<Message> AllMessages { get; }
public ConcurrentStack<Message> AllMessages { get; }

public Message AddMessage(ReceivedMessage message)
public Message AddMessage(ReceivedMessage message)
{
if (!Users.TryGetValue(message.FromId, out string displayName))
{
if (!Users.TryGetValue(message.FromId, out string displayName))
{
displayName = "(unknown)";
}

return AddMessage(new Message
{
Content = message.Content,
SentAt = message.SentAt ?? DateTime.UtcNow,
From = new MessageFrom
{
DisplayName = displayName,
Id = message.FromId
}
});
displayName = "(unknown)";
}

public Message AddMessage(Message message)
return AddMessage(new Message
{
AllMessages.Push(message);
_messageStream.OnNext(message);
return message;
}
Content = message.Content,
SentAt = message.SentAt ?? DateTime.UtcNow,
From = new MessageFrom
{
DisplayName = displayName,
Id = message.FromId
}
});
}

public IObservable<Message> Messages(string user)
{
return _messageStream
.Select(message =>
{
message.Sub = user;
return message;
})
.AsObservable();
}
public Message AddMessage(Message message)
{
AllMessages.Push(message);
_messageStream.OnNext(message);
return message;
}

public void AddError(Exception exception) => _messageStream.OnError(exception);
public IObservable<Message> Messages(string user)
{
return _messageStream
.Select(message =>
{
message.Sub = user;
return message;
})
.AsObservable();
}

public void AddError(Exception exception) => _messageStream.OnError(exception);
}
15 changes: 7 additions & 8 deletions samples/Samples.Schemas.Chat/Message.cs
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
namespace GraphQL.Samples.Schemas.Chat
namespace GraphQL.Samples.Schemas.Chat;

public class Message
{
public class Message
{
public MessageFrom From { get; set; }
public MessageFrom From { get; set; }

public string Sub { get; set; }
public string Sub { get; set; }

public string Content { get; set; }
public string Content { get; set; }

public DateTime? SentAt { get; set; }
}
public DateTime? SentAt { get; set; }
}
11 changes: 5 additions & 6 deletions samples/Samples.Schemas.Chat/MessageFrom.cs
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
namespace GraphQL.Samples.Schemas.Chat
namespace GraphQL.Samples.Schemas.Chat;

public class MessageFrom
{
public class MessageFrom
{
public string Id { get; set; }
public string Id { get; set; }

public string DisplayName { get; set; }
}
public string DisplayName { get; set; }
}
13 changes: 6 additions & 7 deletions samples/Samples.Schemas.Chat/MessageFromType.cs
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
using GraphQL.Types;

namespace GraphQL.Samples.Schemas.Chat
namespace GraphQL.Samples.Schemas.Chat;

public class MessageFromType : ObjectGraphType<MessageFrom>
{
public class MessageFromType : ObjectGraphType<MessageFrom>
public MessageFromType()
{
public MessageFromType()
{
Field(o => o.Id);
Field(o => o.DisplayName);
}
Field(o => o.Id);
Field(o => o.DisplayName);
}
}
Loading