Skip to content

Commit 0e3326f

Browse files
committed
Added some navigation properties
1 parent ec6b661 commit 0e3326f

11 files changed

+68
-26
lines changed

Classes/ApiControllerBase.cs

+20-14
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,25 @@ public ApiController(ToLiDbContext dataContext, DbSet<T> data) {
1818
}
1919

2020
[HttpGet]
21-
public async Task<JsonResult> GetAll([FromQuery] ApiQuery queryOptions) {
22-
IQueryable<T> query = data.OrderBy(e => e.Id);
21+
public virtual async Task<JsonResult> GetAll([FromQuery] ApiQuery queryOptions) {
22+
var query = ApplyFilters(data, queryOptions);
23+
24+
return Json(await query.ToListAsync());
25+
}
26+
27+
[HttpGet("{id}")]
28+
public async Task<JsonResult> Get([FromRoute] int id) {
29+
return Json(await data.Where(item => item.Id == id).FirstOrDefaultAsync());
30+
}
31+
32+
protected IQueryable<T> ApplyFilters(IQueryable<T> query, ApiQuery queryOptions) {
33+
query = data.OrderBy(e => e.Id);
34+
35+
if(queryOptions.Offset.HasValue)
36+
query = query.Skip(queryOptions.Offset.Value);
37+
38+
if(queryOptions.Limit.HasValue)
39+
query = query.Take(queryOptions.Limit.Value);
2340

2441
if(queryOptions.Include.HasValue && queryOptions.Include.Value) {
2542
var entityType = dataContext.Model.FindEntityType(typeof(T));
@@ -28,18 +45,7 @@ public async Task<JsonResult> GetAll([FromQuery] ApiQuery queryOptions) {
2845
}
2946
}
3047

31-
if(queryOptions.Offset.HasValue)
32-
query = query.Skip(queryOptions.Offset.Value);
33-
34-
if(queryOptions.Limit.HasValue)
35-
query = query.Take(queryOptions.Limit.Value);
36-
37-
return Json(await query.ToListAsync());
38-
}
39-
40-
[HttpGet("{id}")]
41-
public async Task<JsonResult> Get([FromRoute] int id) {
42-
return Json(await data.Where(item => item.Id == id).FirstOrDefaultAsync());
48+
return query;
4349
}
4450

4551
/* TODO: Let authenticated users add data?

Controllers/CharactersController.cs

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
using System.Linq;
2+
using System.Threading.Tasks;
3+
using Microsoft.AspNetCore.Mvc;
4+
using Microsoft.EntityFrameworkCore;
5+
using ToLiAPI.Api;
6+
using ToLiAPI.Models;
7+
8+
namespace ToLiAPI {
9+
[Route("api/[controller]")]
10+
public class CharactersController : ApiController<Characters>
11+
{
12+
public CharactersController(ToLiDbContext dataContext) : base(dataContext, dataContext.Characters) { }
13+
14+
public override async Task<JsonResult> GetAll([FromQuery] ApiQuery queryOptions) {
15+
var query = ApplyFilters(data, queryOptions);
16+
17+
if(queryOptions.Include.HasValue && queryOptions.Include.Value) {
18+
query = query.Include(c => c.CharacterPassiveSkills)
19+
.ThenInclude(c => c.PassiveSkill);
20+
}
21+
22+
return Json(await query.ToListAsync());
23+
}
24+
}
25+
}

Controllers/ToLiAPIControllers.cs

-6
Original file line numberDiff line numberDiff line change
@@ -69,12 +69,6 @@ public class CharacterResultMessagesController : ApiController<CharacterResultMe
6969
public CharacterResultMessagesController(ToLiDbContext dataContext) : base(dataContext, dataContext.CharacterResultMessages) { }
7070
}
7171

72-
[Route("api/[controller]")]
73-
public class CharactersController : ApiController<Characters>
74-
{
75-
public CharactersController(ToLiDbContext dataContext) : base(dataContext, dataContext.Characters) { }
76-
}
77-
7872
[Route("api/[controller]")]
7973
public class CoinShopItemContentsController : ApiController<CoinShopItemContents>
8074
{

Models/AreaAvailables.cs

+1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ public partial class AreaAvailables : Entity
77
{
88

99
public int AreaId { get; set; }
10+
public Areas Area { get; set; }
1011
public byte Wday { get; set; }
1112
public TimeSpan WdayStartAt { get; set; }
1213
public TimeSpan WdayEndAt { get; set; }

Models/AreaBonuses.cs

+1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ public partial class AreaBonuses : Entity
77
{
88

99
public int AreaId { get; set; }
10+
public Areas Area { get; set; }
1011
public byte BonusType { get; set; }
1112
public byte Wday { get; set; }
1213
public TimeSpan WdayStartAt { get; set; }

Models/Areas.cs

+2
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@ public partial class Areas : Entity
1010
public string Description { get; set; }
1111
public string HelpContents { get; set; }
1212
public int WorldId { get; set; }
13+
public Worlds World { get; set; }
1314
public int PrevAreaId { get; set; }
15+
public Areas PrevArea { get; set; }
1416
public int BackgroundId { get; set; }
1517
public int? DrawPosX { get; set; }
1618
public int? DrawPosY { get; set; }

Models/ArtEquipmentCharacters.cs

+2-1
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,10 @@ namespace ToLiAPI.Models
55
{
66
public partial class ArtEquipmentCharacters : Entity
77
{
8-
98
public int ArtEquipmentId { get; set; }
9+
public ArtEquipments ArtEquipment { get; set; }
1010
public int CharacterId { get; set; }
11+
public Characters Character { get; set; }
1112
public DateTime? CreatedAt { get; set; }
1213
public DateTime? UpdatedAt { get; set; }
1314
}

Models/ArtEquipments.cs

+2-1
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,10 @@ namespace ToLiAPI.Models
55
{
66
public partial class ArtEquipments : Entity
77
{
8-
98
public int EquipmentId { get; set; }
9+
public Equipment Equipment { get; set; }
1010
public int ArtId { get; set; }
11+
public Arts Art { get; set; }
1112
public int ArtGroupId { get; set; }
1213
public DateTime? CreatedAt { get; set; }
1314
public DateTime? UpdatedAt { get; set; }

Models/CharacterPassiveSkills.cs

+4-3
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,11 @@
44
namespace ToLiAPI.Models
55
{
66
public partial class CharacterPassiveSkills : Entity
7-
{
8-
9-
public int? CharacterId { get; set; }
7+
{
8+
public int? CharacterId { get; set; }
9+
public Characters Character { get; set; }
1010
public int? PassiveSkillId { get; set; }
11+
public PassiveSkills PassiveSkill { get; set; }
1112
public int? DefeatCount { get; set; }
1213
public DateTime? CreatedAt { get; set; }
1314
public DateTime? UpdatedAt { get; set; }

Models/Characters.cs

+5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using System.Collections.Generic;
3+
using System.ComponentModel.DataAnnotations.Schema;
34

45
namespace ToLiAPI.Models
56
{
@@ -65,5 +66,9 @@ public partial class Characters : Entity
6566
public int UnisonEffect { get; set; }
6667
public DateTime? CreatedAt { get; set; }
6768
public DateTime? UpdatedAt { get; set; }
69+
[ForeignKey("CharacterId")]
70+
public List<CharacterResultMessages> CharacterResultMessages { get; set; }
71+
[ForeignKey("CharacterId")]
72+
public ICollection<CharacterPassiveSkills> CharacterPassiveSkills { get; set; }
6873
}
6974
}

Startup.cs

+6-1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
using Microsoft.Extensions.Logging;
1414
using Microsoft.Extensions.Options;
1515
using ToLiAPI.Models;
16+
using Newtonsoft.Json.Serialization;
17+
using Newtonsoft.Json;
1618

1719
namespace ToLiAPI
1820
{
@@ -28,7 +30,10 @@ public Startup(IConfiguration configuration)
2830
// This method gets called by the runtime. Use this method to add services to the container.
2931
public void ConfigureServices(IServiceCollection services)
3032
{
31-
services.AddMvc();
33+
services.AddMvc().AddJsonOptions(options => {
34+
options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
35+
options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
36+
});;
3237

3338
services.AddDbContext<ToLiDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
3439
}

0 commit comments

Comments
 (0)