using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using zero.Core.Api; using zero.Core.Entities; using zero.Core.Identity; using zero.Core.Options; using zero.Web.Models; namespace zero.Web.Controllers { [ZeroAuthorize(Permissions.Sections.Media, PermissionsValue.True)] public class MediaController : BackofficeController { IMediaApi Api; IMediaFolderApi MediaFolderApi; IMediaUploadApi MediaUploadApi; public MediaController(IMediaApi api, IMediaFolderApi mediaFolderApi, IMediaUploadApi mediaUploadApi) { Api = api; MediaFolderApi = mediaFolderApi; MediaUploadApi = mediaUploadApi; } /// /// Get media item by id /// public async Task GetById([FromQuery] string id) { return await As(await Api.GetById(id)); } /// /// Get media item by id /// public async Task GetByIds([FromQuery] string[] ids) { return Json(await Api.GetById(ids)); } /// /// Get all media items + folders /// public async Task GetAll([FromQuery] MediaListQuery query) { ListResult items = await Mapper.Map(await Api.GetByQuery(query)); IList hierarchy = null; IEnumerable folders = new List(); MediaFolder folder = null; if (query.Page < 2) { folders = await Mapper.Map(await MediaFolderApi.GetAll(query.FolderId)); } if (!String.IsNullOrEmpty(query.FolderId)) { folder = await MediaFolderApi.GetById(query.FolderId); hierarchy = await MediaFolderApi.GetHierarchy(query.FolderId); } return Json(new MediaListResultModel(items, folders, folder, hierarchy)); } /// /// Save a media item /// public async Task Save([FromBody] MediaEditModel model) { Media entity = await Mapper.Map(model, await Api.GetById(model.Id)); return await As(await Api.Save(entity)); } /// /// Upload a file /// public async Task Upload(IFormFile file, string folderId) { Media media = await MediaUploadApi.Upload(file, folderId); return Json(await Api.Save(media)); } /// /// Deletes a media item /// public async Task Delete([FromQuery] string id) { return await As(await Api.Delete(id)); } } }