예제 #1
0
        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)
            }));
        }
예제 #2
0
        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
            });
        }