// using System; // using System.Collections.Generic; // using System.Linq; // using System.Net.Mime; // using System.Threading.Tasks; // using Microsoft.AspNetCore.Http; // using Microsoft.AspNetCore.Mvc; // using Microsoft.EntityFrameworkCore; // using TicketManager.Data; // using TicketManager.Models; // namespace TicketManager.Controllers // { // [Produces("application/json")] // [Route("api/v1/[controller]")] // [ApiController] // public class ProjectsController : ControllerBase // { // private readonly IProjectRepository _projectRepo; // public ProjectsController(IProjectRepository projectRepo) // { // _projectRepo = projectRepo; // } // /// // /// Returns all existing projects. // /// // /// // /// Sample request: // /// // /// GET: api/Projects // /// // /// // /// Returns all existing projects // [HttpGet] // [ProducesResponseType(StatusCodes.Status200OK)] // public async Task> GetProjects() // { // return await _projectRepo.ListAsync(); // // GetAllProjectsAsync(); // } // /// // /// Returns a specific project. // /// // /// // /// Sample request: // /// // /// GET: api/Projects/2 // /// // /// // /// Returns a specific project // /// If the required project is null // [HttpGet("{id}")] // [ProducesResponseType(StatusCodes.Status200OK)] // [ProducesResponseType(StatusCodes.Status404NotFound)] // public async Task> GetProject(int id) // { // Project project = await _projectRepo.GetByIdAsync(id); // if (project == null) { return NotFound(); } // return project; // } // /// // /// Updates a specific project. // /// // /// // /// Sample request: // /// // /// PUT: api/Projects/3 // /// { // /// "id": "357727fd-5262-4522-b8a3-38271d43de84", // /// "firstName": "Thomas", // /// "lastName": "Price", // /// "presentation": "New Team?!", // /// "email": "tp@mail.com", // /// "phone": "0198237645" // /// } // /// // /// // /// Returns the modified project // /// Request was succesful but no content is changed // /// If the required project is null // [HttpPut("{id}")] // [ProducesResponseType(StatusCodes.Status200OK)] // [ProducesResponseType(StatusCodes.Status204NoContent)] // [ProducesResponseType(StatusCodes.Status404NotFound)] // public async Task PutProject(int id, Project project) // { // if (id != project.Id) { return BadRequest(); } // try // { // await _projectRepo.UpdateAsync(project); // } // catch (DbUpdateConcurrencyException) // { // if (!_projectRepo.Exists(id)) // { // return NotFound(); // } // else // { // throw; // } // } // return NoContent(); // } // /// // /// Creates a project. // /// // /// // /// Sample request: // /// // /// POST: api/Projects/ // /// { // /// "firstName": "Thomas", // /// "lastName": "Price", // /// "presentation": "New Team?!", // /// "email": "tp@mail.com", // /// "phone": "0198237645" // /// } // /// // /// // /// Returns the created project // [HttpPost] // [ProducesResponseType(StatusCodes.Status201Created)] // [ProducesResponseType(StatusCodes.Status404NotFound)] // public async Task> PostProject(Project project) // { // if (!ModelState.IsValid) { return BadRequest(); } // await _projectRepo.AddAsync(project); // return CreatedAtAction("GetProject", new { id = project.Id }, project); // } // /// // /// Deletes a project. // /// // /// // /// Sample request: // /// // /// DELETE: api/Projects/5 // /// // /// // /// Returns the deleted project // [ProducesResponseType(StatusCodes.Status200OK)] // [ProducesResponseType(StatusCodes.Status404NotFound)] // [HttpDelete("{id}")] // public async Task> DeleteProject(int id) // { // var project = await _projectRepo.GetByIdAsync(id); // if (project == null) // { // return NotFound(); // } // await _projectRepo.DeleteAsync(id); // return project; // } // /// // /// Gets a project members. // /// // /// // /// Sample request: // /// // /// GET: api/Projects/5/Members // /// // /// // /// Returns the project members // [ProducesResponseType(StatusCodes.Status200OK)] // [ProducesResponseType(StatusCodes.Status404NotFound)] // [HttpGet("{id}/members")] // public async Task>> GetProjectMembers(int id) // { // Project project = await _projectRepo.GetByIdAsync(id); // if (project == null) // { return NotFound(); } // return project.GetMembers(); // } // /// // /// Updates a project members. // /// // /// // /// Sample request: // /// // /// PUT: api/Projects/5/Members // /// { // /// "id": "357727fd-5262-4522-b8a3-38271d43de84", // /// "firstName": "Thomas", // /// "lastName": "Price", // /// "presentation": "New Team?!", // /// "email": "tp@mail.com", // /// "phone": "0198237645" // /// } // /// // /// No content // [ProducesResponseType(StatusCodes.Status204NoContent)] // [ProducesResponseType(StatusCodes.Status404NotFound)] // [HttpPut("{id}/members")] // public async Task> SetProjectMembers(int id, List projectMembers) // { // Project project = await _projectRepo.GetByIdAsync(id); // if (project == null) // { // return NotFound(); // } // project.SetMembers(projectMembers); // try // { // await _projectRepo.UpdateAsync(project); // } // 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 NoContent(); // } // // /// // // /// Assign a user to a project. // // /// // // /// // // /// Sample request: // // /// // // /// POST: api/Projects/addmembers // // /// [{ // // /// "id": "357727fd-5262-4522-b8a3-38271d43de84", // // /// "firstName": "Thomas", // // /// "lastName": "Price", // // /// "presentation": "New Team?!", // // /// "email": "tp@mail.com", // // /// "phone": "0198237645" // // /// }] // // /// // // /// // // /// Returns the created project // // [ProducesResponseType(StatusCodes.Status204NoContent)] // // [ProducesResponseType(StatusCodes.Status404NotFound)] // // [HttpPut("{id}/addMembers")] // // public async Task> AddMembersToProject(int id, List usersToAdd) // // { // // if (usersToAdd == null) // // { // // return BadRequest(); // // } // // Project project = await GetProjectByIdAsync(id); // // project.AddMembers(usersToAdd); // // 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 NoContent(); // // } // // /// // // /// Remove a user to a project. // // /// // // /// // // /// Sample request: // // /// // // /// PUT: api/Projects/removemembers // // /// [{ // // /// "id": "357727fd-5262-4522-b8a3-38271d43de84", // // /// "firstName": "Thomas", // // /// "lastName": "Price", // // /// "presentation": "New Team?!", // // /// "email": "tp@mail.com", // // /// "phone": "0198237645" // // /// }] // // /// // // /// // // /// Returns the created project // // [ProducesResponseType(StatusCodes.Status204NoContent)] // // [ProducesResponseType(StatusCodes.Status404NotFound)] // // [HttpPut("{id}/removeMembers")] // // public async Task> RemoveMembersFromProject(int id, List usersToRemove) // // { // // Project project = await GetProjectByIdAsync(id); // // project.RemoveMembers(usersToRemove); // // 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 NoContent(); // // } // } // }