using EnvelopeGenerator.Common; using EnvelopeGenerator.Web.Services; using Microsoft.AspNetCore.Mvc; namespace EnvelopeGenerator.Web.Controllers { public class EnvelopeController : BaseController { private readonly EnvelopeService envelopeService; private readonly ActionService actionService; public EnvelopeController(DatabaseService database, LoggingService logging, EnvelopeService envelope) : base(database, logging) { envelopeService = envelope; actionService = database.Services?.actionService; } [HttpGet] [Route("api/envelope/{envelopeKey}")] public IActionResult Get(string envelopeKey) { try { logger.Info("EnvelopeController/Get"); // Validate Envelope Key and load envelope envelopeService.EnsureValidEnvelopeKey(envelopeKey); EnvelopeResponse response = envelopeService.LoadEnvelope(envelopeKey); if (envelopeService.ReceiverAlreadySigned(response.Envelope, response.Receiver.Id) == true) { return Problem(statusCode: 403); } logger.Debug("Loaded envelope [{0}] for receiver [{1}]", response.Envelope.Id, response.Envelope.Id); return Json(response); } catch (Exception e) { return ErrorResponse(e); } } [HttpPost] [Route("api/envelope/{envelopeKey}")] public async Task Update(string envelopeKey) { try { logger.Info("EnvelopeController/Update"); // Validate Envelope Key and load envelope envelopeService.EnsureValidEnvelopeKey(envelopeKey); EnvelopeResponse response = envelopeService.LoadEnvelope(envelopeKey); // Again check if receiver has already signed if (envelopeService.ReceiverAlreadySigned(response.Envelope, response.Receiver.Id) == true) { return Problem(statusCode: 403); } var Request = ControllerContext.HttpContext.Request; var document = envelopeService.GetDocument(Request, envelopeKey); string annotationData = await envelopeService.EnsureValidAnnotationData(Request); envelopeService.InsertDocumentStatus(new DocumentStatus() { EnvelopeId = response.Envelope.Id, ReceiverId = response.Receiver.Id, Value = annotationData, Status = Common.Constants.DocumentStatus.Signed }); var signResult = actionService?.SignEnvelope(response.Envelope, response.Receiver); return Ok(new object()); } catch (Exception e) { return ErrorResponse(e); } } } }