using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Bit.Core.Repositories; using Microsoft.AspNetCore.Authorization; using Bit.Api.Models; using Bit.Core.Exceptions; using Bit.Core.Domains; using Microsoft.AspNetCore.Identity; namespace Bit.Api.Controllers { [Route("devices")] [Authorize("Application")] public class DevicesController : Controller { private readonly IDeviceRepository _deviceRepository; private readonly UserManager _userManager; public DevicesController( IDeviceRepository deviceRepository, UserManager userManager) { _deviceRepository = deviceRepository; _userManager = userManager; } [HttpGet("{id}")] public async Task Get(string id) { var device = await _deviceRepository.GetByIdAsync(new Guid(id), new Guid(_userManager.GetUserId(User))); if(device == null) { throw new NotFoundException(); } var response = new DeviceResponseModel(device); return response; } [HttpGet("")] public async Task> Get() { ICollection devices = await _deviceRepository.GetManyByUserIdAsync(new Guid(_userManager.GetUserId(User))); var responses = devices.Select(d => new DeviceResponseModel(d)); return new ListResponseModel(responses); } [HttpPost("")] public async Task Post([FromBody]DeviceRequestModel model) { var device = model.ToDevice(_userManager.GetUserId(User)); await _deviceRepository.CreateAsync(device); var response = new DeviceResponseModel(device); return response; } [HttpPut("{id}")] public async Task Put(string id, [FromBody]DeviceRequestModel model) { var device = await _deviceRepository.GetByIdAsync(new Guid(id), new Guid(_userManager.GetUserId(User))); if(device == null) { throw new NotFoundException(); } await _deviceRepository.ReplaceAsync(model.ToDevice(device)); var response = new DeviceResponseModel(device); return response; } [HttpDelete("{id}")] public async Task Delete(string id) { var device = await _deviceRepository.GetByIdAsync(new Guid(id), new Guid(_userManager.GetUserId(User))); if(device == null) { throw new NotFoundException(); } await _deviceRepository.DeleteAsync(device); } } }