diff --git a/Controllers/ProjectsController.cs b/Controllers/ProjectsController.cs index 7df1bb5..0610fb8 100644 --- a/Controllers/ProjectsController.cs +++ b/Controllers/ProjectsController.cs @@ -26,31 +26,18 @@ namespace TicketManager.Controllers [HttpGet] public async Task>> GetProjects() { - return await _context.Projects - .Include(p => p.Assignments) - .Include(p => p.Tickets) - .Include(p => p.Manager) - .Include(p => p.Files) - .AsNoTracking() - .ToListAsync(); + return await GetAllProjectsAsync(); } // GET: api/Projects/5 [HttpGet("{id}")] public async Task> GetProject(int id) { - 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); - + Project project = await GetProjectByIdAsync(id); if (project == null) - { return NotFound(); } - + { + return NotFound(); + } return project; } @@ -61,7 +48,9 @@ namespace TicketManager.Controllers public async Task PutProject(int id, Project project) { if (id != project.Id) - { return BadRequest(); } + { + return BadRequest(); + } _context.Entry(project).State = EntityState.Modified; @@ -111,12 +100,29 @@ namespace TicketManager.Controllers return project; } + + [HttpGet("{id}/members")] + public async Task>> GetProjectMembers(int id) + { + Project project = await GetProjectByIdAsync(id); + return project.GetMembers(); + } + + [HttpPut("{id}/setMembers")] // test put & post + public async Task> SetProjectMembers(int id, List projectMembers) + { + Project project = await GetProjectByIdAsync(id); + + project.SetMembers(projectMembers); + await _context.SaveChangesAsync(); + + return project; + } + [HttpPost("{id}/addMembers")] public async Task> AddMembersToProject(int id, List usersToAdd) { - var project = await _context.Projects - .Include(p => p.Assignments) - .FirstOrDefaultAsync(p => p.Id == id); + Project project = await GetProjectByIdAsync(id); project.AddMembers(usersToAdd); await _context.SaveChangesAsync(); @@ -124,13 +130,10 @@ namespace TicketManager.Controllers return project; } - [HttpPost("{id}/removeMembers")] public async Task> RemoveMembersToProject(int id, List usersToRemove) { - var project = await _context.Projects - .Include(p => p.Assignments) - .FirstOrDefaultAsync(p => p.Id == id); + Project project = await GetProjectByIdAsync(id); project.RemoveMembers(usersToRemove); await _context.SaveChangesAsync(); @@ -138,21 +141,29 @@ namespace TicketManager.Controllers return project; } - [HttpPost("{id}/setMembers")] - public async Task> SetProjectMembers(int id, List projectMembers) - { - var project = await _context.Projects - .Include(p => p.Assignments) - .FirstOrDefaultAsync(p => p.Id == id); - - project.SetMembers(projectMembers); - await _context.SaveChangesAsync(); - - return project; - } private bool ProjectExists(int id) { return _context.Projects.Any(e => e.Id == id); } + private async Task>> GetAllProjectsAsync() + { + return await _context.Projects + .Include(p => p.Assignments) + .Include(p => p.Tickets) + .Include(p => p.Manager) + .Include(p => p.Files) + .AsNoTracking() + .ToListAsync(); + } + private async Task GetProjectByIdAsync(int id) + { + return 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); + } } } diff --git a/Models/Project.cs b/Models/Project.cs index ac3ce8e..fd11ef6 100644 --- a/Models/Project.cs +++ b/Models/Project.cs @@ -80,7 +80,20 @@ namespace TicketManager.Models } public void SetMembers(List projectMembers) - { throw new NotImplementedException("Not Implemented"); } + { + var currentProjectMembers = this.GetMembers(); + if (currentProjectMembers != null) + { + var membersToRemove = currentProjectMembers + .FindAll( + cp => !projectMembers.Contains(cp) + ); + this.RemoveMembers(membersToRemove); + } + + this.AddMembers(projectMembers); + // remove precedent members first + } public int GetMembersCount() => this.GetMembers().Count(); public void GetTicketsCount() => this.Tickets.Count(); public void GetTicketsUpdates() diff --git a/README.md b/README.md index d4214f5..e4ebba9 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,10 @@ - [Follow the link](https://docs.google.com/presentation/d/1Gunf5MRJ_KcoFwo0x_vV8YVHnf9l0V8n7BiJGz6p4cI/edit?usp=sharing) +## API Documentation + +- [Internal Link. Don't forget to update](https://localhost:5001/swagger/index.html) + ## Features ## Supports @@ -28,3 +32,8 @@ ## TO DO - Write backend tests +- Reinitialize db +- Write Project SetMembers Method and related API endpoint code +- Write Project GetMembers Method and related API endpoint code +- Ensure Tickets Edits belong to Project Edits +- Ensure Tickets Files belong to Project Files