From b65766ce247827b0a804d8e022265c19d0684125 Mon Sep 17 00:00:00 2001 From: Developer 02 Date: Tue, 2 Apr 2024 14:53:25 +0200 Subject: [PATCH] =?UTF-8?q?Alle=20Entit=C3=A4ten=20wurden=20mit=20Attribut?= =?UTF-8?q?en=20erstellt=20und=20zu=20EFCore=20DBContex=20hinzugef=C3=BCgt?= =?UTF-8?q?.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- EnvelopeGenerator.Domain/Entities/Config.cs | 2 +- .../Entities/DocumentReceiverElement.cs | 85 +++++++++++++++ .../Entities/DocumentStatus.cs | 45 ++++++++ .../Entities/EmailTemplate.cs | 23 ++++ EnvelopeGenerator.Domain/Entities/Envelope.cs | 86 +++++++++++++++ .../Entities/EnvelopeCertificate.cs | 42 +++++++ .../Entities/EnvelopeDocument.cs | 10 +- .../Entities/EnvelopeHistory.cs | 33 ++++++ .../Entities/EnvelopeReceiver.cs | 43 ++++++++ .../Entities/EnvelopeType.cs | 60 ++++++++++ EnvelopeGenerator.Domain/Entities/Receiver.cs | 28 +++++ .../Entities/UserReceiver.cs | 38 +++++++ .../Contracts/IConfigRepository.cs | 3 +- .../EGDbContext.cs | 11 ++ .../DocumentReceiverElementRepository.cs | 6 + .../Controllers/BaseController.cs | 14 ++- .../Controllers/ConfigTestController.cs | 11 ++ .../Controllers/DocumentController.cs | 20 ++-- .../Controllers/EnvelopeController.cs | 24 ++-- .../EnvelopeDocumentTestController.cs | 2 +- .../Controllers/HomeController.cs | 19 +--- .../EnvelopeGenerator.Web.csproj | 1 + EnvelopeGenerator.Web/Program.cs | 103 +++++++++--------- EnvelopeGenerator.Web/Services/BaseService.cs | 18 --- .../Services/DatabaseService.cs | 79 ++++++-------- .../Services/EnvelopeService.cs | 86 +++++---------- .../Services/LoggingService.cs | 25 ----- .../Views/Home/ShowEnvelope.cshtml | 37 ++++++- EnvelopeGenerator.Web/appsettings.json | 47 ++++++-- EnvelopeGenerator.Web/package-lock.json | 26 ++++- 30 files changed, 765 insertions(+), 262 deletions(-) create mode 100644 EnvelopeGenerator.Domain/Entities/DocumentReceiverElement.cs create mode 100644 EnvelopeGenerator.Domain/Entities/DocumentStatus.cs create mode 100644 EnvelopeGenerator.Domain/Entities/EmailTemplate.cs create mode 100644 EnvelopeGenerator.Domain/Entities/Envelope.cs create mode 100644 EnvelopeGenerator.Domain/Entities/EnvelopeCertificate.cs create mode 100644 EnvelopeGenerator.Domain/Entities/EnvelopeHistory.cs create mode 100644 EnvelopeGenerator.Domain/Entities/EnvelopeReceiver.cs create mode 100644 EnvelopeGenerator.Domain/Entities/EnvelopeType.cs create mode 100644 EnvelopeGenerator.Domain/Entities/Receiver.cs create mode 100644 EnvelopeGenerator.Domain/Entities/UserReceiver.cs create mode 100644 EnvelopeGenerator.Infrastructure/Repositories/DocumentReceiverElementRepository.cs delete mode 100644 EnvelopeGenerator.Web/Services/BaseService.cs delete mode 100644 EnvelopeGenerator.Web/Services/LoggingService.cs diff --git a/EnvelopeGenerator.Domain/Entities/Config.cs b/EnvelopeGenerator.Domain/Entities/Config.cs index ff689bf4..6c91262c 100644 --- a/EnvelopeGenerator.Domain/Entities/Config.cs +++ b/EnvelopeGenerator.Domain/Entities/Config.cs @@ -40,4 +40,4 @@ namespace EnvelopeGenerator.Domain.Entities [DefaultValue("")] // This sets the default value for DOCUMENT_PATH_MOVE_AFTSEND public string DocumentPathMoveAftsend { get; set; } } -} +} \ No newline at end of file diff --git a/EnvelopeGenerator.Domain/Entities/DocumentReceiverElement.cs b/EnvelopeGenerator.Domain/Entities/DocumentReceiverElement.cs new file mode 100644 index 00000000..af1d741c --- /dev/null +++ b/EnvelopeGenerator.Domain/Entities/DocumentReceiverElement.cs @@ -0,0 +1,85 @@ +using System.ComponentModel; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; + +namespace EnvelopeGenerator.Domain.Entities +{ + [Table("TBSIG_DOCUMENT_RECEIVER_ELEMENT", Schema = "dbo")] + public class DocumentReceiverElement + { + [Key] + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + [Column("GUID")] + public int Guid { get; set; } + + [Required] + [Column("DOCUMENT_ID")] + public int DocumentId { get; set; } + + [Required] + [Column("RECEIVER_ID")] + public int ReceiverId { get; set; } + + [Required] + [Column("ELEMENT_TYPE")] + [DefaultValue(0)] + public int ElementType { get; set; } + + [Required] + [Column("POSITION_X")] + [DefaultValue(0)] + public float PositionX { get; set; } + + [Required] + [Column("POSITION_Y")] + [DefaultValue(0)] + public float PositionY { get; set; } + + [Required] + [Column("WIDTH")] + [DefaultValue(0)] + public float Width { get; set; } + + [Required] + [Column("HEIGHT")] + [DefaultValue(0)] + public float Height { get; set; } + + [Required] + [Column("PAGE")] + [DefaultValue(1)] + public int Page { get; set; } + + [Required] + [Column("REQUIRED")] + [DefaultValue(false)] + public bool Required { get; set; } + + [Column("TOOLTIP")] + public string Tooltip { get; set; } + + [Required] + [Column("READ_ONLY")] + [DefaultValue(false)] + public bool ReadOnly { get; set; } + + [Required] + [Column("ANNOTATION_INDEX")] + [DefaultValue(0)] + public int AnnotationIndex { get; set; } + + [Required] + [Column("ADDED_WHEN", TypeName = "datetime")] + [DefaultValue("GETDATE()")] + public DateTime AddedWhen { get; set; } + + [Column("CHANGED_WHEN", TypeName = "datetime")] + public DateTime? ChangedWhen { get; set; } + + [ForeignKey("DocumentId")] + public virtual Document Document { get; set; } + + [ForeignKey("ReceiverId")] + public virtual Receiver Receiver { get; set; } + } +} \ No newline at end of file diff --git a/EnvelopeGenerator.Domain/Entities/DocumentStatus.cs b/EnvelopeGenerator.Domain/Entities/DocumentStatus.cs new file mode 100644 index 00000000..cde49e3a --- /dev/null +++ b/EnvelopeGenerator.Domain/Entities/DocumentStatus.cs @@ -0,0 +1,45 @@ +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; + +namespace EnvelopeGenerator.Domain.Entities +{ + [Table("TBSIG_DOCUMENT_STATUS", Schema = "dbo")] + public class DocumentStatus + { + [Key] + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + [Column("GUID")] + public int Guid { get; set; } + + [Required] + [Column("ENVELOPE_ID")] + public int EnvelopeId { get; set; } + + [Required] + [Column("RECEIVER_ID")] + public int ReceiverId { get; set; } + + [Required] + [Column("STATUS")] + public int Status { get; set; } + + [Column("STATUS_CHANGED_WHEN", TypeName = "datetime")] + public DateTime? StatusChangedWhen { get; set; } + + [Column("VALUE", TypeName = "nvarchar(max)")] + public string Value { get; set; } + + [Required] + [Column("ADDED_WHEN", TypeName = "datetime")] + public DateTime AddedWhen { get; set; } + + [Column("CHANGED_WHEN", TypeName = "datetime")] + public DateTime? ChangedWhen { get; set; } + + [ForeignKey("EnvelopeId")] + public virtual Envelope? Envelope { get; set; } + + [ForeignKey("ReceiverId")] + public virtual Receiver? Receiver { get; set; } + } +} diff --git a/EnvelopeGenerator.Domain/Entities/EmailTemplate.cs b/EnvelopeGenerator.Domain/Entities/EmailTemplate.cs new file mode 100644 index 00000000..2e1fb17e --- /dev/null +++ b/EnvelopeGenerator.Domain/Entities/EmailTemplate.cs @@ -0,0 +1,23 @@ +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; + +namespace EnvelopeGenerator.Domain.Entities +{ + [Table("TBSIG_EMAIL_TEMPLATE", Schema = "dbo")] + public class EmailTemplate + { + [Key] + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + [Column("GUID")] + public int Guid { get; set; } + + [Column("NAME", TypeName = "nvarchar(64)")] + public string Name { get; set; } + + [Column("BODY", TypeName = "nvarchar(max)")] + public string Body { get; set; } + + [Column("SUBJECT", TypeName = "nvarchar(512)")] + public string Subject { get; set; } + } +} \ No newline at end of file diff --git a/EnvelopeGenerator.Domain/Entities/Envelope.cs b/EnvelopeGenerator.Domain/Entities/Envelope.cs new file mode 100644 index 00000000..b5f2fa2d --- /dev/null +++ b/EnvelopeGenerator.Domain/Entities/Envelope.cs @@ -0,0 +1,86 @@ +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; + +namespace EnvelopeGenerator.Domain.Entities +{ + [Table("TBSIG_ENVELOPE", Schema = "dbo")] + public class Envelope + { + [Key] + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + [Column("GUID")] + public int Guid { get; set; } + + [Required] + [Column("USER_ID")] + public int UserId { get; set; } + + [Required] + [Column("STATUS")] + public int Status { get; set; } + + [Required] + [Column("ENVELOPE_UUID", TypeName = "nvarchar(36)")] + public string EnvelopeUuid { get; set; } + + [Required] + [Column("MESSAGE", TypeName = "nvarchar(max)")] + public string Message { get; set; } + + [Column("EXPIRES_WHEN", TypeName = "datetime")] + public DateTime? ExpiresWhen { get; set; } + + [Column("EXPIRES_WARNING_WHEN", TypeName = "datetime")] + public DateTime? ExpiresWarningWhen { get; set; } + + [Required] + [Column("ADDED_WHEN", TypeName = "datetime")] + public DateTime AddedWhen { get; set; } + + [Column("CHANGED_WHEN", TypeName = "datetime")] + public DateTime? ChangedWhen { get; set; } + + [Column("TITLE", TypeName = "nvarchar(128)")] + public string Title { get; set; } + + [Column("CONTRACT_TYPE")] + public int? ContractType { get; set; } + + [Column("LANGUAGE", TypeName = "nvarchar(5)")] + public string Language { get; set; } + + [Column("SEND_REMINDER_EMAILS")] + public bool? SendReminderEmails { get; set; } + + [Column("FIRST_REMINDER_DAYS")] + public int? FirstReminderDays { get; set; } + + [Column("REMINDER_INTERVAL_DAYS")] + public int? ReminderIntervalDays { get; set; } + + [Column("ENVELOPE_TYPE")] + public int? EnvelopeType { get; set; } + + [Column("CERTIFICATION_TYPE")] + public int? CertificationType { get; set; } + + [Column("USE_ACCESS_CODE")] + public bool? UseAccessCode { get; set; } + + [Column("FINAL_EMAIL_TO_CREATOR")] + public int? FinalEmailToCreator { get; set; } + + [Column("FINAL_EMAIL_TO_RECEIVERS")] + public int? FinalEmailToReceivers { get; set; } + + [Column("EXPIRES_WHEN_DAYS")] + public int? ExpiresWhenDays { get; set; } + + [Column("EXPIRES_WARNING_WHEN_DAYS")] + public int? ExpiresWarningWhenDays { get; set; } + + [Required] + [Column("DMZ_MOVED")] + public bool DmzMoved { get; set; } + } +} diff --git a/EnvelopeGenerator.Domain/Entities/EnvelopeCertificate.cs b/EnvelopeGenerator.Domain/Entities/EnvelopeCertificate.cs new file mode 100644 index 00000000..82ef3bb7 --- /dev/null +++ b/EnvelopeGenerator.Domain/Entities/EnvelopeCertificate.cs @@ -0,0 +1,42 @@ +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; + +namespace EnvelopeGenerator.Domain.Entities +{ + [Table("TBSIG_ENVELOPE_CERTIFICATE", Schema = "dbo")] + public class EnvelopeCertificate + { + [Key] + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + [Column("GUID")] + public int Guid { get; set; } + + [Required] + [Column("ENVELOPE_ID")] + public int EnvelopeId { get; set; } + + [Required] + [Column("ENVELOPE_UUID", TypeName = "nvarchar(36)")] + public string EnvelopeUuid { get; set; } + + [Required] + [Column("ENVELOPE_SUBJECT", TypeName = "nvarchar(512)")] + public string EnvelopeSubject { get; set; } + + [Required] + [Column("CREATOR_ID")] + public int CreatorId { get; set; } + + [Required] + [Column("CREATOR_NAME", TypeName = "nvarchar(128)")] + public string CreatorName { get; set; } + + [Required] + [Column("CREATOR_EMAIL", TypeName = "nvarchar(128)")] + public string CreatorEmail { get; set; } + + [Required] + [Column("ENVELOPE_STATUS")] + public int EnvelopeStatus { get; set; } + } +} \ No newline at end of file diff --git a/EnvelopeGenerator.Domain/Entities/EnvelopeDocument.cs b/EnvelopeGenerator.Domain/Entities/EnvelopeDocument.cs index a70efdc4..f2ea078d 100644 --- a/EnvelopeGenerator.Domain/Entities/EnvelopeDocument.cs +++ b/EnvelopeGenerator.Domain/Entities/EnvelopeDocument.cs @@ -8,23 +8,23 @@ namespace EnvelopeGenerator.Domain.Entities { [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] - [Column("GUID", TypeName = "int")] + [Column("GUID")] public int Guid { get; set; } - [Column("ENVELOPE_ID", TypeName = "int")] [Required] + [Column("ENVELOPE_ID")] public int EnvelopeId { get; set; } - [Column("FILENAME", TypeName = "nvarchar(256)")] [Required] + [Column("FILENAME", TypeName = "nvarchar(256)")] public string Filename { get; set; } - [Column("FILEPATH", TypeName = "nvarchar(256)")] [Required] + [Column("FILEPATH", TypeName = "nvarchar(256)")] public string Filepath { get; set; } - [Column("ADDED_WHEN", TypeName = "datetime")] [Required] + [Column("ADDED_WHEN", TypeName = "datetime")] public DateTime AddedWhen { get; set; } [Column("FILENAME_ORIGINAL", TypeName = "nvarchar(256)")] diff --git a/EnvelopeGenerator.Domain/Entities/EnvelopeHistory.cs b/EnvelopeGenerator.Domain/Entities/EnvelopeHistory.cs new file mode 100644 index 00000000..bb196c52 --- /dev/null +++ b/EnvelopeGenerator.Domain/Entities/EnvelopeHistory.cs @@ -0,0 +1,33 @@ +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; + +namespace EnvelopeGenerator.Domain.Entities +{ + [Table("TBSIG_ENVELOPE_HISTORY", Schema = "dbo")] + public class EnvelopeHistory + { + [Key] + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + [Column("GUID")] + public long Guid { get; set; } + + [Required] + [Column("ENVELOPE_ID")] + public int EnvelopeId { get; set; } + + [Required] + [Column("USER_REFERENCE", TypeName = "nvarchar(128)")] + public string UserReference { get; set; } + + [Required] + [Column("STATUS")] + public int Status { get; set; } + + [Required] + [Column("ADDED_WHEN", TypeName = "datetime")] + public DateTime AddedWhen { get; set; } + + [Column("ACTION_DATE", TypeName = "datetime")] + public DateTime? ActionDate { get; set; } + } +} \ No newline at end of file diff --git a/EnvelopeGenerator.Domain/Entities/EnvelopeReceiver.cs b/EnvelopeGenerator.Domain/Entities/EnvelopeReceiver.cs new file mode 100644 index 00000000..8d32a8f8 --- /dev/null +++ b/EnvelopeGenerator.Domain/Entities/EnvelopeReceiver.cs @@ -0,0 +1,43 @@ +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; + +namespace EnvelopeGenerator.Domain.Entities +{ + [Table("TBSIG_ENVELOPE_RECEIVER", Schema = "dbo")] + public class EnvelopeReceiver + { + [Key] + [Column("ENVELOPE_ID")] + public int EnvelopeId { get; set; } + + [Key] + [Column("RECEIVER_ID")] + public int ReceiverId { get; set; } + + [Required] + [Column("SEQUENCE")] + public int Sequence { get; set; } + + [Column("NAME", TypeName = "nvarchar(128)")] + public string Name { get; set; } + + [Column("JOB_TITLE", TypeName = "nvarchar(128)")] + public string JobTitle { get; set; } + + [Column("COMPANY_NAME", TypeName = "nvarchar(128)")] + public string CompanyName { get; set; } + + [Column("PRIVATE_MESSAGE", TypeName = "nvarchar(max)")] + public string PrivateMessage { get; set; } + + [Column("ACCESS_CODE", TypeName = "nvarchar(64)")] + public string AccessCode { get; set; } + + [Required] + [Column("ADDED_WHEN", TypeName = "datetime")] + public DateTime AddedWhen { get; set; } + + [Column("CHANGED_WHEN", TypeName = "datetime")] + public DateTime? ChangedWhen { get; set; } + } +} \ No newline at end of file diff --git a/EnvelopeGenerator.Domain/Entities/EnvelopeType.cs b/EnvelopeGenerator.Domain/Entities/EnvelopeType.cs new file mode 100644 index 00000000..6e8b3c20 --- /dev/null +++ b/EnvelopeGenerator.Domain/Entities/EnvelopeType.cs @@ -0,0 +1,60 @@ +using System; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using EnvelopeGenerator.Domain.Entities; + +namespace EnvelopeGenerator.Domain.Entities +{ + [Table("TBSIG_ENVELOPE_TYPE", Schema = "dbo")] + public class EnvelopeType + { + [Key] + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + [Column("GUID")] + public int Guid { get; set; } + + [Required] + [Column("TITLE", TypeName = "nvarchar(128)")] + public string Title { get; set; } + + [Column("LANGUAGE", TypeName = "nvarchar(5)")] + public string Language { get; set; } + + [Column("EXPIRES_DAYS")] + public int? ExpiresDays { get; set; } + + [Column("CERTIFICATION_TYPE")] + public int? CertificationType { get; set; } + + [Column("USE_ACCESS_CODE")] + public bool? UseAccessCode { get; set; } + + [Column("FINAL_EMAIL_TO_CREATOR")] + public int? FinalEmailToCreator { get; set; } + + [Column("FINAL_EMAIL_TO_RECEIVERS")] + public int? FinalEmailToReceivers { get; set; } + + [Required] + [Column("ADDED_WHEN", TypeName = "datetime")] + public DateTime AddedWhen { get; set; } + + [Column("CHANGED_WHEN", TypeName = "datetime")] + public DateTime? ChangedWhen { get; set; } + + [Column("EXPIRES_WARNING_DAYS")] + public int? ExpiresWarningDays { get; set; } + + [Column("SEND_REMINDER_EMAILS")] + public bool? SendReminderEmails { get; set; } + + [Column("FIRST_REMINDER_DAYS")] + public int? FirstReminderDays { get; set; } + + [Column("REMINDER_INTERVAL_DAYS")] + public int? ReminderIntervalDays { get; set; } + + [Column("CONTRACT_TYPE")] + public int? ContractType { get; set; } + } +} \ No newline at end of file diff --git a/EnvelopeGenerator.Domain/Entities/Receiver.cs b/EnvelopeGenerator.Domain/Entities/Receiver.cs new file mode 100644 index 00000000..f5e6065a --- /dev/null +++ b/EnvelopeGenerator.Domain/Entities/Receiver.cs @@ -0,0 +1,28 @@ +using System; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using EnvelopeGenerator.Domain.Entities; + +namespace EnvelopeGenerator.Domain.Entities +{ + [Table("TBSIG_RECEIVER", Schema = "dbo")] + public class Receiver + { + [Key] + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + [Column("GUID")] + public int Guid { get; set; } + + [Required] + [Column("EMAIL_ADDRESS", TypeName = "nvarchar(128)")] + public string EmailAddress { get; set; } + + [Required] + [Column("SIGNATURE", TypeName = "nvarchar(64)")] + public string Signature { get; set; } + + [Required] + [Column("ADDED_WHEN", TypeName = "datetime")] + public DateTime AddedWhen { get; set; } + } +} \ No newline at end of file diff --git a/EnvelopeGenerator.Domain/Entities/UserReceiver.cs b/EnvelopeGenerator.Domain/Entities/UserReceiver.cs new file mode 100644 index 00000000..4bb0496c --- /dev/null +++ b/EnvelopeGenerator.Domain/Entities/UserReceiver.cs @@ -0,0 +1,38 @@ +using System; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using EnvelopeGenerator.Domain.Entities; + +namespace EnvelopeGenerator.Domain.Entities +{ + [Table("TBSIG_USER_RECEIVER", Schema = "dbo")] + public class UserReceiver + { + [Key] + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + [Column("GUID")] + public int Guid { get; set; } + + [Required] + [Column("USER_ID")] + public int UserId { get; set; } + + [Required] + [Column("RECEIVER_ID")] + public int ReceiverId { get; set; } + + [Required] + [Column("NAME", TypeName = "nvarchar(128)")] + public string Name { get; set; } + + [Column("COMPANY_NAME", TypeName = "nvarchar(128)")] + public string CompanyName { get; set; } + + [Column("JOB_TITLE", TypeName = "nvarchar(128)")] + public string JobTitle { get; set; } + + [Required] + [Column("ADDED_WHEN", TypeName = "datetime")] + public DateTime AddedWhen { get; set; } + } +} \ No newline at end of file diff --git a/EnvelopeGenerator.Infrastructure/Contracts/IConfigRepository.cs b/EnvelopeGenerator.Infrastructure/Contracts/IConfigRepository.cs index a4fb4812..120b3096 100644 --- a/EnvelopeGenerator.Infrastructure/Contracts/IConfigRepository.cs +++ b/EnvelopeGenerator.Infrastructure/Contracts/IConfigRepository.cs @@ -1,5 +1,4 @@ -using DigitalData.Core.Contracts.Application; -using DigitalData.Core.Contracts.Infrastructure; +using DigitalData.Core.Contracts.Infrastructure; using EnvelopeGenerator.Domain.Entities; namespace EnvelopeGenerator.Infrastructure.Contracts diff --git a/EnvelopeGenerator.Infrastructure/EGDbContext.cs b/EnvelopeGenerator.Infrastructure/EGDbContext.cs index e361faba..803e3067 100644 --- a/EnvelopeGenerator.Infrastructure/EGDbContext.cs +++ b/EnvelopeGenerator.Infrastructure/EGDbContext.cs @@ -14,6 +14,17 @@ namespace DigitalData.UserManager.Infrastructure.Repositories modelBuilder.Entity().HasNoKey(); modelBuilder.Entity(); + modelBuilder.Entity(); + modelBuilder.Entity(); + modelBuilder.Entity(); + modelBuilder.Entity(); + modelBuilder.Entity(); + modelBuilder.Entity(); + modelBuilder.Entity(); + modelBuilder.Entity(); + modelBuilder.Entity(); + modelBuilder.Entity(); + base.OnModelCreating(modelBuilder); } } diff --git a/EnvelopeGenerator.Infrastructure/Repositories/DocumentReceiverElementRepository.cs b/EnvelopeGenerator.Infrastructure/Repositories/DocumentReceiverElementRepository.cs new file mode 100644 index 00000000..876e9673 --- /dev/null +++ b/EnvelopeGenerator.Infrastructure/Repositories/DocumentReceiverElementRepository.cs @@ -0,0 +1,6 @@ +namespace EnvelopeGenerator.Infrastructure.Repositories +{ + public class DocumentReceiverElementRepository + { + } +} diff --git a/EnvelopeGenerator.Web/Controllers/BaseController.cs b/EnvelopeGenerator.Web/Controllers/BaseController.cs index bd66ea78..28f90b18 100644 --- a/EnvelopeGenerator.Web/Controllers/BaseController.cs +++ b/EnvelopeGenerator.Web/Controllers/BaseController.cs @@ -2,27 +2,29 @@ using EnvelopeGenerator.Common; using EnvelopeGenerator.Web.Services; using Microsoft.AspNetCore.Mvc; +using System.Text; namespace EnvelopeGenerator.Web.Controllers { public class BaseController : Controller { internal DatabaseService database; - internal LogConfig logConfig; internal State state; - public Logger logger; - public BaseController(DatabaseService database, LoggingService logging) + internal ILogger _logger; + + public BaseController(DatabaseService database, ILogger logger) { this.database = database; - this.logConfig = logging.LogConfig; - this.logger = logging.LogConfig.GetLogger(); this.state = database.State; + _logger = logger; } internal ObjectResult ErrorResponse(Exception e) { - logger.Error(e); + // Log the detailed error message. + _logger.LogError(e, "An unexpected error occurred."); + return Problem( statusCode: 500, detail: e.Message, diff --git a/EnvelopeGenerator.Web/Controllers/ConfigTestController.cs b/EnvelopeGenerator.Web/Controllers/ConfigTestController.cs index 8ef3a656..265760f6 100644 --- a/EnvelopeGenerator.Web/Controllers/ConfigTestController.cs +++ b/EnvelopeGenerator.Web/Controllers/ConfigTestController.cs @@ -3,6 +3,7 @@ using EnvelopeGenerator.Application.Contracts; using EnvelopeGenerator.Application.DTOs; using EnvelopeGenerator.Domain.Entities; using EnvelopeGenerator.Infrastructure.Contracts; +using Microsoft.AspNetCore.Mvc; namespace EnvelopeGenerator.Web.Controllers { @@ -10,6 +11,16 @@ namespace EnvelopeGenerator.Web.Controllers { public ConfigTestController(ILogger logger, IConfigService service) : base(logger, service) { + _logger.LogInformation("TEST_INFO"); + _logger.LogError("TEST_ERROR"); + } + + [HttpGet("test")] + public IActionResult Test() + { + _logger.LogError("Test Error"); + _logger.LogInformation("Test Info"); + throw new ArgumentNullException(); } } } \ No newline at end of file diff --git a/EnvelopeGenerator.Web/Controllers/DocumentController.cs b/EnvelopeGenerator.Web/Controllers/DocumentController.cs index d0ce6871..76f99ebd 100644 --- a/EnvelopeGenerator.Web/Controllers/DocumentController.cs +++ b/EnvelopeGenerator.Web/Controllers/DocumentController.cs @@ -1,7 +1,6 @@ using Microsoft.AspNetCore.Mvc; using EnvelopeGenerator.Common; using EnvelopeGenerator.Web.Services; -using static EnvelopeGenerator.Common.Constants; using EnvelopeGenerator.Application.Contracts; namespace EnvelopeGenerator.Web.Controllers @@ -12,7 +11,7 @@ namespace EnvelopeGenerator.Web.Controllers private readonly ActionService? actionService; private readonly IEnvelopeDocumentService _envDocService; - public DocumentController(DatabaseService database, LoggingService logging, EnvelopeService envelope, IEnvelopeDocumentService envDocService) : base(database, logging) + public DocumentController(DatabaseService database, EnvelopeService envelope, IEnvelopeDocumentService envDocService, ILogger logger) : base(database, logger) { envelopeService = envelope; actionService = database.Services?.actionService; @@ -25,15 +24,12 @@ namespace EnvelopeGenerator.Web.Controllers { try { - logger.Info("DocumentController/Get"); - // Validate Envelope Key and load envelope envelopeService.EnsureValidEnvelopeKey(envelopeKey); EnvelopeResponse response = await envelopeService.LoadEnvelope(envelopeKey); // Load document info - var Request = ControllerContext.HttpContext.Request; - var document = await envelopeService.GetDocument(Request, envelopeKey); + var document = await envelopeService.GetDocument(index, envelopeKey); // Load the document from disk var bytes = await envelopeService.GetDocumentContents(document); @@ -41,9 +37,9 @@ namespace EnvelopeGenerator.Web.Controllers // Return the document as bytes return File(bytes, "application/octet-stream"); } - catch (Exception e) + catch(Exception ex) { - return ErrorResponse(e); + return ErrorResponse(ex); } } @@ -53,19 +49,17 @@ namespace EnvelopeGenerator.Web.Controllers { try { - logger.Info("DocumentController/Open"); - // Validate Envelope Key and load envelope envelopeService.EnsureValidEnvelopeKey(envelopeKey); EnvelopeResponse response = await envelopeService.LoadEnvelope(envelopeKey); - actionService.OpenEnvelope(response.Envelope, response.Receiver); + actionService?.OpenEnvelope(response.Envelope, response.Receiver); return Ok(new object()); } - catch (Exception e) + catch(Exception ex) { - return ErrorResponse(e); + return ErrorResponse(ex); } } diff --git a/EnvelopeGenerator.Web/Controllers/EnvelopeController.cs b/EnvelopeGenerator.Web/Controllers/EnvelopeController.cs index 5b87d9d9..50368615 100644 --- a/EnvelopeGenerator.Web/Controllers/EnvelopeController.cs +++ b/EnvelopeGenerator.Web/Controllers/EnvelopeController.cs @@ -1,4 +1,5 @@ -using EnvelopeGenerator.Common; + +using EnvelopeGenerator.Common; using EnvelopeGenerator.Web.Services; using Microsoft.AspNetCore.Mvc; @@ -7,12 +8,12 @@ namespace EnvelopeGenerator.Web.Controllers public class EnvelopeController : BaseController { private readonly EnvelopeService envelopeService; - private readonly ActionService actionService; + private readonly ActionService? actionService; - public EnvelopeController(DatabaseService database, LoggingService logging, EnvelopeService envelope) : base(database, logging) + public EnvelopeController(DatabaseService database, EnvelopeService envelope, ILogger logger) : base(database, logger) { envelopeService = envelope; - actionService = database.Services?.actionService; + actionService = database?.Services?.actionService; } [HttpGet] @@ -21,8 +22,6 @@ namespace EnvelopeGenerator.Web.Controllers { try { - logger.Info("EnvelopeController/Get"); - // Validate Envelope Key and load envelope envelopeService.EnsureValidEnvelopeKey(envelopeKey); EnvelopeResponse response = await envelopeService.LoadEnvelope(envelopeKey); @@ -32,7 +31,7 @@ namespace EnvelopeGenerator.Web.Controllers return Problem(statusCode: 403); } - logger.Debug("Loaded envelope [{0}] for receiver [{1}]", response.Envelope.Id, response.Envelope.Id); + _logger.LogInformation("Loaded envelope [{0}] for receiver [{1}]", response.Envelope.Id, response.Envelope.Id); return Json(response); } catch (Exception e) @@ -43,12 +42,10 @@ namespace EnvelopeGenerator.Web.Controllers [HttpPost] [Route("api/envelope/{envelopeKey}")] - public async Task Update(string envelopeKey) + public async Task Update(string envelopeKey, int index) { try { - logger.Info("EnvelopeController/Update"); - // Validate Envelope Key and load envelope envelopeService.EnsureValidEnvelopeKey(envelopeKey); EnvelopeResponse response = await envelopeService.LoadEnvelope(envelopeKey); @@ -59,10 +56,9 @@ namespace EnvelopeGenerator.Web.Controllers return Problem(statusCode: 403); } - var Request = ControllerContext.HttpContext.Request; - var document = envelopeService.GetDocument(Request, envelopeKey); + var document = envelopeService.GetDocument(index, envelopeKey); - string annotationData = await envelopeService.EnsureValidAnnotationData(Request); + string? annotationData = await envelopeService.EnsureValidAnnotationData(Request); envelopeService.InsertDocumentStatus(new DocumentStatus() { @@ -74,7 +70,7 @@ namespace EnvelopeGenerator.Web.Controllers var signResult = actionService?.SignEnvelope(response.Envelope, response.Receiver); - return Ok(new object()); + return Ok(); } catch (Exception e) { diff --git a/EnvelopeGenerator.Web/Controllers/EnvelopeDocumentTestController.cs b/EnvelopeGenerator.Web/Controllers/EnvelopeDocumentTestController.cs index c191dbf2..70685dd5 100644 --- a/EnvelopeGenerator.Web/Controllers/EnvelopeDocumentTestController.cs +++ b/EnvelopeGenerator.Web/Controllers/EnvelopeDocumentTestController.cs @@ -12,4 +12,4 @@ namespace EnvelopeGenerator.Web.Controllers { } } -} +} \ No newline at end of file diff --git a/EnvelopeGenerator.Web/Controllers/HomeController.cs b/EnvelopeGenerator.Web/Controllers/HomeController.cs index 7f6e1d59..fe523857 100644 --- a/EnvelopeGenerator.Web/Controllers/HomeController.cs +++ b/EnvelopeGenerator.Web/Controllers/HomeController.cs @@ -10,10 +10,12 @@ namespace EnvelopeGenerator.Web.Controllers public class HomeController : BaseController { private readonly EnvelopeService _envelopeService; + private readonly IConfiguration _config; - public HomeController(DatabaseService databaseService, LoggingService loggingService, EnvelopeService envelopeService): base(databaseService, loggingService) + public HomeController(DatabaseService databaseService, EnvelopeService envelopeService, ILogger logger, IConfiguration configuration) : base(databaseService, logger) { _envelopeService = envelopeService; + _config = configuration; } [HttpGet] @@ -25,12 +27,11 @@ namespace EnvelopeGenerator.Web.Controllers [HttpPost] [Route("/")] - public IActionResult DebugEnvelopes() + public IActionResult DebugEnvelopes([FromForm] string password) { try { - StringValues passwordFromForm = HttpContext.Request.Form["password"]; - string passwordFromConfig = database.GetAppSetting("Config:AdminPassword"); + var passwordFromConfig = _config["Config:AdminPassword"] ?? throw new InvalidOperationException("No admin password configured!"); if (passwordFromConfig == null) { @@ -38,14 +39,6 @@ namespace EnvelopeGenerator.Web.Controllers return View("Index"); } - if (passwordFromForm.Count != 1) - { - ViewData["error"] = "No admin password configured!"; - return View("Index"); - } - - string password = passwordFromForm[0]; - if (password == null) { ViewData["error"] = "No password supplied!"; @@ -107,7 +100,7 @@ namespace EnvelopeGenerator.Web.Controllers return Redirect($"/EnvelopeKey/{envelopeReceiverId}/Locked"); } - if (accessCode.Equals(access_code, StringComparison.Ordinal)) + if (accessCode == access_code) { bool actionResult = database.Services.actionService.EnterCorrectAccessCode(response.Envelope, response.Receiver); ViewData["EnvelopeKey"] = envelopeReceiverId; diff --git a/EnvelopeGenerator.Web/EnvelopeGenerator.Web.csproj b/EnvelopeGenerator.Web/EnvelopeGenerator.Web.csproj index 7945b33d..d168af5c 100644 --- a/EnvelopeGenerator.Web/EnvelopeGenerator.Web.csproj +++ b/EnvelopeGenerator.Web/EnvelopeGenerator.Web.csproj @@ -17,6 +17,7 @@ + diff --git a/EnvelopeGenerator.Web/Program.cs b/EnvelopeGenerator.Web/Program.cs index b272d19c..9d9969e6 100644 --- a/EnvelopeGenerator.Web/Program.cs +++ b/EnvelopeGenerator.Web/Program.cs @@ -7,73 +7,78 @@ using EnvelopeGenerator.Infrastructure.Contracts; using EnvelopeGenerator.Infrastructure.Repositories; using EnvelopeGenerator.Web.Services; using Microsoft.EntityFrameworkCore; +using NLog; using Quartz; +using NLog.Web; -namespace EnvelopeGenerator.Web +var logger = LogManager.Setup().LoadConfigurationFromAppSettings().GetCurrentClassLogger(); +logger.Info("Logging initialized!"); +try { - public class Program - { - public static void Main(string[] args) - { - var builder = WebApplication.CreateBuilder(args); + var builder = WebApplication.CreateBuilder(args); - // Add base services - builder.Services.AddSingleton(); - builder.Services.AddScoped(); + builder.Logging.ClearProviders(); + builder.Host.UseNLog(); - // Add higher order services - builder.Services.AddScoped(); + // Add base services + builder.Services.AddScoped(); - // Add services to the container. - builder.Services.AddControllersWithViews().AddJsonOptions(q => - { - // Prevents serialization error when serializing SvgBitmap in EnvelopeReceiver - q.JsonSerializerOptions.ReferenceHandler = System.Text.Json.Serialization.ReferenceHandler.IgnoreCycles; - }); + // Add higher order services + builder.Services.AddScoped(); - builder.Services.AddEndpointsApiExplorer(); - builder.Services.AddSwaggerGen(); + // Add services to the container. + builder.Services.AddControllersWithViews().AddJsonOptions(q => + { + // Prevents serialization error when serializing SvgBitmap in EnvelopeReceiver + q.JsonSerializerOptions.ReferenceHandler = System.Text.Json.Serialization.ReferenceHandler.IgnoreCycles; + }); - builder.Services.AddKeyTranslationService(); + builder.Services.AddEndpointsApiExplorer(); + builder.Services.AddSwaggerGen(); - //AddEF Core dbcontext - var connStr = builder.Configuration["Config:ConnectionString"]; - builder.Services.AddDbContext(options => - options.UseSqlServer(connStr)); + builder.Services.AddKeyTranslationService(); - //Inject CRUD Service and repositories - builder.Services.AddScoped(); - builder.Services.AddScoped(); + //AddEF Core dbcontext + var connStr = builder.Configuration["Config:ConnectionString"]; + builder.Services.AddDbContext(options => + options.UseSqlServer(connStr)); - builder.Services.AddScoped(); - builder.Services.AddScoped(); + //Inject CRUD Service and repositories + builder.Services.AddScoped(); + builder.Services.AddScoped(); - //Auto mapping profiles - builder.Services.AddAutoMapper(typeof(BasicDtoMappingProfile).Assembly); + builder.Services.AddScoped(); + builder.Services.AddScoped(); - var app = builder.Build(); + //Auto mapping profiles + builder.Services.AddAutoMapper(typeof(BasicDtoMappingProfile).Assembly); - // Configure the HTTP request pipeline. - if (!app.Environment.IsDevelopment()) - { - app.UseExceptionHandler("/Home/Error"); - // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. - app.UseHsts(); - } + var app = builder.Build(); - app.UseSwagger(); - app.UseSwaggerUI(); + // Configure the HTTP request pipeline. + if (!app.Environment.IsDevelopment()) + { + app.UseExceptionHandler("/Home/Error"); + // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. + app.UseHsts(); + } - app.UseHttpsRedirection(); - app.UseStaticFiles(); + app.UseSwagger(); + app.UseSwaggerUI(); - app.UseRouting(); + app.UseHttpsRedirection(); + app.UseStaticFiles(); - app.UseAuthorization(); + app.UseRouting(); - app.MapControllers(); + app.UseAuthorization(); - app.Run(); - } - } + app.MapControllers(); + + app.Run(); +} +catch(Exception ex) +{ + logger.Error(ex, "Stopped program because of exception"); + throw; } \ No newline at end of file diff --git a/EnvelopeGenerator.Web/Services/BaseService.cs b/EnvelopeGenerator.Web/Services/BaseService.cs deleted file mode 100644 index 0f4bb450..00000000 --- a/EnvelopeGenerator.Web/Services/BaseService.cs +++ /dev/null @@ -1,18 +0,0 @@ -using DigitalData.Modules.Logging; - -namespace EnvelopeGenerator.Web.Services -{ - public class BaseService - { - internal readonly LogConfig logConfig; - internal readonly IConfiguration config; - internal Logger logger; - - public BaseService(IConfiguration Config, LoggingService Logging) - { - logConfig = Logging.LogConfig; - logger = Logging.LogConfig.GetLogger(); - config = Config; - } - } -} diff --git a/EnvelopeGenerator.Web/Services/DatabaseService.cs b/EnvelopeGenerator.Web/Services/DatabaseService.cs index 2d2e8de2..da97a486 100644 --- a/EnvelopeGenerator.Web/Services/DatabaseService.cs +++ b/EnvelopeGenerator.Web/Services/DatabaseService.cs @@ -1,14 +1,16 @@ using DigitalData.Modules.Database; +using DigitalData.Modules.Logging; using EnvelopeGenerator.Common; namespace EnvelopeGenerator.Web.Services { - public class DatabaseService: BaseService + public class DatabaseService { public MSSQLServer MSSQL { get; set; } - public IConfiguration Config { get; set; } - public State State { get; set; } + ILogger _logger; + + public State? State { get; set; } public class ServiceContainer { @@ -48,62 +50,43 @@ namespace EnvelopeGenerator.Web.Services public readonly ModelContainer? Models; public readonly ServiceContainer? Services; - public DatabaseService(IConfiguration pConfig, LoggingService pLogging) : base(pConfig, pLogging) + public DatabaseService(ILogger logger, IConfiguration config) { - logger = pLogging.LogConfig.GetLogger(); - Config = pConfig; + LogConfig logConfig = new LogConfig(LogConfig.PathType.CustomPath, config["Config:LogPath"], null, "Digital Data", "ECM.EnvelopeGenerator.Web"); + _logger = logger; - logger.Debug("Establishing MSSQL Database connection.."); - MSSQL = new MSSQLServer(logConfig, pConfig["Config:ConnectionString"]); + _logger.LogInformation("Establishing MSSQL Database connection.."); + MSSQL = new MSSQLServer(logConfig, config["Config:ConnectionString"]); if (MSSQL.DBInitialized == true) { - logger.Debug("MSSQL Connection established: [{0}]", MSSQL.MaskedConnectionString); - - var state = GetState(); + _logger.LogInformation("MSSQL Connection established: [{0}]", MSSQL.MaskedConnectionString); - Models = new(state); - Services = new(state); + /// + /// There is a circular dependency between state and models + /// All models need a state object, including the config Model + /// The state object needs to be filled with the DbConfig property, + /// which is obtained by the config Model. + /// So first, the config model is initialized with an incomplete state object, + /// then all the other models with the DbConfig property filled. + /// + State = new State + { + Database = MSSQL, + LogConfig = logConfig, + UserId = 0, + DbConfig = null + }; + var configModel = new ConfigModel(State); + State.DbConfig = configModel.LoadConfiguration(); - State = state; + Models = new(State); + Services = new(State); } else { - logger.Error("Connection could not be established!"); + _logger.LogInformation("Connection could not be established!"); } } - - public string? GetAppSetting(string key) - { - return Config[key]; - } - - /// - /// There is a circular dependency between state and models - /// All models need a state object, including the config Model - /// The state object needs to be filled with the DbConfig property, - /// which is obtained by the config Model. - /// So first, the config model is initialized with an incomplete state object, - /// then all the other models with the DbConfig property filled. - /// - private State GetState() - { - var state = GetInitialState(); - var configModel = new ConfigModel(state); - state.DbConfig = configModel.LoadConfiguration(); - - return state; - } - - private State GetInitialState() - { - return new State - { - Database = MSSQL, - LogConfig = logConfig, - UserId = 0, - DbConfig = null - }; - } } } diff --git a/EnvelopeGenerator.Web/Services/EnvelopeService.cs b/EnvelopeGenerator.Web/Services/EnvelopeService.cs index a27049e6..964221c6 100644 --- a/EnvelopeGenerator.Web/Services/EnvelopeService.cs +++ b/EnvelopeGenerator.Web/Services/EnvelopeService.cs @@ -1,11 +1,10 @@ using EnvelopeGenerator.Application.Contracts; using EnvelopeGenerator.Common; -using Microsoft.Extensions.Primitives; using System.Text; namespace EnvelopeGenerator.Web.Services { - public class EnvelopeService : BaseService + public class EnvelopeService { private readonly ReceiverModel receiverModel; private readonly EnvelopeModel envelopeModel; @@ -13,16 +12,15 @@ namespace EnvelopeGenerator.Web.Services private readonly DocumentStatusModel documentStatusModel; - private IConfigService _configService; + private readonly IConfigService _configService; + private readonly ILogger _logger; - public EnvelopeService(IConfiguration Config, LoggingService Logging, DatabaseService database, IConfigService configService) : base(Config, Logging) + public EnvelopeService(DatabaseService database, IConfigService configService, ILogger logger) { - logger = Logging.LogConfig.GetLogger(); + _logger = logger; - if (database.Models == null) - { + if (database.Models is null) throw new ArgumentNullException("Models not loaded."); - } receiverModel = database.Models.receiverModel; envelopeModel = database.Models.envelopeModel; @@ -34,14 +32,14 @@ namespace EnvelopeGenerator.Web.Services public void EnsureValidEnvelopeKey(string envelopeKey) { - logger.Debug("Parsing EnvelopeKey.."); + _logger.LogInformation("Parsing EnvelopeKey.."); if (string.IsNullOrEmpty(envelopeKey)) throw new ArgumentNullException("EnvelopeKey"); Tuple result = Helpers.DecodeEnvelopeReceiverId(envelopeKey); - logger.Debug("EnvelopeUUID: [{0}]", result.Item1); - logger.Debug("ReceiverSignature: [{0}]", result.Item2); + _logger.LogInformation("EnvelopeUUID: [{0}]", result.Item1); + _logger.LogInformation("ReceiverSignature: [{0}]", result.Item2); if (string.IsNullOrEmpty(result.Item1)) throw new ArgumentNullException("EnvelopeUUID"); @@ -52,43 +50,43 @@ namespace EnvelopeGenerator.Web.Services public async Task LoadEnvelope(string pEnvelopeKey) { - logger.Debug("Loading Envelope by Key [{0}]", pEnvelopeKey); + _logger.LogInformation("Loading Envelope by Key [{0}]", pEnvelopeKey); Tuple result = Helpers.DecodeEnvelopeReceiverId(pEnvelopeKey); var envelopeUuid = result.Item1; var receiverSignature = result.Item2; var receiverId = receiverModel.GetReceiverIdBySignature(receiverSignature); - logger.Debug("Resolved receiver signature to receiverId [{0}]", receiverId); + _logger.LogInformation("Resolved receiver signature to receiverId [{0}]", receiverId); - logger.Debug("Loading envelope.."); + _logger.LogInformation("Loading envelope.."); Envelope? envelope = envelopeModel.GetByUuid(envelopeUuid); if (envelope == null) { - logger.Warn("Envelope not found"); + _logger.LogWarning("Envelope not found"); throw new NullReferenceException("Envelope not found"); } - logger.Debug("Envelope loaded"); + _logger.LogInformation("Envelope loaded"); if (envelope.Receivers == null) { - logger.Warn("Receivers for envelope not loaded"); + _logger.LogWarning("Receivers for envelope not loaded"); throw new NullReferenceException("Receivers for envelope not loaded"); } - logger.Debug("Envelope receivers found: [{0}]", envelope.Receivers.Count); + _logger.LogInformation("Envelope receivers found: [{0}]", envelope.Receivers.Count); EnvelopeReceiver? receiver = envelope.Receivers.Where(r => r.Id == receiverId).SingleOrDefault(); if (receiver == null) { - logger.Warn("Receiver [{0}] not found", receiverId); + _logger.LogWarning("Receiver [{0}] not found", receiverId); throw new NullReferenceException("Receiver not found"); } - logger.Debug("Loading documents for receiver [{0}]", receiver.Email); + _logger.LogInformation("Loading documents for receiver [{0}]", receiver.Email); // filter elements by receiver envelope.Documents = envelope.Documents.Select((document) => @@ -111,7 +109,7 @@ namespace EnvelopeGenerator.Web.Services } else { - logger.Error(configResult.Messages); + _logger.LogError(string.Join(". ", configResult.Messages)); throw new InvalidOperationException(String.Join(". ", configResult.Messages)); } @@ -150,52 +148,28 @@ namespace EnvelopeGenerator.Web.Services { try { - logger.Debug("Parsing annotation data from request.."); + _logger.LogInformation("Parsing annotation data from request.."); using MemoryStream ms = new(); await request.BodyReader.CopyToAsync(ms); var bytes = ms.ToArray(); - logger.Debug("Annotation data parsed, size: [{0}]", bytes.Length); + _logger.LogInformation("Annotation data parsed, size: [{0}]", bytes.Length); return Encoding.UTF8.GetString(bytes); } catch (Exception e) { - logger.Error(e); + _logger.LogError(e, "Inner Service Error"); throw new ArgumentNullException("AnnotationData"); } } - public int EnsureValidDocumentIndex(HttpRequest request) - { - if (!request.Query.TryGetValue("index", out StringValues documentIndexStringList)) - { - logger.Warn("There is no query parameter called index"); - throw new ArgumentNullException("DocumentIndex"); - } - - if (documentIndexStringList.FirstOrDefault() == null) - { - logger.Warn("There is no query parameter called index"); - throw new ArgumentNullException("DocumentIndex"); - } - - if (!int.TryParse(documentIndexStringList.First(), out int documentIndex)) - { - logger.Warn("Invalid document index [{0}]", documentIndexStringList.First()); - throw new ArgumentNullException("DocumentIndex"); - } - - return documentIndex; - } - - public async Task GetDocument(HttpRequest request, string envelopeKey) + public async Task GetDocument(int documentId, string envelopeKey) { EnvelopeResponse response = await LoadEnvelope(envelopeKey); - int documentId = EnsureValidDocumentIndex(request); - logger.Debug("Loading document for Id [{0}]", documentId); + _logger.LogInformation("Loading document for Id [{0}]", documentId); var document = response.Envelope.Documents. Where(d => d.Id == documentId). @@ -203,25 +177,25 @@ namespace EnvelopeGenerator.Web.Services if (document == null) throw new ArgumentException("DocumentId"); - - logger.Debug("Document [{0}] loaded!", documentId); + + _logger.LogInformation("Document [{0}] loaded!", documentId); return document; } public bool InsertDocumentStatus(Common.DocumentStatus documentStatus) { - logger.Debug("Saving annotation data.."); + _logger.LogInformation("Saving annotation data.."); return documentStatusModel.InsertOrUpdate(documentStatus); } public async Task GetDocumentContents(EnvelopeDocument document) { - logger.Debug("Loading file [{0}]", document.Filepath); + _logger.LogInformation("Loading file [{0}]", document.Filepath); var bytes = await File.ReadAllBytesAsync(document.Filepath); - logger.Info("File loaded, size: [{0}]", bytes.Length); + _logger.LogInformation("File loaded, size: [{0}]", bytes.Length); return bytes; } } -} +} \ No newline at end of file diff --git a/EnvelopeGenerator.Web/Services/LoggingService.cs b/EnvelopeGenerator.Web/Services/LoggingService.cs deleted file mode 100644 index 3d03f6cc..00000000 --- a/EnvelopeGenerator.Web/Services/LoggingService.cs +++ /dev/null @@ -1,25 +0,0 @@ -using DigitalData.Modules.Logging; - -namespace EnvelopeGenerator.Web.Services -{ - public class LoggingService - { - public LogConfig LogConfig { get; set; } - - public LoggingService(IConfiguration Config) - { - LogConfig = new LogConfig(LogConfig.PathType.CustomPath, Config["Config:LogPath"], null, "Digital Data", "ECM.EnvelopeGenerator.Web"); - - var logger = LogConfig.GetLogger(); - logger.Info("Logging initialized!"); - - var debugLog = bool.Parse(Config["Config:LogDebug"]); - logger.Info("Setting DEBUG Logging to: [{0}]", debugLog); - LogConfig.Debug = debugLog; - - var jsonLog = bool.Parse(Config["Config:LogJson"]); - logger.Info("Setting JSON Logging to: [{0}]", jsonLog); - LogConfig.Debug = jsonLog; - } - } -} diff --git a/EnvelopeGenerator.Web/Views/Home/ShowEnvelope.cshtml b/EnvelopeGenerator.Web/Views/Home/ShowEnvelope.cshtml index bd90ba66..03ca489a 100644 --- a/EnvelopeGenerator.Web/Views/Home/ShowEnvelope.cshtml +++ b/EnvelopeGenerator.Web/Views/Home/ShowEnvelope.cshtml @@ -1,7 +1,42 @@ @{ ViewData["Title"] = "Dokument unterschreiben"; } - +