mirror of
https://github.com/rjNemo/ticket_manager
synced 2026-06-11 19:26:40 +00:00
project model & endpoints done
This commit is contained in:
parent
0ca71cfcf9
commit
0fa327ee7c
7 changed files with 71 additions and 59 deletions
|
|
@ -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();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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 });
|
||||||
// }
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -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; }
|
||||||
|
|
|
||||||
|
|
@ -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; }
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue