add project/id/setmembers, removemembers, getmembers endpoints

This commit is contained in:
Ruidy Nemausat 2020-02-11 09:40:56 +01:00
parent 54c221236b
commit f40470035d
3 changed files with 72 additions and 39 deletions

View file

@ -26,31 +26,18 @@ namespace TicketManager.Controllers
[HttpGet]
public async Task<ActionResult<IEnumerable<Project>>> 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<ActionResult<Project>> 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<IActionResult> 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<ActionResult<List<User>>> GetProjectMembers(int id)
{
Project project = await GetProjectByIdAsync(id);
return project.GetMembers();
}
[HttpPut("{id}/setMembers")] // test put & post
public async Task<ActionResult<Project>> SetProjectMembers(int id, List<User> projectMembers)
{
Project project = await GetProjectByIdAsync(id);
project.SetMembers(projectMembers);
await _context.SaveChangesAsync();
return project;
}
[HttpPost("{id}/addMembers")]
public async Task<ActionResult<Project>> AddMembersToProject(int id, List<User> 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<ActionResult<Project>> RemoveMembersToProject(int id, List<User> 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<ActionResult<Project>> SetProjectMembers(int id, List<User> 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<ActionResult<IEnumerable<Project>>> 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<Project> 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);
}
}
}

View file

@ -80,7 +80,20 @@ namespace TicketManager.Models
}
public void SetMembers(List<User> 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()

View file

@ -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