using BotSharp.Platform.Dialogflow.Models; using BotSharp.Platform.Dialogflow.ViewModels; using BotSharp.Platform.Models.Agents; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using System; using System.IO; using System.IO.Compression; using System.Linq; using System.Threading.Tasks; namespace BotSharp.Platform.Dialogflow.Controllers { /// /// Agent /// [Route("v1/[controller]")] public class AgentController : ControllerBase { private DialogflowAi builder; /// /// Initialize dialog controller and get a platform instance /// /// public AgentController(DialogflowAi platform) { builder = platform; } /// /// Import a agent from a uploaded zip file /// /// /// [HttpPost("import")] [ProducesResponseType(typeof(ImportedAgentViewModel), 200)] public async Task Import(IFormFile uploadedFile) { if (uploadedFile == null || uploadedFile.Length == 0) { return BadRequest(); } var filePath = Path.GetTempFileName(); Console.WriteLine($"Temp file saved to {filePath}"); using (var stream = new FileStream(filePath, FileMode.Create)) { await uploadedFile.CopyToAsync(stream); } string dest = Path.Combine(AppDomain.CurrentDomain.GetData("DataPath").ToString(), "Projects", uploadedFile.FileName.Split('.').First(), "tmp"); if (Directory.Exists(dest)) { System.IO.Directory.Delete(dest, true); } Console.WriteLine($"Extract zip file to {dest}"); ZipFile.ExtractToDirectory(filePath, dest); System.IO.File.Delete(filePath); var agent = await builder.LoadAgentFromFile>(dest); await builder.SaveAgent(agent); return Ok(new ImportedAgentViewModel { Id = agent.Id, Name = agent.Name, Description = agent.Description, ClientAccessToken = agent.ClientAccessToken }); } /// /// Dump agent /// /// /// [HttpGet("{agentId}")] public ActionResult Dump([FromRoute] String agentId) { return Ok(); } } }