Пример #1
0
 public void AddRootItem(IApiBuilder builder, Type itemType, [CanBeNull] string rootName)
 {
     Reflect.Instance(this)
     .GetMethod(nameof(AddRootItem))
     .MakeGeneric(itemType)
     .Invoke(builder, rootName);
 }
        public static IApiBuilder Item <TItem>(this IApiBuilder builder, [NotNull] Action <IApiItemBuilder <TItem> > configureAction)
            where TItem : class, new()
        {
            builder.Item <TItem>()
            .Configure(configureAction);

            return(builder);
        }
Пример #3
0
        public void CreateApi(IApiBuilder apiBuilder)
        {
            var autoConfigurer = new AutoConfigurer(Options.RootConfiguration);

            autoConfigurer.AddApiRootProperties(apiBuilder, GetType());

            OnApiCreating(apiBuilder);
        }
Пример #4
0
        public void CreateApi(IApiBuilder apiBuilder)
        {
            var autoConfigurer = new AutoConfigurer(_configuration);

            foreach (Type itemType in _itemTypes)
            {
                autoConfigurer.AddRootItem(apiBuilder, itemType, null);
            }
        }
Пример #5
0
        private void AddRootItem <TItem>(IApiBuilder builder, [CanBeNull] string rootName)
            where TItem : class, new()
        {
            var itemBuilder = builder.Item <TItem>();

            AddItem(itemBuilder);

            if (!string.IsNullOrEmpty(rootName))
            {
                itemBuilder.RootName = rootName;
            }
        }
        protected override void OnApiCreating(IApiBuilder apiBuilder)
        {
            apiBuilder.Item <Team>(i =>
            {
                i.Identifier(t => t.Name.Replace(" ", "").ToLower())
                .HasName("key");

                i.Field(t => t.Players)
                .IsCollection(b => {
                    b.Identifier(p => p.SquadNumber);
                    b.AutoConfigure(Options.RootConfiguration);
                });
            });
        }
Пример #7
0
        public void AddApiRootProperties(IApiBuilder builder, Type contextType)
        {
            foreach (PropertyInfo property in contextType.GetProperties(BindingFlags.Public | BindingFlags.Instance))
            {
                Type rootType = property.PropertyType.GetGenericSubclass(typeof(ApiRoot <>));
                if (rootType == null)
                {
                    continue;
                }

                Type itemType = rootType.GetGenericArguments()[0];
                AddRootItem(builder, itemType, property.Name);
            }
        }
Пример #8
0
        public override IApiBuilder Configure(IApiBuilder api)
        {
            api.WithScheme("https")
            .WithHost("reqres.in")
            .RequestContentType(RequestContentTypeEnum.Json);

            api.ForRequest()
            .WithPath(path => path.Contains("/api/users/2"))
            //.MethodType(HttpMethodEnum.GET)
            .AbortRequest();
            //.BeginTamper()
            //.TamperFragment("test")
            //.TamperHeader("test", "test2")
            //.TamperMethodType(HttpMethodEnum.POST)
            //.TamperPath(path => path.Replace("/api/users/2", "/api/users/3"));

            return(api);
        }
Пример #9
0
        protected override void OnApiCreating(IApiBuilder apiBuilder)
        {
            apiBuilder.Item <Player>(i =>
            {
                i.Field(t => t.Name)
                .HasName("name");

                i.Field(t => t.Alias)
                .HasName("alias");

                i.Field(t => t.SquadNumber)
                .HasName("number");

                i.Field(t => t.Age)
                .HasName("age");
            });

            apiBuilder.Item <Team>(i =>
            {
                i.RootName = "teams";

                i.Identifier(t => t.Name.Replace(" ", "").ToLower())
                .HasName("key");

                i.Field(t => t.Name)
                .HasName("name");

                i.Field(t => t.Division)
                .HasName("division");

                i.Field(t => t.Position)
                .HasName("position");

                i.Field(t => t.Players)
                .HasName("players");
            });
        }
Пример #10
0
 public Apis()
 {
     _good = new ApiBuilder <T>();
     _bad  = new ApiBuilder <T>();
     _ugly = new ApiBuilder <T>();
 }
Пример #11
0
 protected virtual void OnApiCreating(IApiBuilder apiBuilder)
 {
 }
Пример #12
0
 public abstract IApiBuilder Configure(IApiBuilder api);
Пример #13
0
        //public ApiRoot<League> Leagues { get; set; }

        protected override void OnApiCreating(IApiBuilder apiBuilder)
        {
            apiBuilder.Item <League>(e =>
            {
                e.Field(l => l.Name);

                e.Identifier(l => l.Name.Replace(" ", string.Empty).ToLower());

                e.Field(l => l.Teams
                        .Select(t => new
                {
                    Team   = t,
                    Wins   = t.Fixtures.Count(f => f.Fixture.Goals.Count(g => g.Player.Team == t) > f.Fixture.Goals.Count(g => g.Player.Team == t)),
                    Draws  = t.Fixtures.Count(f => f.Fixture.Goals.Count(g => g.Player.Team == t) == f.Fixture.Goals.Count(g => g.Player.Team == t)),
                    Losses = t.Fixtures.Count(f => f.Fixture.Goals.Count(g => g.Player.Team == t) < f.Fixture.Goals.Count(g => g.Player.Team == t)),
                })
                        .Select(t => new TeamPosition
                {
                    Points = (t.Wins * 3) + (t.Draws * 1),
                    Team   = t.Team.Name
                }))
                .HasName("Teams")
                .IsCollection(tp =>
                {
                    tp.Field(l => l.Points);
                    tp.Field(l => l.Team);
                });
            });

            apiBuilder.Item <Team>(e =>
            {
                e.Field(t => t.Name);

                e.Field(t => t.FoundedYear)
                .HasName("Founded");

                e.Field(t => t.Players)
                .IsCollection();

                e.Field(t => t.Fixtures)
                .IsCollection(ft =>
                {
                    ft.Identifier(f => f.FixtureId);

                    ft.Field(f => f.IsHome)
                    .AllowWrite((f, v) =>
                    {
                        f.IsHome = v;

                        var vsTeam = f.Fixture.Teams.FirstOrDefault(tt => tt.TeamId != f.TeamId);
                        if (vsTeam != null)
                        {
                            vsTeam.IsHome = !v;
                        }
                    })
                    .HasName("Home");

                    ft.Field(f => f.Fixture.Teams.FirstOrDefault(tt => tt.TeamId != f.TeamId))
                    .AllowWrite((f, tt) => { f.Fixture.Teams.Add(tt); })
                    .HasName("VsTeam")
                    .IsItem(t =>
                    {
                        t.Field(tt => tt.TeamId)
                        .HasName("Id")
                        .AllowLocate()
                        .AllowWrite();
                    });

                    ft.Field(f => f.Fixture.Goals)
                    .HasName("Goals")
                    .IsCollection(g => { });

                    ft.OnCreating(f =>
                    {
                        f.Fixture = new Fixture
                        {
                            Teams = new List <FixtureTeam>(2)
                        };
                    });
                });
            });

            apiBuilder.Item <Player>(e =>
            {
                e.Field(p => p.Name)
                .AllowWrite();

                e.Field(p => p.SquadNumber)
                .HasName("Number");

                e.Field(p => p.Goals)
                .IsCollection(g => { g.Field(h => h.Id); });

                e.Field(p => p.Team)
                .IsItem();
            });
        }
Пример #14
0
 public WebApiClientBuilder(IApiBuilder apiBuilder)
 {
     _apiBuilder = apiBuilder;
 }
Пример #15
0
 public void CreateApi(IApiBuilder apiBuilder)
 {
     _onApiCreatingAction(apiBuilder);
 }