mirror of
https://github.com/rjNemo/ticket_manager
synced 2026-06-06 08:46:39 +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)
|
||||
{
|
||||
Project project = await GetProjectByIdAsync(id);
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
|
@ -127,7 +135,6 @@ namespace TicketManager.Controllers
|
|||
return BadRequest();
|
||||
}
|
||||
Project project = await GetProjectByIdAsync(id);
|
||||
|
||||
project.AddMembers(usersToAdd);
|
||||
try
|
||||
{
|
||||
|
|
@ -140,19 +147,25 @@ namespace TicketManager.Controllers
|
|||
"Try again, and if the problem persists, " +
|
||||
"see your system administrator.");
|
||||
}
|
||||
|
||||
|
||||
return project;
|
||||
}
|
||||
|
||||
[HttpPost("{id}/removeMembers")]
|
||||
public async Task<ActionResult<Project>> RemoveMembersToProject(int id, List<User> usersToRemove)
|
||||
[HttpPut("{id}/removeMembers")]
|
||||
public async Task<ActionResult<Project>> RemoveMembersFromProject(int id, List<User> usersToRemove)
|
||||
{
|
||||
Project project = await GetProjectByIdAsync(id);
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
|
@ -160,6 +173,7 @@ namespace TicketManager.Controllers
|
|||
{
|
||||
return _context.Projects.Any(e => e.Id == id);
|
||||
}
|
||||
|
||||
private async Task<ActionResult<IEnumerable<Project>>> GetAllProjectsAsync()
|
||||
{
|
||||
return await makeProjectsQueryAsync()
|
||||
|
|
@ -171,16 +185,14 @@ namespace TicketManager.Controllers
|
|||
.FirstOrDefaultAsync(p => p.Id == id);
|
||||
}
|
||||
|
||||
private IQueryable<TicketManager.Models.Project> makeProjectsQueryAsync()
|
||||
private IQueryable<Project> makeProjectsQueryAsync()
|
||||
{
|
||||
return _context.Projects
|
||||
.Include(p => p.Assignments)
|
||||
.ThenInclude(a => a.User)
|
||||
.Include(p => p.Tickets)
|
||||
.Include(p => p.Manager)
|
||||
.Include(p => p.Files)
|
||||
.AsNoTracking();
|
||||
.Include(p => p.Files);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,10 +16,10 @@ namespace TicketManager.Data
|
|||
public DbSet<Note> Notes { get; set; }
|
||||
public DbSet<File> Files { get; set; }
|
||||
|
||||
// protected override void OnModelCreating(ModelBuilder builder)
|
||||
// {
|
||||
// base.OnModelCreating(builder);
|
||||
// builder.Entity<Team>().HasKey(t => new { t.ProjectId, t.UserId });
|
||||
// }
|
||||
protected override void OnModelCreating(ModelBuilder builder)
|
||||
{
|
||||
base.OnModelCreating(builder);
|
||||
builder.Entity<Assignment>().HasKey(a => new { a.ProjectId, a.UserId });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -4,7 +4,7 @@ namespace TicketManager.Models
|
|||
{
|
||||
public class Assignment
|
||||
{
|
||||
public int Id { get; set; }
|
||||
// public int Id { get; set; }
|
||||
public User User { get; set; }
|
||||
public Guid UserId { get; set; }
|
||||
public Project Project { get; set; }
|
||||
|
|
|
|||
|
|
@ -6,11 +6,9 @@ namespace TicketManager.Models
|
|||
public class History
|
||||
{
|
||||
public int Id { get; set; }
|
||||
public string Title { get; set; }
|
||||
public string Description { get; set; }
|
||||
public DateTime UpdateDate { get; set; } = DateTime.Now;
|
||||
public ActivityType ActivityType { get; set; } = ActivityType.Undefined;
|
||||
|
||||
public User User { get; set; }
|
||||
public int UserId { get; set; }
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,13 +1,16 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace TicketManager.Models
|
||||
{
|
||||
public interface ITask
|
||||
// public interface ITask
|
||||
public abstract class ITask
|
||||
{
|
||||
int Id { get; set; }
|
||||
string Title { get; set; }
|
||||
string Description { get; set; }
|
||||
DateTime CreatedAt { get; }
|
||||
DateTime PlannedEnding { get; set; }
|
||||
List<History> Edits { get; set; }
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,10 +7,6 @@ namespace TicketManager.Models
|
|||
{
|
||||
public class Project : ITask
|
||||
{
|
||||
public Project()
|
||||
{
|
||||
|
||||
}
|
||||
public int Id { get; set; }
|
||||
|
||||
[Required]
|
||||
|
|
@ -48,36 +44,17 @@ namespace TicketManager.Models
|
|||
|
||||
[Display(Name = "Project Manager")]
|
||||
public User Manager { get; set; }
|
||||
public Guid ManagerId { get; set; }
|
||||
private List<Assignment> _assignments;
|
||||
|
||||
public List<Assignment> Assignments { get; set; } = new List<Assignment>();
|
||||
// {
|
||||
// get
|
||||
// { return _assignments ?? new List<Assignment>(); }
|
||||
// set
|
||||
// { _assignments = value; }
|
||||
// }
|
||||
private List<Ticket> _tickets;
|
||||
public List<Ticket> Tickets
|
||||
{
|
||||
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; }
|
||||
}
|
||||
|
||||
|
||||
public List<Ticket> Tickets { get; set; } = new List<Ticket>();
|
||||
|
||||
|
||||
public List<History> Edits { get; set; } = new List<History>();
|
||||
|
||||
|
||||
public List<File> Files { get; set; } = new List<File>();
|
||||
|
||||
// Methods
|
||||
public List<User> GetMembers()
|
||||
|
|
@ -96,6 +73,7 @@ namespace TicketManager.Models
|
|||
UserId = user.Id
|
||||
};
|
||||
this.Assignments.Add(newAssign);
|
||||
AddLogEntry(" joined the project.");
|
||||
}
|
||||
}
|
||||
public void RemoveMembers(List<User> membersToRemove)
|
||||
|
|
@ -113,10 +91,18 @@ namespace TicketManager.Models
|
|||
cp => !projectMembers.Contains(cp)
|
||||
);
|
||||
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 void GetTicketsCount() => this.Tickets.Count();
|
||||
|
|
@ -126,5 +112,17 @@ namespace TicketManager.Models
|
|||
{
|
||||
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
|
||||
- Ensure Tickets Edits belong to Project Edits
|
||||
- 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