project model & endpoints done

This commit is contained in:
Ruidy Nemausat 2020-02-11 18:45:37 +01:00
parent 0ca71cfcf9
commit 0fa327ee7c
7 changed files with 71 additions and 59 deletions

View file

@ -112,10 +112,18 @@ namespace TicketManager.Controllers
public async Task<ActionResult<Project>> SetProjectMembers(int id, List<User> projectMembers) public async Task<ActionResult<Project>> SetProjectMembers(int id, List<User> projectMembers)
{ {
Project project = await GetProjectByIdAsync(id); Project project = await GetProjectByIdAsync(id);
project.SetMembers(projectMembers); project.SetMembers(projectMembers);
await _context.SaveChangesAsync(); try
{
await _context.SaveChangesAsync();
}
catch (DbUpdateException /* ex */)
{
//Log the error (uncomment ex variable name and write a log.)
ModelState.AddModelError("", "Unable to save changes. " +
"Try again, and if the problem persists, " +
"see your system administrator.");
}
return project; return project;
} }
@ -127,7 +135,6 @@ namespace TicketManager.Controllers
return BadRequest(); return BadRequest();
} }
Project project = await GetProjectByIdAsync(id); Project project = await GetProjectByIdAsync(id);
project.AddMembers(usersToAdd); project.AddMembers(usersToAdd);
try try
{ {
@ -140,19 +147,25 @@ namespace TicketManager.Controllers
"Try again, and if the problem persists, " + "Try again, and if the problem persists, " +
"see your system administrator."); "see your system administrator.");
} }
return project; return project;
} }
[HttpPost("{id}/removeMembers")] [HttpPut("{id}/removeMembers")]
public async Task<ActionResult<Project>> RemoveMembersToProject(int id, List<User> usersToRemove) public async Task<ActionResult<Project>> RemoveMembersFromProject(int id, List<User> usersToRemove)
{ {
Project project = await GetProjectByIdAsync(id); Project project = await GetProjectByIdAsync(id);
project.RemoveMembers(usersToRemove); project.RemoveMembers(usersToRemove);
await _context.SaveChangesAsync(); try
{
await _context.SaveChangesAsync();
}
catch (DbUpdateException /* ex */)
{
//Log the error (uncomment ex variable name and write a log.)
ModelState.AddModelError("", "Unable to save changes. " +
"Try again, and if the problem persists, " +
"see your system administrator.");
}
return project; return project;
} }
@ -160,6 +173,7 @@ namespace TicketManager.Controllers
{ {
return _context.Projects.Any(e => e.Id == id); return _context.Projects.Any(e => e.Id == id);
} }
private async Task<ActionResult<IEnumerable<Project>>> GetAllProjectsAsync() private async Task<ActionResult<IEnumerable<Project>>> GetAllProjectsAsync()
{ {
return await makeProjectsQueryAsync() return await makeProjectsQueryAsync()
@ -171,16 +185,14 @@ namespace TicketManager.Controllers
.FirstOrDefaultAsync(p => p.Id == id); .FirstOrDefaultAsync(p => p.Id == id);
} }
private IQueryable<TicketManager.Models.Project> makeProjectsQueryAsync() private IQueryable<Project> makeProjectsQueryAsync()
{ {
return _context.Projects return _context.Projects
.Include(p => p.Assignments) .Include(p => p.Assignments)
.ThenInclude(a => a.User) .ThenInclude(a => a.User)
.Include(p => p.Tickets) .Include(p => p.Tickets)
.Include(p => p.Manager) .Include(p => p.Manager)
.Include(p => p.Files) .Include(p => p.Files);
.AsNoTracking();
} }
} }
} }

View file

@ -16,10 +16,10 @@ namespace TicketManager.Data
public DbSet<Note> Notes { get; set; } public DbSet<Note> Notes { get; set; }
public DbSet<File> Files { get; set; } public DbSet<File> Files { get; set; }
// protected override void OnModelCreating(ModelBuilder builder) protected override void OnModelCreating(ModelBuilder builder)
// { {
// base.OnModelCreating(builder); base.OnModelCreating(builder);
// builder.Entity<Team>().HasKey(t => new { t.ProjectId, t.UserId }); builder.Entity<Assignment>().HasKey(a => new { a.ProjectId, a.UserId });
// } }
} }
} }

View file

@ -4,7 +4,7 @@ namespace TicketManager.Models
{ {
public class Assignment public class Assignment
{ {
public int Id { get; set; } // public int Id { get; set; }
public User User { get; set; } public User User { get; set; }
public Guid UserId { get; set; } public Guid UserId { get; set; }
public Project Project { get; set; } public Project Project { get; set; }

View file

@ -6,11 +6,9 @@ namespace TicketManager.Models
public class History public class History
{ {
public int Id { get; set; } public int Id { get; set; }
public string Title { get; set; }
public string Description { get; set; } public string Description { get; set; }
public DateTime UpdateDate { get; set; } = DateTime.Now; public DateTime UpdateDate { get; set; } = DateTime.Now;
public ActivityType ActivityType { get; set; } = ActivityType.Undefined; public ActivityType ActivityType { get; set; } = ActivityType.Undefined;
public User User { get; set; } public User User { get; set; }
public int UserId { get; set; } public int UserId { get; set; }
} }

View file

@ -1,13 +1,16 @@
using System; using System;
using System.Collections.Generic;
namespace TicketManager.Models namespace TicketManager.Models
{ {
public interface ITask // public interface ITask
public abstract class ITask
{ {
int Id { get; set; } int Id { get; set; }
string Title { get; set; } string Title { get; set; }
string Description { get; set; } string Description { get; set; }
DateTime CreatedAt { get; } DateTime CreatedAt { get; }
DateTime PlannedEnding { get; set; } DateTime PlannedEnding { get; set; }
List<History> Edits { get; set; }
} }
} }

View file

@ -7,10 +7,6 @@ namespace TicketManager.Models
{ {
public class Project : ITask public class Project : ITask
{ {
public Project()
{
}
public int Id { get; set; } public int Id { get; set; }
[Required] [Required]
@ -48,36 +44,17 @@ namespace TicketManager.Models
[Display(Name = "Project Manager")] [Display(Name = "Project Manager")]
public User Manager { get; set; } public User Manager { get; set; }
public Guid ManagerId { get; set; }
private List<Assignment> _assignments;
public List<Assignment> Assignments { get; set; } = new List<Assignment>(); public List<Assignment> Assignments { get; set; } = new List<Assignment>();
// {
// get
// { return _assignments ?? new List<Assignment>(); } public List<Ticket> Tickets { get; set; } = new List<Ticket>();
// set
// { _assignments = value; }
// } public List<History> Edits { get; set; } = new List<History>();
private List<Ticket> _tickets;
public List<Ticket> Tickets
{ public List<File> Files { get; set; } = new List<File>();
get
{ return _tickets ?? new List<Ticket>(); }
set { _tickets = value; }
}
private List<History> _edits;
public List<History> Edits
{
get
{ return _edits ?? new List<History>(); }
set { _edits = value; }
}
private List<File> _files;
public List<File> Files
{
get
{ return _files ?? new List<File>(); }
set { _files = value; }
}
// Methods // Methods
public List<User> GetMembers() public List<User> GetMembers()
@ -96,6 +73,7 @@ namespace TicketManager.Models
UserId = user.Id UserId = user.Id
}; };
this.Assignments.Add(newAssign); this.Assignments.Add(newAssign);
AddLogEntry(" joined the project.");
} }
} }
public void RemoveMembers(List<User> membersToRemove) public void RemoveMembers(List<User> membersToRemove)
@ -113,10 +91,18 @@ namespace TicketManager.Models
cp => !projectMembers.Contains(cp) cp => !projectMembers.Contains(cp)
); );
this.RemoveMembers(membersToRemove); this.RemoveMembers(membersToRemove);
var membersToAdd = projectMembers.FindAll(
pm => !currentProjectMembers.Contains(pm)
);
this.AddMembers(membersToAdd);
}
else
{
this.AddMembers(projectMembers);
} }
this.AddMembers(projectMembers);
// remove precedent members first
} }
public int GetMembersCount() => this.GetMembers().Count(); public int GetMembersCount() => this.GetMembers().Count();
public void GetTicketsCount() => this.Tickets.Count(); public void GetTicketsCount() => this.Tickets.Count();
@ -126,5 +112,17 @@ namespace TicketManager.Models
{ {
this.Status = Status.Done; this.Status = Status.Done;
} }
private void AddLogEntry(string description)//, User user)
{
History Edit = new History()
{
Description = description,
ActivityType = ActivityType.Undefined,
// User = user,
UpdateDate = DateTime.Now
};
this.Edits.Add(Edit);
}
} }
} }

View file

@ -37,3 +37,4 @@
- Write backend tests - Write backend tests
- Ensure Tickets Edits belong to Project Edits - Ensure Tickets Edits belong to Project Edits
- Ensure Tickets Files belong to Project Files - Ensure Tickets Files belong to Project Files
- Write a query class to refactor code and optimize perf on get queries (AsNoTracking)