public static IApiBuilder Item <TItem>(this IApiBuilder builder, [NotNull] Action <IApiItemBuilder <TItem> > configureAction) where TItem : class, new() { builder.Item <TItem>() .Configure(configureAction); return(builder); }
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); }); }); }
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"); }); }
//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(); }); }