using System; using System.Linq; using System.Security.Claims; using System.Threading.Tasks; using AutoMapper; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Mvc; using PodNoms.Api.Models; using PodNoms.Api.Models.ViewModels; using PodNoms.Api.Persistence; using PodNoms.Api.Services.Auth; namespace PodNoms.Api.Controllers { [Authorize] [Route("[controller]")] public class ProfileController : BaseAuthController { public IUnitOfWork _unitOfWork { get; } public IMapper _mapper { get; } private readonly IEntryRepository _entryRepository; public ProfileController(IMapper mapper, IUnitOfWork unitOfWork, IEntryRepository entryRepository, UserManager userManager, IHttpContextAccessor contextAccessor) : base(contextAccessor, userManager) { this._entryRepository = entryRepository; this._mapper = mapper; this._unitOfWork = unitOfWork; } [HttpGet] public ActionResult Get() { var result = _mapper.Map(_applicationUser); return new OkObjectResult(result); } [HttpPost] public async Task> Post([FromBody] ProfileViewModel item) { _applicationUser.Slug = item.Slug; _applicationUser.FirstName = item.FirstName; _applicationUser.LastName = item.LastName; await _userManager.UpdateAsync(_applicationUser); var ret = _mapper.Map(_applicationUser); return Ok(ret); } [HttpGet("checkslug/{slug}")] public async Task> CheckSlug(string slug) { var slugValid = await _userManager.CheckSlug(slug); return Ok(slugValid); } [HttpGet("limits")] public async Task> GetProfileLimits() { var entries = await _entryRepository.GetAllForUserAsync(_applicationUser.Id); var user = _mapper.Map(_applicationUser); var sum = entries.Select(x => x.AudioFileSize) .Sum(); var vm = new ProfileLimitsViewModel { StorageQuota = 5368709120, //5Gb StorageUsed = sum, User = user }; return Ok(vm); } } }