using System; using System.Collections.Generic; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using TicketManager.Data; using TicketManager.Models; using Microsoft.AspNetCore.Authorization; namespace TicketManager.Controllers { [Authorize] [Route("api/v1/[controller]")] [ApiController] public class UsersController : ControllerBase { private readonly IAppUserRepository _users; public UsersController(IAppUserRepository users) { _users = users; } // GET: api/Users [HttpGet] public async Task> GetUsers() { return await _users.List(); } // GET: api/Users/5 [HttpGet("{id}")] public async Task> GetUser(Guid id) { var user = await _users.GetUser(id); if (user == null) { return NotFound(); } return user; } // PUT: api/Users/5 // To protect from overposting attacks, please enable the specific properties you want to bind to, for // more details see https://aka.ms/RazorPagesCRUD. [HttpPut("{id}")] public async Task PutUser(Guid id, AppUser user) { if (id != user.Id) { return BadRequest(); } try { await _users.Update(user); } catch (DbUpdateConcurrencyException) { if (!_users.Exists(id)) { return NotFound(); } else { throw; } } return NoContent(); } // POST: api/Users // To protect from overposting attacks, please enable the specific properties you want to bind to, for // more details see https://aka.ms/RazorPagesCRUD. [HttpPost] public async Task> PostUser(AppUser user) { await _users.Add(user); return CreatedAtAction("GetUser", new { id = user.Id }, user); } // DELETE: api/Users/5 [HttpDelete("{id}")] public async Task> DeleteUser(Guid id) { var user = await _users.GetUser(id); if (user == null) { return NotFound(); } await _users.Delete(user); return user; } [HttpGet("{id}/projects")] public async Task>> GetAppUserProjects(Guid id) { AppUser user = await _users.GetUser(id); if (user == null) { return BadRequest(); } return user.GetProjects(); } [HttpGet("{id}/tickets/")] public async Task>> GetAppUserTickets(Guid id) { AppUser user = await _users.GetUser(id); if (user == null) { return BadRequest(); } return user.GetTickets(); } } }