From 54c221236bf5171cfbe38f50d11506825982dbff Mon Sep 17 00:00:00 2001 From: Ruidy Nemausat Date: Tue, 11 Feb 2020 00:13:54 +0100 Subject: [PATCH] project/id/addmembers endpoint --- Controllers/ProjectsController.cs | 38 +++++++++++++++++++++++++++++++ Models/History.cs | 2 +- Models/Note.cs | 2 +- Models/Project.cs | 19 +++++++++------- Models/Ticket.cs | 2 +- Models/User.cs | 2 +- README.md | 23 ++++++++++++++++++- 7 files changed, 75 insertions(+), 13 deletions(-) diff --git a/Controllers/ProjectsController.cs b/Controllers/ProjectsController.cs index a596542..7df1bb5 100644 --- a/Controllers/ProjectsController.cs +++ b/Controllers/ProjectsController.cs @@ -111,7 +111,45 @@ namespace TicketManager.Controllers 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.AddMembers(usersToAdd); + await _context.SaveChangesAsync(); + + 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.RemoveMembers(usersToRemove); + await _context.SaveChangesAsync(); + + 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); diff --git a/Models/History.cs b/Models/History.cs index 44d45cd..2f1f3ad 100644 --- a/Models/History.cs +++ b/Models/History.cs @@ -8,7 +8,7 @@ namespace TicketManager.Models public int Id { get; set; } public string Title { get; set; } public string Description { get; set; } - public DateTime UpdateDate { get; } = DateTime.Now; + public DateTime UpdateDate { get; set; } = DateTime.Now; public ActivityType ActivityType { get; set; } = ActivityType.Undefined; public User User { get; set; } diff --git a/Models/Note.cs b/Models/Note.cs index 7b6834f..84d5c05 100644 --- a/Models/Note.cs +++ b/Models/Note.cs @@ -8,7 +8,7 @@ namespace TicketManager.Models public int Id { get; set; } public string Title { get; set; } public string Description { get; set; } - public DateTime Created_at { get; } = DateTime.Now; + public DateTime Created_at { get; set; } = DateTime.Now; public Ticket Ticket { get; set; } } diff --git a/Models/Project.cs b/Models/Project.cs index cf90014..ac3ce8e 100644 --- a/Models/Project.cs +++ b/Models/Project.cs @@ -9,7 +9,7 @@ namespace TicketManager.Models public int Id { get; set; } public string Title { get; set; } public string Description { get; set; } - public DateTime CreatedAt { get; } = DateTime.Now; + public DateTime CreatedAt { get; set; } = DateTime.Now; public DateTime PlannedEnding { get; set; } public float Progression { @@ -40,13 +40,13 @@ namespace TicketManager.Models { return _tickets ?? new List(); } set { _tickets = value; } } - // private List _edits; - // public List Edits - // { - // get - // { return _edits ?? new List(); } - // set { _edits = value; } - // } + private List _edits; + public List Edits + { + get + { return _edits ?? new List(); } + set { _edits = value; } + } private List _files; public List Files { @@ -78,6 +78,9 @@ namespace TicketManager.Models { this.Assignments.RemoveAll(a => membersToRemove.Contains(a.User)); } + + public void SetMembers(List projectMembers) + { throw new NotImplementedException("Not Implemented"); } public int GetMembersCount() => this.GetMembers().Count(); public void GetTicketsCount() => this.Tickets.Count(); public void GetTicketsUpdates() diff --git a/Models/Ticket.cs b/Models/Ticket.cs index 65fc8ae..6176197 100644 --- a/Models/Ticket.cs +++ b/Models/Ticket.cs @@ -8,7 +8,7 @@ namespace TicketManager.Models public int Id { get; set; } public string Title { get; set; } public string Description { get; set; } - public DateTime CreatedAt { get; } = DateTime.Now; + public DateTime CreatedAt { get; set; } = DateTime.Now; public DateTime PlannedEnding { get; set; } public Status Status { get; set; } = Status.ToDo; diff --git a/Models/User.cs b/Models/User.cs index 9b04d8b..d7ed052 100644 --- a/Models/User.cs +++ b/Models/User.cs @@ -10,7 +10,7 @@ namespace TicketManager.Models public string LastName { get; set; } public string FullName => $"{FirstName} {LastName}"; public string Presentation { get; set; } - public DateTime Created_at { get; } = DateTime.Now; + public DateTime Created_at { get; set; } = DateTime.Now; public byte[] Picture { get; set; } // public Role Role { get; set; } diff --git a/README.md b/README.md index 6049d88..d4214f5 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,27 @@ - [Follow the link](https://docs.google.com/presentation/d/1Gunf5MRJ_KcoFwo0x_vV8YVHnf9l0V8n7BiJGz6p4cI/edit?usp=sharing) -## ToDo +## Features + +## Supports + +- Web +- Progressive Web App +- Mobile + +## Technical Stack + +- `React` client on the front-end (TypeScript) +- [Materialize](https://materializecss.com) CSS librairy for styling +- API: Newtonsoft.Json, to avoid cycle errors +- Hosting: ? +- Authentication : [Auth0](https://auth0.com/) +- Analytics : Google Analytics & Mixpanel + +## Versions + +### Features in v.0.1 + +## TO DO - Write backend tests