private async Task <TDocument> CreateDocumentAsync <TDocument>(DocumentCreate create) { Validator.ValidateNotNull(create, nameof(create)); Validator.Validate(create); Template template = null; try { template = await _templateRepository.GetTemplateAsync(create.TemplateId); } catch (EntityNotFoundException ex) { ThrowEntityNotFoundAsClientModelValidation(ex, nameof(create.TemplateId)); } ValidateDocumentAgainstTemplate(create, template); return(await _documentRenderer.RenderAsync <TDocument>( template.Markup, template.MarkupVersion, new DocumentRenderModel() { Items = create.InputValues.Select(kvp => new DocumentRenderModelItem() { Reference = kvp.Key, Value = ((object)kvp.Value).ToString() }), Sign = template.IsSignable ? create.GetIsSigned() : false, Exports = _documentExportsFactory.Create(template, create.InputValues) })); }
public async Task <SigningRequestResult> CreateSigningRequestAsync(DocumentCreate document) { // TODO: Validate document var template = await _templateRepository.GetTemplateAsync(document.TemplateId); var signingRequest = new SigningRequest() { Id = Guid.NewGuid().ToString(), TemplateId = template.Id, TemplateVersion = template.Version, InputValues = document.InputValues, Signatories = _documentExportsFactory .Create(template, document.InputValues) .ListSignatories() .Select(s => s.Id) }; await _signingRequestRepository.CreateSigningRequestAsync(signingRequest); var signingKeysDecodedByEmail = signingRequest.Signatories.ToDictionary( email => email, email => new SigningKey() { SignatoryEmail = email, SigningRequestId = signingRequest.Id }); var signingUrlsByEmail = signingKeysDecodedByEmail.ToDictionary( kvp => kvp.Key, kvp => $"{_hostOptions.Signing}/{_signingKeyEncoder.Encode(kvp.Value)}?v=1"); await _signingNotifier.NotifyAsync(signingUrlsByEmail); return(new SigningRequestResult() { Type = _signingNotifier.NotificationTypeId, TypeData = signingUrlsByEmail }); }