86 lines
3.0 KiB
C#
86 lines
3.0 KiB
C#
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<IActionResult> 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);
|
|
}
|
|
}
|
|
}
|
|
}
|