From 4428762398989bf4a39e4e784a7a198e80fff65f Mon Sep 17 00:00:00 2001 From: Ruidy Nemausat Date: Sun, 9 Feb 2020 10:28:57 +0100 Subject: [PATCH 1/2] - --- Controllers/ProjectsController.cs | 5 ++++- Models/Project.cs | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/Controllers/ProjectsController.cs b/Controllers/ProjectsController.cs index b07c915..d9f22a4 100644 --- a/Controllers/ProjectsController.cs +++ b/Controllers/ProjectsController.cs @@ -32,7 +32,10 @@ namespace TicketManager.Controllers [HttpGet("{id}")] public async Task> GetProject(int id) { - var project = await _context.Projects.FindAsync(id); + var project = await _context.Projects + .Include(p => p.Assignments) + .FirstOrDefaultAsync(p => p.Id == id); + // .FindAsync(id); if (project == null) { return NotFound(); } diff --git a/Models/Project.cs b/Models/Project.cs index fa54cf9..ebd6760 100644 --- a/Models/Project.cs +++ b/Models/Project.cs @@ -15,7 +15,7 @@ namespace TicketManager.Models { get { - return (float)this.Tickets. + return Tickets.Count() == 0 ? 0 : (float)this.Tickets. Where(t => t.Status == Status.Done).Count() / this.Tickets.Count() * 100; From ec9e31171ead4f421fe9f82944b824826665d267 Mon Sep 17 00:00:00 2001 From: Ruidy Nemausat Date: Mon, 10 Feb 2020 11:48:38 +0100 Subject: [PATCH 2/2] json circleref problem uncovered --- Controllers/ProjectsController.cs | 12 +++++++++++- Controllers/TicketsController.cs | 15 +++++++++++++-- Controllers/UsersController.cs | 16 +++++++++++----- Models/Assignment.cs | 4 +++- Models/Project.cs | 16 ++++++++-------- Models/Ticket.cs | 6 +++--- Models/User.cs | 2 +- client/src/react-app-env.d.ts | 1 + 8 files changed, 51 insertions(+), 21 deletions(-) create mode 100644 client/src/react-app-env.d.ts diff --git a/Controllers/ProjectsController.cs b/Controllers/ProjectsController.cs index d9f22a4..5f671c1 100644 --- a/Controllers/ProjectsController.cs +++ b/Controllers/ProjectsController.cs @@ -25,7 +25,13 @@ namespace TicketManager.Controllers [HttpGet] public async Task>> GetProjects() { - return await _context.Projects.ToListAsync(); + return await _context.Projects + .Include(p => p.Assignments) + .Include(p => p.Tickets) + .Include(p => p.Manager) + .Include(p => p.Files) + .AsNoTracking() + .ToListAsync(); } // GET: api/Projects/5 @@ -34,6 +40,10 @@ namespace TicketManager.Controllers { var project = await _context.Projects .Include(p => p.Assignments) + .Include(p => p.Tickets) + .Include(p => p.Manager) + .Include(p => p.Files) + .AsNoTracking() .FirstOrDefaultAsync(p => p.Id == id); // .FindAsync(id); diff --git a/Controllers/TicketsController.cs b/Controllers/TicketsController.cs index 37ae92e..bddebe9 100644 --- a/Controllers/TicketsController.cs +++ b/Controllers/TicketsController.cs @@ -25,14 +25,25 @@ namespace TicketManager.Controllers [HttpGet] public async Task>> GetTickets() { - return await _context.Tickets.ToListAsync(); + return await _context.Tickets + .Include(t => t.Creator) + .Include(p => p.Notes) + .Include(p => p.Edits) + .Include(p => p.Files) + .AsNoTracking() + .ToListAsync(); } // GET: api/Tickets/5 [HttpGet("{id}")] public async Task> GetTicket(int id) { - var ticket = await _context.Tickets.FindAsync(id); + var ticket = await _context.Tickets + .Include(t => t.Creator) + .Include(p => p.Notes) + .Include(p => p.Edits) + .Include(p => p.Files) + .FirstOrDefaultAsync(t => t.Id == id); if (ticket == null) { diff --git a/Controllers/UsersController.cs b/Controllers/UsersController.cs index f76ad4e..32ca0f3 100644 --- a/Controllers/UsersController.cs +++ b/Controllers/UsersController.cs @@ -25,14 +25,20 @@ namespace TicketManager.Controllers [HttpGet] public async Task>> GetUsers() { - return await _context.Users.ToListAsync(); + return await _context.Users + .Include(p => p.Assignments) + .Include(p => p.Edits) + .ToListAsync(); } // GET: api/Users/5 [HttpGet("{id}")] - public async Task> GetUser(int id) + public async Task> GetUser(Guid id) { - var user = await _context.Users.FindAsync(id); + var user = await _context.Users + .Include(p => p.Assignments) + .Include(p => p.Edits) + .FirstOrDefaultAsync(p => p.Id == id); if (user == null) { @@ -46,7 +52,7 @@ namespace TicketManager.Controllers // To protect from overposting attacks, please enable the specific properties you want to bind to, for // more details see https://aka.ms/RazorPagesCRUD. [HttpPut("{id}")] - public async Task PutUser(int id, User user) + public async Task PutUser(Guid id, User user) { if (id != user.Id) { @@ -102,7 +108,7 @@ namespace TicketManager.Controllers return user; } - private bool UserExists(int id) + private bool UserExists(Guid id) { return _context.Users.Any(e => e.Id == id); } diff --git a/Models/Assignment.cs b/Models/Assignment.cs index 9225d93..02aaa9c 100644 --- a/Models/Assignment.cs +++ b/Models/Assignment.cs @@ -1,10 +1,12 @@ +using System; + namespace TicketManager.Models { public class Assignment { public int Id { get; set; } public User User { get; set; } - public int UserId { get; set; } + public Guid UserId { get; set; } public Project Project { get; set; } public int ProjectId { get; set; } } diff --git a/Models/Project.cs b/Models/Project.cs index ebd6760..cf90014 100644 --- a/Models/Project.cs +++ b/Models/Project.cs @@ -24,7 +24,7 @@ namespace TicketManager.Models public Status Status { get; set; } = Status.ToDo; public User Manager { get; set; } - public int ManagerId { get; set; } + public Guid ManagerId { get; set; } private List _assignments; public List Assignments { @@ -40,13 +40,13 @@ namespace TicketManager.Models { return _tickets ?? new List(); } set { _tickets = value; } } - private List _edits; - public List Edits - { - get - { return _edits ?? new List(); } - set { _edits = value; } - } + // private List _edits; + // public List Edits + // { + // get + // { return _edits ?? new List(); } + // set { _edits = value; } + // } private List _files; public List Files { diff --git a/Models/Ticket.cs b/Models/Ticket.cs index 16e45ef..727ca6f 100644 --- a/Models/Ticket.cs +++ b/Models/Ticket.cs @@ -17,9 +17,9 @@ namespace TicketManager.Models public Category Category { get; set; } = Category.Undefined; public User Creator { get; set; } - public int CreatorId { get; set; } - public Project Project { get; set; } - public int ProjectId { get; set; } + public Guid CreatorId { get; set; } + // public Project Project { get; set; } + // public int ProjectId { get; set; } private List _notes; public List Notes { diff --git a/Models/User.cs b/Models/User.cs index 45ddd15..9b04d8b 100644 --- a/Models/User.cs +++ b/Models/User.cs @@ -5,7 +5,7 @@ namespace TicketManager.Models { public class User { - public int Id { get; set; } + public Guid Id { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public string FullName => $"{FirstName} {LastName}"; diff --git a/client/src/react-app-env.d.ts b/client/src/react-app-env.d.ts new file mode 100644 index 0000000..6431bc5 --- /dev/null +++ b/client/src/react-app-env.d.ts @@ -0,0 +1 @@ +///