forked from MDCPS/DamageAssessment_Backend
		
	doculink changes
This commit is contained in:
		| @ -0,0 +1,230 @@ | ||||
| using DamageAssesment.Api.DocuLinks.Db; | ||||
| using DamageAssesment.Api.DocuLinks.Interfaces; | ||||
| using DamageAssesment.Api.DocuLinks.Models; | ||||
| using DamageAssesment.Api.DocuLinks.Providers; | ||||
| using Microsoft.AspNetCore.Http; | ||||
| using Microsoft.AspNetCore.Mvc; | ||||
|  | ||||
| namespace DamageAssesment.Api.DocuLinks.Controllers | ||||
| { | ||||
|     [ApiController] | ||||
|     public class DoculinkController : ControllerBase | ||||
|     { | ||||
|         private readonly IDoculinkProvider documentsProvider; | ||||
|         private readonly IUploadService uploadService; | ||||
|  | ||||
|         public DoculinkController(IDoculinkProvider documentsProvider,IUploadService uploadService) | ||||
|         { | ||||
|  | ||||
|             this.documentsProvider = documentsProvider; | ||||
|             this.uploadService = uploadService;  | ||||
|  | ||||
|         } | ||||
|         /// <summary> | ||||
|         /// Get all Doculink type. | ||||
|         /// </summary> | ||||
|         [HttpGet] | ||||
|         [Route("doculinks/types")] | ||||
|         [Route("doculinks/types/{language:alpha}")] | ||||
|         public async Task<IActionResult> GetLinkTypesAsync(string? language) | ||||
|         { | ||||
|             var result = await this.documentsProvider.GetLinkTypesAsync(language); | ||||
|             if (result.IsSuccess) | ||||
|             { | ||||
|                 return Ok(result.LinkTypes); | ||||
|             } | ||||
|             return NoContent(); | ||||
|         } | ||||
|         /// <summary> | ||||
|         /// Get a Doculink type by id. | ||||
|         /// </summary> | ||||
|         [HttpGet] | ||||
|         [Route("doculinks/types/{id}")] | ||||
|         [Route("doculinks/types/{id}/{language:alpha}")] | ||||
|         public async Task<IActionResult> GetLinkTypeAsync(int id,string? language) | ||||
|         { | ||||
|             var result = await this.documentsProvider.GetLinkTypeAsync(id, language); | ||||
|             if (result.IsSuccess) | ||||
|             { | ||||
|                 return Ok(result.LinkType); | ||||
|             } | ||||
|             return NotFound(); | ||||
|         } | ||||
|         /// <summary> | ||||
|         /// Update a existing Doculink type. | ||||
|         /// </summary> | ||||
|         [HttpPut] | ||||
|         [Route("doculinks/types/{id}")] | ||||
|         public async Task<IActionResult> UpdateLinkType(int id,Models.LinkType linkType) | ||||
|         { | ||||
|             if (linkType != null) | ||||
|             { | ||||
|                 var result = await this.documentsProvider.UpdateLinkTypeAsync(id,linkType); | ||||
|                 if (result.IsSuccess) | ||||
|                 { | ||||
|                     return Ok(result.LinkType); | ||||
|                 } | ||||
|                 if (result.ErrorMessage == "Not Found") | ||||
|                     return NotFound(result.ErrorMessage); | ||||
|  | ||||
|                 return BadRequest(result.ErrorMessage); | ||||
|             } | ||||
|             return CreatedAtRoute("DefaultApi", new { id = linkType.Id }, linkType); | ||||
|         } | ||||
|         /// <summary> | ||||
|         /// Create a new Doculink type. | ||||
|         /// </summary> | ||||
|         [HttpPost] | ||||
|         [Route("doculinks/types")] | ||||
|         public async Task<IActionResult> CreateLinkType(Models.LinkType linkType) | ||||
|         { | ||||
|             if (linkType != null) | ||||
|             { | ||||
|                 var result = await this.documentsProvider.PostLinkTypeAsync(linkType); | ||||
|                 if (result.IsSuccess) | ||||
|                 { | ||||
|                     return Ok(result.LinkType); | ||||
|                 } | ||||
|                 return BadRequest(result.ErrorMessage); | ||||
|             } | ||||
|             return CreatedAtRoute("DefaultApi", new { id = linkType.Id }, linkType); | ||||
|         } | ||||
|         /// <summary> | ||||
|         /// Delete a  existing Doculink type by id. | ||||
|         /// </summary> | ||||
|         [HttpDelete] | ||||
|         [Route("doculinks/types/{id}")] | ||||
|         public async Task<IActionResult> DeleteLinkType(int id) | ||||
|         { | ||||
|             var result = await this.documentsProvider.DeleteLinkTypeAsync(id); | ||||
|             if (result.IsSuccess) | ||||
|             { | ||||
|                 return Ok(result.LinkType); | ||||
|             } | ||||
|             return NotFound(); | ||||
|         } | ||||
|         /// <summary> | ||||
|         /// Get all Doculink. | ||||
|         /// </summary> | ||||
|         ///  | ||||
|         [Route("doculinks")] | ||||
|         [Route("doculinks/{linktype:alpha}")] | ||||
|         [Route("doculinks/{linktype:alpha}/{language:alpha}")] | ||||
|         [HttpGet] | ||||
|         public async Task<IActionResult> GetDocumentsAsync(string? linktype, string? language,bool? isactive) | ||||
|         { | ||||
|             var result = await this.documentsProvider.GetdocumentsByLinkAsync(linktype, language, isactive); | ||||
|             if (result.IsSuccess) | ||||
|             { | ||||
|                 return Ok(result.documents); | ||||
|             } | ||||
|             return NoContent(); | ||||
|         } | ||||
|         /// <summary> | ||||
|         /// Get all active Doculink. | ||||
|         /// </summary> | ||||
|         [Route("doculinks/active")] | ||||
|         [Route("doculinks/active/{linktype:alpha}")] | ||||
|         [Route("doculinks/active/{linktype:alpha}/{language:alpha}")] | ||||
|         [HttpGet] | ||||
|         public async Task<IActionResult> GetDocumentsByActiveAsync(string? linktype, string? language) | ||||
|         { | ||||
|             var result = await this.documentsProvider.GetdocumentsByLinkAsync(linktype, language,true); | ||||
|             if (result.IsSuccess) | ||||
|             { | ||||
|                 return Ok(result.documents); | ||||
|             } | ||||
|             return NoContent(); | ||||
|         } | ||||
|  | ||||
|         /// <summary> | ||||
|         /// Get a Doculink by id. | ||||
|         /// </summary> | ||||
|         [HttpGet] | ||||
|         [Route("doculinks/{id}")] | ||||
|         [Route("doculinks/{id}/{linktype:alpha}")] | ||||
|         [Route("doculinks/{id}/{linktype:alpha}/{language:alpha}")] | ||||
|         public async Task<IActionResult> GetDocumentAsync(int id,string? linktype, string? language) | ||||
|         { | ||||
|             var result = await this.documentsProvider.GetDocumentAsync(id, linktype, language); | ||||
|             if (result.IsSuccess) | ||||
|             { | ||||
|                 return Ok(result.Document); | ||||
|             } | ||||
|             return NotFound(); | ||||
|         } | ||||
|         /// <summary> | ||||
|         /// update existing doclink. | ||||
|         /// </summary> | ||||
|         [HttpPut] | ||||
|         [Route("doculinks/{id}")] | ||||
|         public async Task<IActionResult> UpdateDocument(int id,ReqDoculink documentInfo) | ||||
|         { | ||||
|             if (documentInfo != null) | ||||
|             { | ||||
|                 var dbdoc = await this.documentsProvider.GetDocumentByidAsync(id); | ||||
|                 if (dbdoc.IsSuccess) | ||||
|                 { | ||||
|                     var documents = await this.documentsProvider.GetDocumentCounter(); | ||||
|                     Models.Doculink DocuLink= uploadService.UpdateDocuments(documents.counter,dbdoc.Document, documentInfo); | ||||
|                     var result = await this.documentsProvider.UpdateDocumentAsync(id, DocuLink); | ||||
|                     if (result.IsSuccess) | ||||
|                     { | ||||
|                         return Ok(result.Document); | ||||
|                     } | ||||
|                     return NoContent(); | ||||
|                 } | ||||
|                 return NotFound(); | ||||
|             } | ||||
|             return BadRequest(documentInfo); | ||||
|         } | ||||
|         /// <summary> | ||||
|         /// Create new doclink. | ||||
|         /// </summary> | ||||
|         [HttpPost] | ||||
|         [Route("doculinks")] | ||||
|         public async Task<IActionResult> CreateDocument(ReqDoculink documentInfo) | ||||
|         { | ||||
|             try | ||||
|             { | ||||
|                 if (documentInfo != null) | ||||
|                 { | ||||
|                     var documents = await this.documentsProvider.GetDocumentCounter(); | ||||
|                     Models.Doculink DocuLink= uploadService.UploadDocument(documents.counter, documentInfo); | ||||
|                     var result = await this.documentsProvider.PostDocumentAsync(DocuLink); | ||||
|                     if (result.IsSuccess) | ||||
|                     { | ||||
|                         return Ok(result.Document); | ||||
|                     } | ||||
|                     return NoContent(); | ||||
|                 } | ||||
|                 return BadRequest(documentInfo); | ||||
|             } | ||||
|             catch (Exception ex) | ||||
|             { | ||||
|                 return BadRequest($"Internal server error: {ex}"); | ||||
|             } | ||||
|         } | ||||
|         /// <summary> | ||||
|         /// Delete Doculink by id. | ||||
|         /// </summary> | ||||
|         [HttpDelete] | ||||
|         [Route("doculinks/{id}")] | ||||
|         public async Task<IActionResult> DeleteDocument(int id) | ||||
|         { | ||||
|             // database soft delete | ||||
|             var result = await this.documentsProvider.DeleteDocumentAsync(id); | ||||
|             if (result.IsSuccess) | ||||
|             { | ||||
|                 // deleting file from folder | ||||
|                 foreach (var item in result.Document.doclinksAttachments) | ||||
|                 { | ||||
|                     uploadService.Movefile(item.Path); | ||||
|                 } | ||||
|                 return Ok(result.Document); | ||||
|             } | ||||
|             return NotFound(); | ||||
|         } | ||||
|          | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,28 @@ | ||||
| <Project Sdk="Microsoft.NET.Sdk.Web"> | ||||
|  | ||||
|   <PropertyGroup> | ||||
|     <TargetFramework>net6.0</TargetFramework> | ||||
|     <Nullable>enable</Nullable> | ||||
|     <ImplicitUsings>enable</ImplicitUsings> | ||||
|     <GenerateDocumentationFile>True</GenerateDocumentationFile> | ||||
|   </PropertyGroup> | ||||
|  | ||||
|   <ItemGroup> | ||||
|     <PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="12.0.1" /> | ||||
|     <PackageReference Include="Azure.Storage.Blobs" Version="12.16.0" /> | ||||
|     <PackageReference Include="Microsoft.AspNetCore.Hosting" Version="2.2.7" /> | ||||
|     <PackageReference Include="Microsoft.EntityFrameworkCore" Version="7.0.9" /> | ||||
|     <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="7.0.9"> | ||||
|       <PrivateAssets>all</PrivateAssets> | ||||
|       <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> | ||||
|     </PackageReference> | ||||
|     <PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="7.0.5" /> | ||||
|     <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="7.0.9" /> | ||||
|     <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="7.0.9"> | ||||
|       <PrivateAssets>all</PrivateAssets> | ||||
|       <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> | ||||
|     </PackageReference> | ||||
|     <PackageReference Include="Swashbuckle.AspNetCore" Version="6.2.3" /> | ||||
|   </ItemGroup> | ||||
|  | ||||
| </Project> | ||||
| @ -0,0 +1,21 @@ | ||||
| using System.ComponentModel.DataAnnotations; | ||||
| using System.ComponentModel.DataAnnotations.Schema; | ||||
|  | ||||
| namespace DamageAssesment.Api.DocuLinks.Db | ||||
| { | ||||
|     public class Doculink | ||||
|     { | ||||
|         [Key] | ||||
|         public int Id { get; set; } | ||||
|         [ForeignKey("LinkType")] | ||||
|         public int linkTypeId { get; set; } | ||||
|         public bool IsActive { get; set; } | ||||
|         public bool IsDeleted { get; set; } | ||||
|         public int CustomOrder { get; set; } | ||||
|         //public bool IsAttachments { get; set; } | ||||
|         //public bool IsUrl { get; set; } | ||||
|         public DateTime dateCreated { get; set; } | ||||
|         public DateTime dateUpdated { get; set; } | ||||
|  | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,18 @@ | ||||
| using System.ComponentModel.DataAnnotations.Schema; | ||||
| using System.ComponentModel.DataAnnotations; | ||||
|  | ||||
| namespace DamageAssesment.Api.DocuLinks.Db | ||||
| { | ||||
|     public class DoculinkAttachments | ||||
|     { | ||||
|  | ||||
|         [Key] | ||||
|         public int Id { get; set; } | ||||
|         [ForeignKey("Document")] | ||||
|         public int DocumentId { get; set; } | ||||
|         public string docName { get; set; } | ||||
|         public string Path { get; set; } | ||||
|         public bool IsAttachments { get; set; } | ||||
|         public int CustomOrder { get; set; } | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,38 @@ | ||||
| using Microsoft.AspNetCore.Identity; | ||||
| using Microsoft.EntityFrameworkCore; | ||||
| using Microsoft.Extensions.Configuration; | ||||
| using System.ComponentModel.DataAnnotations; | ||||
|  | ||||
| namespace DamageAssesment.Api.DocuLinks.Db | ||||
| { | ||||
|     public class DoculinkDbContext : DbContext | ||||
|     { | ||||
|         public DoculinkDbContext(DbContextOptions options) : base(options) | ||||
|         { | ||||
|         } | ||||
|         public DbSet<Db.Doculink> Documents { get; set; } | ||||
|         public DbSet<Db.LinkType> LinkTypes { get; set; } | ||||
|         public DbSet<Db.DoculinkTranslation> DocumentsTranslations { get; set; } | ||||
|         public DbSet<Db.LinksTranslation> LinksTranslations { get; set; } | ||||
|         public DbSet<Db.DoculinkAttachments> DoclinksAttachments { get; set; } | ||||
|         protected override void OnModelCreating(ModelBuilder modelBuilder) | ||||
|         { | ||||
|             base.OnModelCreating(modelBuilder); | ||||
|             modelBuilder.Entity<Doculink>() | ||||
|                 .Property(item => item.Id) | ||||
|                 .ValueGeneratedOnAdd(); | ||||
|             modelBuilder.Entity<LinkType>() | ||||
|                 .Property(item => item.Id) | ||||
|                 .ValueGeneratedOnAdd(); | ||||
|             modelBuilder.Entity<DoculinkTranslation>() | ||||
|                 .Property(item => item.Id) | ||||
|                 .ValueGeneratedOnAdd(); | ||||
|             modelBuilder.Entity<LinksTranslation>() | ||||
|                 .Property(item => item.Id) | ||||
|                 .ValueGeneratedOnAdd(); | ||||
|             modelBuilder.Entity<DoculinkAttachments>() | ||||
|                 .Property(item => item.Id) | ||||
|                 .ValueGeneratedOnAdd(); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,16 @@ | ||||
| using System.ComponentModel.DataAnnotations; | ||||
| using System.ComponentModel.DataAnnotations.Schema; | ||||
|  | ||||
| namespace DamageAssesment.Api.DocuLinks.Db | ||||
| { | ||||
|     public class DoculinkTranslation | ||||
|     { | ||||
|         [Key] | ||||
|         public int Id { get; set; } | ||||
|         [ForeignKey("Document")] | ||||
|         public int DocumentId { get; set; } | ||||
|         public string title { get; set; } | ||||
|         public string description { get; set; } | ||||
|         public string Language { get; set; } | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,12 @@ | ||||
| using System.ComponentModel.DataAnnotations; | ||||
|  | ||||
| namespace DamageAssesment.Api.DocuLinks.Db | ||||
| { | ||||
|     public class LinkType | ||||
|     { | ||||
|         [Key] | ||||
|         public int Id { get; set; } | ||||
|         public bool IsActive { get; set; } | ||||
|         public int CustomOrder { get; set; } | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,15 @@ | ||||
| using System.ComponentModel.DataAnnotations.Schema; | ||||
| using System.ComponentModel.DataAnnotations; | ||||
|  | ||||
| namespace DamageAssesment.Api.DocuLinks.Db | ||||
| { | ||||
|     public class LinksTranslation | ||||
|     { | ||||
|         [Key] | ||||
|         public int Id { get; set; } | ||||
|         [ForeignKey("LinkType")] | ||||
|         public int LinkTypeId { get; set; } | ||||
|         public string TypeText { get; set; } | ||||
|         public string Language { get; set; } | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,10 @@ | ||||
| using Azure.Storage.Blobs.Models; | ||||
|  | ||||
| namespace DamageAssesment.Api.DocuLinks.Interfaces | ||||
| { | ||||
|     public interface IAzureBlobService | ||||
|     { | ||||
|         Task<List<Azure.Response<BlobContentInfo>>> UploadFiles(List<IFormFile> files); | ||||
|         void DeleteFile(string path); | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,18 @@ | ||||
| using DamageAssesment.Api.DocuLinks.Models; | ||||
|  | ||||
| namespace DamageAssesment.Api.DocuLinks.Interfaces | ||||
| { | ||||
|     public interface IDoculinkProvider : ILinkTypesProvider | ||||
|     { | ||||
|         Task<(bool IsSuccess, Models.ResDoculink Document, string ErrorMessage)> GetDocumentAsync(int id, string? linktype, string? language); | ||||
|         Task<(bool IsSuccess, Models.Doculink Document, string ErrorMessage)> GetDocumentByidAsync(int id); | ||||
|        // Task<(bool IsSuccess, IEnumerable<Models.ResDoculink> documents, string ErrorMessage)> GetDocumnetsAsync(string? language); | ||||
|         Task<(bool IsSuccess, IEnumerable<Models.ResDoculink> documents, string ErrorMessage)> GetdocumentsByLinkAsync(string? linkType, string? language, bool? isactive); | ||||
|         Task<(bool IsSuccess, Models.ResDoculink Document, string ErrorMessage)> PostDocumentAsync(Models.Doculink Document); | ||||
|         Task<(bool IsSuccess, Models.ResDoculink Document, string ErrorMessage)> UpdateDocumentAsync(int id,Models.Doculink Document); | ||||
|         Task<(bool IsSuccess, Models.ResDoculink Document, string ErrorMessage)> DeleteDocumentAsync(int id); | ||||
|         Task<(bool IsSuccess, int counter, string message)> GetDocumentCounter(); | ||||
|  | ||||
|  | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,11 @@ | ||||
| namespace DamageAssesment.Api.DocuLinks.Interfaces | ||||
| { | ||||
|     public interface ILinkTypesProvider | ||||
|     { | ||||
|         Task<(bool IsSuccess, Models.ResLinkType LinkType, string ErrorMessage)> GetLinkTypeAsync(int id,string? language); | ||||
|         Task<(bool IsSuccess, IEnumerable<Models.ResLinkType> LinkTypes, string ErrorMessage)> GetLinkTypesAsync(string? language); | ||||
|         Task<(bool IsSuccess, Models.ResLinkType LinkType, string ErrorMessage)> PostLinkTypeAsync(Models.LinkType LinkType); | ||||
|         Task<(bool IsSuccess, Models.ResLinkType LinkType, string ErrorMessage)> UpdateLinkTypeAsync(int id,Models.LinkType LinkType); | ||||
|         Task<(bool IsSuccess, Models.ResLinkType LinkType, string ErrorMessage)> DeleteLinkTypeAsync(int id); | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,12 @@ | ||||
| using DamageAssesment.Api.DocuLinks.Models; | ||||
|  | ||||
| namespace DamageAssesment.Api.DocuLinks.Interfaces | ||||
| { | ||||
|     public interface IUploadService | ||||
|     { | ||||
|         Models.Doculink UploadDocument( int counter, ReqDoculink documentInfo); | ||||
|         public Models.Doculink UpdateDocuments(int counter, Models.Doculink document, ReqDoculink documentInfo); | ||||
|         void Deletefile(string path); | ||||
|         void Movefile(string path); | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,95 @@ | ||||
| // <auto-generated /> | ||||
| using System; | ||||
| using DamageAssesment.Api.DocuLinks.Db; | ||||
| using Microsoft.EntityFrameworkCore; | ||||
| using Microsoft.EntityFrameworkCore.Infrastructure; | ||||
| using Microsoft.EntityFrameworkCore.Metadata; | ||||
| using Microsoft.EntityFrameworkCore.Migrations; | ||||
| using Microsoft.EntityFrameworkCore.Storage.ValueConversion; | ||||
|  | ||||
| #nullable disable | ||||
|  | ||||
| namespace DamageAssesment.Api.DocuLinks.Migrations | ||||
| { | ||||
|     [DbContext(typeof(DoculinkDbContext))] | ||||
|     [Migration("20230828165655_InitialDocumentCreate")] | ||||
|     partial class InitialDocumentCreate | ||||
|     { | ||||
|         /// <inheritdoc /> | ||||
|         protected override void BuildTargetModel(ModelBuilder modelBuilder) | ||||
|         { | ||||
| #pragma warning disable 612, 618 | ||||
|             modelBuilder | ||||
|                 .HasAnnotation("ProductVersion", "7.0.9") | ||||
|                 .HasAnnotation("Relational:MaxIdentifierLength", 128); | ||||
|  | ||||
|             SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); | ||||
|  | ||||
|             modelBuilder.Entity("DamageAssesment.Api.DocuLinks.Db.Document", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("int"); | ||||
|  | ||||
|                     SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id")); | ||||
|  | ||||
|                     b.Property<bool>("IsActive") | ||||
|                         .HasColumnType("bit"); | ||||
|  | ||||
|                     b.Property<string>("Path") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("nvarchar(max)"); | ||||
|  | ||||
|                     b.Property<DateTime>("dateCreated") | ||||
|                         .HasColumnType("datetime2"); | ||||
|  | ||||
|                     b.Property<DateTime>("dateUpdated") | ||||
|                         .HasColumnType("datetime2"); | ||||
|  | ||||
|                     b.Property<string>("description") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("nvarchar(max)"); | ||||
|  | ||||
|                     b.Property<string>("docName") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("nvarchar(max)"); | ||||
|  | ||||
|                     b.Property<int>("linkTypeId") | ||||
|                         .HasColumnType("int"); | ||||
|  | ||||
|                     b.Property<string>("title") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("nvarchar(max)"); | ||||
|  | ||||
|                     b.Property<string>("url") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("nvarchar(max)"); | ||||
|  | ||||
|                     b.HasKey("Id"); | ||||
|  | ||||
|                     b.ToTable("Documents"); | ||||
|                 }); | ||||
|  | ||||
|             modelBuilder.Entity("DamageAssesment.Api.DocuLinks.Db.LinkType", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("int"); | ||||
|  | ||||
|                     SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id")); | ||||
|  | ||||
|                     b.Property<bool>("IsActive") | ||||
|                         .HasColumnType("bit"); | ||||
|  | ||||
|                     b.Property<string>("TypeText") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("nvarchar(max)"); | ||||
|  | ||||
|                     b.HasKey("Id"); | ||||
|  | ||||
|                     b.ToTable("LinkTypes"); | ||||
|                 }); | ||||
| #pragma warning restore 612, 618 | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,60 @@ | ||||
| using System; | ||||
| using Microsoft.EntityFrameworkCore.Migrations; | ||||
|  | ||||
| #nullable disable | ||||
|  | ||||
| namespace DamageAssesment.Api.DocuLinks.Migrations | ||||
| { | ||||
|     /// <inheritdoc /> | ||||
|     public partial class InitialDocumentCreate : Migration | ||||
|     { | ||||
|         /// <inheritdoc /> | ||||
|         protected override void Up(MigrationBuilder migrationBuilder) | ||||
|         { | ||||
|             migrationBuilder.CreateTable( | ||||
|                 name: "Documents", | ||||
|                 columns: table => new | ||||
|                 { | ||||
|                     Id = table.Column<int>(type: "int", nullable: false) | ||||
|                         .Annotation("SqlServer:Identity", "1, 1"), | ||||
|                     title = table.Column<string>(type: "nvarchar(max)", nullable: false), | ||||
|                     linkTypeId = table.Column<int>(type: "int", nullable: false), | ||||
|                     description = table.Column<string>(type: "nvarchar(max)", nullable: false), | ||||
|                     docName = table.Column<string>(type: "nvarchar(max)", nullable: false), | ||||
|                     url = table.Column<string>(type: "nvarchar(max)", nullable: false), | ||||
|                     Path = table.Column<string>(type: "nvarchar(max)", nullable: false), | ||||
|                     IsActive = table.Column<bool>(type: "bit", nullable: false), | ||||
|                     dateCreated = table.Column<DateTime>(type: "datetime2", nullable: false), | ||||
|                     dateUpdated = table.Column<DateTime>(type: "datetime2", nullable: false) | ||||
|                 }, | ||||
|                 constraints: table => | ||||
|                 { | ||||
|                     table.PrimaryKey("PK_Documents", x => x.Id); | ||||
|                 }); | ||||
|  | ||||
|             migrationBuilder.CreateTable( | ||||
|                 name: "LinkTypes", | ||||
|                 columns: table => new | ||||
|                 { | ||||
|                     Id = table.Column<int>(type: "int", nullable: false) | ||||
|                         .Annotation("SqlServer:Identity", "1, 1"), | ||||
|                     TypeText = table.Column<string>(type: "nvarchar(max)", nullable: false), | ||||
|                     IsActive = table.Column<bool>(type: "bit", nullable: false) | ||||
|                 }, | ||||
|                 constraints: table => | ||||
|                 { | ||||
|                     table.PrimaryKey("PK_LinkTypes", x => x.Id); | ||||
|                 }); | ||||
|         } | ||||
|  | ||||
|         /// <inheritdoc /> | ||||
|         protected override void Down(MigrationBuilder migrationBuilder) | ||||
|         { | ||||
|             migrationBuilder.DropTable( | ||||
|                 name: "Documents"); | ||||
|  | ||||
|             migrationBuilder.DropTable( | ||||
|                 name: "LinkTypes"); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,118 @@ | ||||
| // <auto-generated /> | ||||
| using System; | ||||
| using DamageAssesment.Api.DocuLinks.Db; | ||||
| using Microsoft.EntityFrameworkCore; | ||||
| using Microsoft.EntityFrameworkCore.Infrastructure; | ||||
| using Microsoft.EntityFrameworkCore.Metadata; | ||||
| using Microsoft.EntityFrameworkCore.Migrations; | ||||
| using Microsoft.EntityFrameworkCore.Storage.ValueConversion; | ||||
|  | ||||
| #nullable disable | ||||
|  | ||||
| namespace DamageAssesment.Api.DocuLinks.Migrations | ||||
| { | ||||
|     [DbContext(typeof(DoculinkDbContext))] | ||||
|     [Migration("20230830200432_DocumentTranslation")] | ||||
|     partial class DocumentTranslation | ||||
|     { | ||||
|         /// <inheritdoc /> | ||||
|         protected override void BuildTargetModel(ModelBuilder modelBuilder) | ||||
|         { | ||||
| #pragma warning disable 612, 618 | ||||
|             modelBuilder | ||||
|                 .HasAnnotation("ProductVersion", "7.0.9") | ||||
|                 .HasAnnotation("Relational:MaxIdentifierLength", 128); | ||||
|  | ||||
|             SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); | ||||
|  | ||||
|             modelBuilder.Entity("DamageAssesment.Api.DocuLinks.Db.Document", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("int"); | ||||
|  | ||||
|                     SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id")); | ||||
|  | ||||
|                     b.Property<bool>("IsActive") | ||||
|                         .HasColumnType("bit"); | ||||
|  | ||||
|                     b.Property<string>("Path") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("nvarchar(max)"); | ||||
|  | ||||
|                     b.Property<DateTime>("dateCreated") | ||||
|                         .HasColumnType("datetime2"); | ||||
|  | ||||
|                     b.Property<DateTime>("dateUpdated") | ||||
|                         .HasColumnType("datetime2"); | ||||
|  | ||||
|                     b.Property<string>("docName") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("nvarchar(max)"); | ||||
|  | ||||
|                     b.Property<int>("linkTypeId") | ||||
|                         .HasColumnType("int"); | ||||
|  | ||||
|                     b.Property<string>("url") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("nvarchar(max)"); | ||||
|  | ||||
|                     b.HasKey("Id"); | ||||
|  | ||||
|                     b.ToTable("Documents"); | ||||
|                 }); | ||||
|  | ||||
|             modelBuilder.Entity("DamageAssesment.Api.DocuLinks.Db.DocumentsTranslation", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("int"); | ||||
|  | ||||
|                     SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id")); | ||||
|  | ||||
|                     b.Property<int>("DocumentId") | ||||
|                         .HasColumnType("int"); | ||||
|  | ||||
|                     b.Property<string>("Language") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("nvarchar(max)"); | ||||
|  | ||||
|                     b.Property<string>("description") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("nvarchar(max)"); | ||||
|  | ||||
|                     b.Property<string>("title") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("nvarchar(max)"); | ||||
|  | ||||
|                     b.HasKey("Id"); | ||||
|  | ||||
|                     b.ToTable("DocumentsTranslations"); | ||||
|                 }); | ||||
|  | ||||
|             modelBuilder.Entity("DamageAssesment.Api.DocuLinks.Db.LinkType", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("int"); | ||||
|  | ||||
|                     SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id")); | ||||
|  | ||||
|                     b.Property<bool>("IsActive") | ||||
|                         .HasColumnType("bit"); | ||||
|  | ||||
|                     b.Property<bool>("IsAttachment") | ||||
|                         .HasColumnType("bit"); | ||||
|  | ||||
|                     b.Property<string>("TypeText") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("nvarchar(max)"); | ||||
|  | ||||
|                     b.HasKey("Id"); | ||||
|  | ||||
|                     b.ToTable("LinkTypes"); | ||||
|                 }); | ||||
| #pragma warning restore 612, 618 | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,70 @@ | ||||
| using Microsoft.EntityFrameworkCore.Migrations; | ||||
|  | ||||
| #nullable disable | ||||
|  | ||||
| namespace DamageAssesment.Api.DocuLinks.Migrations | ||||
| { | ||||
|     /// <inheritdoc /> | ||||
|     public partial class DocumentTranslation : Migration | ||||
|     { | ||||
|         /// <inheritdoc /> | ||||
|         protected override void Up(MigrationBuilder migrationBuilder) | ||||
|         { | ||||
|             migrationBuilder.DropColumn( | ||||
|                 name: "description", | ||||
|                 table: "Documents"); | ||||
|  | ||||
|             migrationBuilder.DropColumn( | ||||
|                 name: "title", | ||||
|                 table: "Documents"); | ||||
|  | ||||
|             migrationBuilder.AddColumn<bool>( | ||||
|                 name: "IsAttachment", | ||||
|                 table: "LinkTypes", | ||||
|                 type: "bit", | ||||
|                 nullable: false, | ||||
|                 defaultValue: false); | ||||
|  | ||||
|             migrationBuilder.CreateTable( | ||||
|                 name: "DocumentsTranslations", | ||||
|                 columns: table => new | ||||
|                 { | ||||
|                     Id = table.Column<int>(type: "int", nullable: false) | ||||
|                         .Annotation("SqlServer:Identity", "1, 1"), | ||||
|                     DocumentId = table.Column<int>(type: "int", nullable: false), | ||||
|                     title = table.Column<string>(type: "nvarchar(max)", nullable: false), | ||||
|                     description = table.Column<string>(type: "nvarchar(max)", nullable: false), | ||||
|                     Language = table.Column<string>(type: "nvarchar(max)", nullable: false) | ||||
|                 }, | ||||
|                 constraints: table => | ||||
|                 { | ||||
|                     table.PrimaryKey("PK_DocumentsTranslations", x => x.Id); | ||||
|                 }); | ||||
|         } | ||||
|  | ||||
|         /// <inheritdoc /> | ||||
|         protected override void Down(MigrationBuilder migrationBuilder) | ||||
|         { | ||||
|             migrationBuilder.DropTable( | ||||
|                 name: "DocumentsTranslations"); | ||||
|  | ||||
|             migrationBuilder.DropColumn( | ||||
|                 name: "IsAttachment", | ||||
|                 table: "LinkTypes"); | ||||
|  | ||||
|             migrationBuilder.AddColumn<string>( | ||||
|                 name: "description", | ||||
|                 table: "Documents", | ||||
|                 type: "nvarchar(max)", | ||||
|                 nullable: false, | ||||
|                 defaultValue: ""); | ||||
|  | ||||
|             migrationBuilder.AddColumn<string>( | ||||
|                 name: "title", | ||||
|                 table: "Documents", | ||||
|                 type: "nvarchar(max)", | ||||
|                 nullable: false, | ||||
|                 defaultValue: ""); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,115 @@ | ||||
| // <auto-generated /> | ||||
| using System; | ||||
| using DamageAssesment.Api.DocuLinks.Db; | ||||
| using Microsoft.EntityFrameworkCore; | ||||
| using Microsoft.EntityFrameworkCore.Infrastructure; | ||||
| using Microsoft.EntityFrameworkCore.Metadata; | ||||
| using Microsoft.EntityFrameworkCore.Storage.ValueConversion; | ||||
|  | ||||
| #nullable disable | ||||
|  | ||||
| namespace DamageAssesment.Api.DocuLinks.Migrations | ||||
| { | ||||
|     [DbContext(typeof(DoculinkDbContext))] | ||||
|     partial class DocumentDbContextModelSnapshot : ModelSnapshot | ||||
|     { | ||||
|         protected override void BuildModel(ModelBuilder modelBuilder) | ||||
|         { | ||||
| #pragma warning disable 612, 618 | ||||
|             modelBuilder | ||||
|                 .HasAnnotation("ProductVersion", "7.0.9") | ||||
|                 .HasAnnotation("Relational:MaxIdentifierLength", 128); | ||||
|  | ||||
|             SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); | ||||
|  | ||||
|             modelBuilder.Entity("DamageAssesment.Api.DocuLinks.Db.Document", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("int"); | ||||
|  | ||||
|                     SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id")); | ||||
|  | ||||
|                     b.Property<bool>("IsActive") | ||||
|                         .HasColumnType("bit"); | ||||
|  | ||||
|                     b.Property<string>("Path") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("nvarchar(max)"); | ||||
|  | ||||
|                     b.Property<DateTime>("dateCreated") | ||||
|                         .HasColumnType("datetime2"); | ||||
|  | ||||
|                     b.Property<DateTime>("dateUpdated") | ||||
|                         .HasColumnType("datetime2"); | ||||
|  | ||||
|                     b.Property<string>("docName") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("nvarchar(max)"); | ||||
|  | ||||
|                     b.Property<int>("linkTypeId") | ||||
|                         .HasColumnType("int"); | ||||
|  | ||||
|                     b.Property<string>("url") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("nvarchar(max)"); | ||||
|  | ||||
|                     b.HasKey("Id"); | ||||
|  | ||||
|                     b.ToTable("Documents"); | ||||
|                 }); | ||||
|  | ||||
|             modelBuilder.Entity("DamageAssesment.Api.DocuLinks.Db.DocumentsTranslation", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("int"); | ||||
|  | ||||
|                     SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id")); | ||||
|  | ||||
|                     b.Property<int>("DocumentId") | ||||
|                         .HasColumnType("int"); | ||||
|  | ||||
|                     b.Property<string>("Language") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("nvarchar(max)"); | ||||
|  | ||||
|                     b.Property<string>("description") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("nvarchar(max)"); | ||||
|  | ||||
|                     b.Property<string>("title") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("nvarchar(max)"); | ||||
|  | ||||
|                     b.HasKey("Id"); | ||||
|  | ||||
|                     b.ToTable("DocumentsTranslations"); | ||||
|                 }); | ||||
|  | ||||
|             modelBuilder.Entity("DamageAssesment.Api.DocuLinks.Db.LinkType", b => | ||||
|                 { | ||||
|                     b.Property<int>("Id") | ||||
|                         .ValueGeneratedOnAdd() | ||||
|                         .HasColumnType("int"); | ||||
|  | ||||
|                     SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id")); | ||||
|  | ||||
|                     b.Property<bool>("IsActive") | ||||
|                         .HasColumnType("bit"); | ||||
|  | ||||
|                     b.Property<bool>("IsAttachment") | ||||
|                         .HasColumnType("bit"); | ||||
|  | ||||
|                     b.Property<string>("TypeText") | ||||
|                         .IsRequired() | ||||
|                         .HasColumnType("nvarchar(max)"); | ||||
|  | ||||
|                     b.HasKey("Id"); | ||||
|  | ||||
|                     b.ToTable("LinkTypes"); | ||||
|                 }); | ||||
| #pragma warning restore 612, 618 | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,25 @@ | ||||
| using DamageAssesment.Api.DocuLinks.Models; | ||||
| using System.ComponentModel.DataAnnotations; | ||||
|  | ||||
| namespace DamageAssesment.Api.DocuLinks.Models | ||||
| { | ||||
|     public class Doculink : BaseDoculink | ||||
|     { | ||||
|         public List<DoculinkTranslation> documentsTranslations { get; set; } | ||||
|     } | ||||
|     public class ResDoculink:BaseDoculink | ||||
|     { | ||||
|         public object titles { get; set; } | ||||
|         public object description { get; set; } | ||||
|         public object linktypes { get; set; } | ||||
|     } | ||||
|     public class BaseDoculink | ||||
|     { | ||||
|         public int Id { get; set; } | ||||
|         public int linkTypeId { get; set; } | ||||
|         public bool IsActive { get; set; } | ||||
|         public bool IsDeleted { get; set; } | ||||
|         public List<DoculinkAttachments> doclinksAttachments { get; set; } | ||||
|         public int CustomOrder { get; set; } | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,13 @@ | ||||
| using System.ComponentModel.DataAnnotations.Schema; | ||||
| using System.ComponentModel.DataAnnotations; | ||||
|  | ||||
| namespace DamageAssesment.Api.DocuLinks.Models | ||||
| { | ||||
|     public class DoculinkAttachments | ||||
|     { | ||||
|         public string docName { get; set; } | ||||
|         public string Path { get; set; } | ||||
|         public bool IsAttachments { get; set; } | ||||
|         public int CustomOrder { get; set; } | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,12 @@ | ||||
| using System.ComponentModel.DataAnnotations; | ||||
| using System.ComponentModel.DataAnnotations.Schema; | ||||
|  | ||||
| namespace DamageAssesment.Api.DocuLinks.Models | ||||
| { | ||||
|     public class DoculinkTranslation | ||||
|     { | ||||
|         public string title { get; set; } | ||||
|         public string description { get; set; } | ||||
|         public string Language { get; set; } | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,20 @@ | ||||
| using System.ComponentModel.DataAnnotations; | ||||
|  | ||||
| namespace DamageAssesment.Api.DocuLinks.Models | ||||
| { | ||||
|     public class LinkType : BaseLinkType | ||||
|     { | ||||
|         public List<LinksTranslation> linksTranslations { get; set; } | ||||
|     } | ||||
|     public class BaseLinkType | ||||
|     { | ||||
|         public int Id { get; set; } | ||||
|         public bool IsActive { get; set; } | ||||
|         public int CustomOrder { get; set; } | ||||
|     } | ||||
|  | ||||
|     public class ResLinkType : BaseLinkType | ||||
|     { | ||||
|         public object titles { get; set; } | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,11 @@ | ||||
| using System.ComponentModel.DataAnnotations.Schema; | ||||
| using System.ComponentModel.DataAnnotations; | ||||
|  | ||||
| namespace DamageAssesment.Api.DocuLinks.Models | ||||
| { | ||||
|     public class LinksTranslation | ||||
|     { | ||||
|         public string TypeText { get; set; } | ||||
|         public string Language { get; set; } | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,22 @@ | ||||
| using System.ComponentModel.DataAnnotations.Schema; | ||||
|  | ||||
| namespace DamageAssesment.Api.DocuLinks.Models | ||||
| { | ||||
|     public class ReqDoculink | ||||
|     { | ||||
|         public int Id { get; set; } | ||||
|         public int linkTypeId { get; set; } | ||||
|         public List<DoculinkTranslation> documentsTranslations { get; set; } | ||||
|         public int CustomOrder { get; set; } | ||||
|         public List<FileModel>? Files { get; set; } | ||||
|     } | ||||
|     public class FileModel | ||||
|     { | ||||
|         public string? FileName { get; set; } | ||||
|         public string? FileContent { get; set; } | ||||
|         public string? FileExtension { get; set; } | ||||
|         public int CustomOrder { get; set; } | ||||
|         public string url { get;set; } | ||||
|         public bool IsAttachments { get; set; } | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,22 @@ | ||||
| using AutoMapper; | ||||
|  | ||||
| namespace DamageAssesment.Api.DocuLinks.Profiles | ||||
| { | ||||
|     public class DoculinkProfile : AutoMapper.Profile | ||||
|     { | ||||
|         public DoculinkProfile() | ||||
|         { | ||||
|             CreateMap<Db.Doculink, Models.ResDoculink>() ; | ||||
|             CreateMap<Db.Doculink, Models.Doculink>(); | ||||
|             CreateMap<Models.Doculink, Db.Doculink>(); | ||||
|             CreateMap<Db.LinkType, Models.ResLinkType>(); | ||||
|             CreateMap<Models.LinkType, Db.LinkType>(); | ||||
|             CreateMap<Db.DoculinkTranslation, Models.DoculinkTranslation>(); | ||||
|             CreateMap<Models.DoculinkTranslation, Db.DoculinkTranslation>(); | ||||
|             CreateMap<Db.LinksTranslation, Models.LinksTranslation>(); | ||||
|             CreateMap<Models.LinksTranslation, Db.LinksTranslation>(); | ||||
|             CreateMap<Db.DoculinkAttachments, Models.DoculinkAttachments>(); | ||||
|             CreateMap<Models.DoculinkAttachments, Db.DoculinkAttachments>(); | ||||
|         } | ||||
|     } | ||||
| } | ||||
							
								
								
									
										43
									
								
								DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Program.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Program.cs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,43 @@ | ||||
| using DamageAssesment.Api.DocuLinks.Db; | ||||
| using DamageAssesment.Api.DocuLinks.Interfaces; | ||||
| using DamageAssesment.Api.DocuLinks.Providers; | ||||
| using Microsoft.EntityFrameworkCore; | ||||
| using System.Reflection; | ||||
|  | ||||
| var builder = WebApplication.CreateBuilder(args); | ||||
|  | ||||
| // Add services to the container. | ||||
|  | ||||
| builder.Services.AddControllers(); | ||||
| builder.Services.AddSwaggerGen(c => | ||||
| { | ||||
|     // Include XML comments from your assembly | ||||
|     var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml"; | ||||
|     var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile); | ||||
|     c.IncludeXmlComments(xmlPath); | ||||
| }); | ||||
| // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle | ||||
| builder.Services.AddEndpointsApiExplorer(); | ||||
| builder.Services.AddSwaggerGen(); | ||||
| builder.Services.AddScoped<IDoculinkProvider, DoculinkProvider>(); | ||||
| builder.Services.AddScoped<IUploadService, UploadService>(); | ||||
| builder.Services.AddScoped<IAzureBlobService, AzureBlobService>(); | ||||
| builder.Services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies()); //4/30 | ||||
| builder.Services.AddDbContext<DoculinkDbContext>(option => | ||||
| { | ||||
|     option.UseInMemoryDatabase("DocumentConnection"); | ||||
| }); | ||||
| var app = builder.Build(); | ||||
|  | ||||
| // Configure the HTTP request pipeline. | ||||
| if (app.Environment.IsDevelopment()) | ||||
| { | ||||
|     app.UseSwagger(); | ||||
|     app.UseSwaggerUI(); | ||||
| } | ||||
|  | ||||
| app.UseAuthorization(); | ||||
|  | ||||
| app.MapControllers(); | ||||
|  | ||||
| app.Run(); | ||||
| @ -0,0 +1,31 @@ | ||||
| { | ||||
|   "$schema": "https://json.schemastore.org/launchsettings.json", | ||||
|   "iisSettings": { | ||||
|     "windowsAuthentication": false, | ||||
|     "anonymousAuthentication": true, | ||||
|     "iisExpress": { | ||||
|       "applicationUrl": "http://localhost:60754", | ||||
|       "sslPort": 0 | ||||
|     } | ||||
|   }, | ||||
|   "profiles": { | ||||
|     "DamageAssesment.Api.Questions": { | ||||
|       "commandName": "Project", | ||||
|       "dotnetRunMessages": true, | ||||
|       "launchBrowser": true, | ||||
|       "launchUrl": "swagger", | ||||
|       "applicationUrl": "http://localhost:5133", | ||||
|       "environmentVariables": { | ||||
|         "ASPNETCORE_ENVIRONMENT": "Development" | ||||
|       } | ||||
|     }, | ||||
|     "IIS Express": { | ||||
|       "commandName": "IISExpress", | ||||
|       "launchBrowser": true, | ||||
|       "launchUrl": "swagger", | ||||
|       "environmentVariables": { | ||||
|         "ASPNETCORE_ENVIRONMENT": "Development" | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| } | ||||
| @ -0,0 +1,44 @@ | ||||
|  | ||||
| using Azure.Storage.Blobs; | ||||
| using Azure.Storage.Blobs.Models; | ||||
| using Azure.Storage.Blobs.Specialized; | ||||
| using DamageAssesment.Api.DocuLinks.Interfaces; | ||||
|  | ||||
| namespace DamageAssesment.Api.DocuLinks.Providers | ||||
| { | ||||
|     public class AzureBlobService: IAzureBlobService | ||||
|     { | ||||
|         BlobServiceClient _blobClient; | ||||
|         BlobContainerClient _containerClient; | ||||
|         string azureConnectionString = "<Primary Connection String>"; | ||||
|         public AzureBlobService() | ||||
|         { | ||||
|             _blobClient = new BlobServiceClient(azureConnectionString); | ||||
|             _containerClient = _blobClient.GetBlobContainerClient("apiimages"); | ||||
|         } | ||||
|  | ||||
|         public async Task<List<Azure.Response<BlobContentInfo>>> UploadFiles(List<IFormFile> files) | ||||
|         { | ||||
|  | ||||
|             var azureResponse = new List<Azure.Response<BlobContentInfo>>(); | ||||
|             foreach (var file in files) | ||||
|             { | ||||
|                 string fileName = file.FileName; | ||||
|                 using (var memoryStream = new MemoryStream()) | ||||
|                 { | ||||
|                     file.CopyTo(memoryStream); | ||||
|                     memoryStream.Position = 0; | ||||
|                     var client = await _containerClient.UploadBlobAsync(fileName, memoryStream, default); | ||||
|                     azureResponse.Add(client); | ||||
|                 } | ||||
|             }; | ||||
|  | ||||
|             return azureResponse; | ||||
|         } | ||||
|         public void DeleteFile(string url) | ||||
|         { | ||||
|             var blob = _containerClient.GetBlockBlobClient(url); | ||||
|             blob.DeleteIfExists(); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,531 @@ | ||||
| using AutoMapper; | ||||
| using DamageAssesment.Api.DocuLinks.Db; | ||||
| using DamageAssesment.Api.DocuLinks.Interfaces; | ||||
| using DamageAssesment.Api.DocuLinks.Models; | ||||
| using Microsoft.AspNetCore.Mvc; | ||||
| using Microsoft.EntityFrameworkCore; | ||||
| using Microsoft.EntityFrameworkCore.Metadata.Internal; | ||||
| using System; | ||||
| using System.Diagnostics.Eventing.Reader; | ||||
| using System.Reflection.Metadata; | ||||
| using System.Xml.Linq; | ||||
|  | ||||
| namespace DamageAssesment.Api.DocuLinks.Providers | ||||
| { | ||||
|  | ||||
|  | ||||
|     public class DoculinkProvider : IDoculinkProvider | ||||
|     { | ||||
|         private DoculinkDbContext DocumentDbContext; | ||||
|         private ILogger<DoculinkProvider> logger; | ||||
|         private IUploadService uploadservice; | ||||
|         private IMapper mapper; | ||||
|  | ||||
|         public DoculinkProvider(DoculinkDbContext DocumentDbContext, ILogger<DoculinkProvider> logger, IMapper mapper, IUploadService uploadservice) | ||||
|         { | ||||
|             this.DocumentDbContext = DocumentDbContext; | ||||
|             this.logger = logger; | ||||
|             this.mapper = mapper; | ||||
|             this.uploadservice = uploadservice; | ||||
|             SeedData(); | ||||
|         } | ||||
|  | ||||
|  | ||||
|  | ||||
|         private void SeedData() | ||||
|         { | ||||
|             if (!DocumentDbContext.LinkTypes.Any()) | ||||
|             { | ||||
|                 DocumentDbContext.LinkTypes.Add(new Db.LinkType() { IsActive = true, CustomOrder = 1 }); | ||||
|                 DocumentDbContext.LinkTypes.Add(new Db.LinkType() { IsActive = true, CustomOrder = 2 }); | ||||
|                 DocumentDbContext.LinkTypes.Add(new Db.LinkType() { IsActive = true, CustomOrder = 3 }); | ||||
|                 DocumentDbContext.LinkTypes.Add(new Db.LinkType() { IsActive = true, CustomOrder = 4 }); | ||||
|                 DocumentDbContext.SaveChanges(); | ||||
|             } | ||||
|             if (!DocumentDbContext.LinksTranslations.Any()) | ||||
|             { | ||||
|                 DocumentDbContext.LinksTranslations.Add(new Db.LinksTranslation() { TypeText = "Forms", Language = "en", LinkTypeId = 1 }); | ||||
|                 DocumentDbContext.LinksTranslations.Add(new Db.LinksTranslation() { TypeText = "Communiques", Language = "en", LinkTypeId = 2 }); | ||||
|                 DocumentDbContext.LinksTranslations.Add(new Db.LinksTranslation() { TypeText = "Memos", Language = "en", LinkTypeId = 3 }); | ||||
|                 DocumentDbContext.LinksTranslations.Add(new Db.LinksTranslation() { TypeText = "Trainings", Language = "en", LinkTypeId = 4 }); | ||||
|                 DocumentDbContext.LinksTranslations.Add(new Db.LinksTranslation() { TypeText = "Formularios", Language = "es", LinkTypeId = 1 }); | ||||
|                 DocumentDbContext.LinksTranslations.Add(new Db.LinksTranslation() { TypeText = "Comunicados", Language = "es", LinkTypeId = 2 }); | ||||
|                 DocumentDbContext.LinksTranslations.Add(new Db.LinksTranslation() { TypeText = "notas", Language = "es", LinkTypeId = 3 }); | ||||
|                 DocumentDbContext.LinksTranslations.Add(new Db.LinksTranslation() { TypeText = "Entrenamientos", Language = "es", LinkTypeId = 4 }); | ||||
|                 DocumentDbContext.LinksTranslations.Add(new Db.LinksTranslation() { TypeText = "Formes", Language = "fr", LinkTypeId = 1 }); | ||||
|                 DocumentDbContext.LinksTranslations.Add(new Db.LinksTranslation() { TypeText = "Communiqués", Language = "fr", LinkTypeId = 2 }); | ||||
|                 DocumentDbContext.LinksTranslations.Add(new Db.LinksTranslation() { TypeText = "Mémos", Language = "fr", LinkTypeId = 3 }); | ||||
|                 DocumentDbContext.LinksTranslations.Add(new Db.LinksTranslation() { TypeText = "Formations", Language = "fr", LinkTypeId = 4 }); | ||||
|                 DocumentDbContext.SaveChanges(); | ||||
|             } | ||||
|             if (!DocumentDbContext.Documents.Any()) | ||||
|             { | ||||
|                 int counter = 0; | ||||
|                 for (int i = 1; i <= 4; i++) | ||||
|                 { | ||||
|                     FileModel fileModel = new FileModel() { url = "www.google"+i+".com", IsAttachments = false, CustomOrder = 1 }; | ||||
|                     ReqDoculink documentInfo = new ReqDoculink() { linkTypeId = i,CustomOrder=i, Files = new List<FileModel>() { fileModel } }; | ||||
|                     Db.DoculinkTranslation documents = new Db.DoculinkTranslation { DocumentId = i, title = "Test"+i, description = "ss"+i, Language = "en" }; | ||||
|                     Models.Doculink document = uploadservice.UploadDocument(counter, documentInfo); | ||||
|                     DocumentDbContext.Documents.Add(mapper.Map<Models.Doculink, Db.Doculink>(document)); | ||||
|                     DocumentDbContext.SaveChanges(); | ||||
|                     DocumentDbContext.DocumentsTranslations.AddRange(documents); | ||||
|                     var dbattachments = mapper.Map<List<Models.DoculinkAttachments>, List<Db.DoculinkAttachments>>(document.doclinksAttachments); | ||||
|                     dbattachments.ForEach(a => a.DocumentId = i); | ||||
|                     DocumentDbContext.DoclinksAttachments.AddRange(dbattachments); | ||||
|                     DocumentDbContext.SaveChanges(); | ||||
|                     counter++; | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         public List<Models.DoculinkTranslation> GetDocumentTranslations(int id, string? language) | ||||
|         { | ||||
|             List<Models.DoculinkTranslation> QuestionTranslations; | ||||
|             if (string.IsNullOrEmpty(language)) | ||||
|             { | ||||
|                 QuestionTranslations = mapper.Map<List<Db.DoculinkTranslation>, List<Models.DoculinkTranslation>>( | ||||
|                     DocumentDbContext.DocumentsTranslations.AsNoTracking().Where(a => a.DocumentId == id).ToList()); | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 QuestionTranslations = mapper.Map<List<Db.DoculinkTranslation>, List<Models.DoculinkTranslation>>( | ||||
|                 DocumentDbContext.DocumentsTranslations.AsNoTracking().Where(a => a.DocumentId == id && a.Language == language).ToList()); | ||||
|             } | ||||
|             return QuestionTranslations; | ||||
|         } | ||||
|         public ResDoculink CreateMultiLanguageObject(List<Models.DoculinkTranslation> questions) | ||||
|         { | ||||
|             ResDoculink MultiLanguage = new ResDoculink(); | ||||
|             Dictionary<string, string> dicttitle = new Dictionary<string, string>(); | ||||
|             Dictionary<string, string> dictdesc = new Dictionary<string, string>(); | ||||
|             foreach (Models.DoculinkTranslation item in questions) | ||||
|             { | ||||
|                 dicttitle.Add(item.Language, item.title); | ||||
|                 dictdesc.Add(item.Language, item.description); | ||||
|             } | ||||
|             MultiLanguage.titles = dicttitle; | ||||
|             MultiLanguage.description = dictdesc; | ||||
|             return MultiLanguage; | ||||
|         } | ||||
|         public List<Models.LinksTranslation> GetLinkTypeTranslations(int id, string? language) | ||||
|         { | ||||
|             List<Models.LinksTranslation> linksTranslations; | ||||
|             if (string.IsNullOrEmpty(language)) | ||||
|             { | ||||
|                 linksTranslations = mapper.Map<List<Db.LinksTranslation>, List<Models.LinksTranslation>>( | ||||
|                     DocumentDbContext.LinksTranslations.AsNoTracking().Where(a => a.LinkTypeId == id).ToList()); | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 linksTranslations = mapper.Map<List<Db.LinksTranslation>, List<Models.LinksTranslation>>( | ||||
|                 DocumentDbContext.LinksTranslations.AsNoTracking().Where(a => a.LinkTypeId == id && a.Language == language).ToList()); | ||||
|             } | ||||
|             return linksTranslations; | ||||
|         } | ||||
|         public object CreateMultiLanguageLinkTypeObject(List<Models.LinksTranslation> links) | ||||
|         { | ||||
|             object MultiLanguage = new object(); | ||||
|             Dictionary<string, string> dicttitle = new Dictionary<string, string>(); | ||||
|             foreach (Models.LinksTranslation item in links) | ||||
|             { | ||||
|                 dicttitle.Add(item.Language, item.TypeText); | ||||
|             } | ||||
|             MultiLanguage = dicttitle; | ||||
|             return MultiLanguage; | ||||
|         } | ||||
|         public async Task<(bool IsSuccess, IEnumerable<Models.ResDoculink> documents, string ErrorMessage)> GetdocumentsByLinkAsync(string? linkType, string? language, bool? isactive) | ||||
|         { | ||||
|  | ||||
|             try | ||||
|             { | ||||
|                 logger?.LogInformation("Query Question"); | ||||
|                 var documents = new List<Db.Doculink>(); | ||||
|                 if (String.IsNullOrEmpty(linkType)) | ||||
|                     documents = await DocumentDbContext.Documents.AsNoTracking().Where(q => (isactive == null || q.IsActive == isactive.Value)).ToListAsync(); | ||||
|                 else | ||||
|                     documents = await DocumentDbContext.Documents.AsNoTracking().Where(q => (isactive == null || q.IsActive == isactive.Value) && | ||||
|                      q.linkTypeId == (DocumentDbContext.LinksTranslations.AsNoTracking().Where(a => a.TypeText.ToLower() == linkType.ToLower()).Select(a => a.Id).FirstOrDefault())).ToListAsync(); | ||||
|                 if (documents != null) | ||||
|                 { | ||||
|                     var result = mapper.Map<List<Db.Doculink>, List<Models.ResDoculink>>(documents); | ||||
|                     foreach (var item in result) | ||||
|                     { | ||||
|                         var multilan = CreateMultiLanguageObject(GetDocumentTranslations(item.Id, language)); | ||||
|                         item.titles = multilan.titles; | ||||
|                         item.description = multilan.description; | ||||
|                         item.linktypes = CreateMultiLanguageLinkTypeObject(GetLinkTypeTranslations(item.linkTypeId, language)); | ||||
|                         item.doclinksAttachments = mapper.Map<List<Db.DoculinkAttachments>, List<Models.DoculinkAttachments>>( | ||||
|                             DocumentDbContext.DoclinksAttachments.AsNoTracking().Where(a => a.DocumentId == item.Id).ToList()); | ||||
|                     } | ||||
|                     return (true, result, null); | ||||
|                 } | ||||
|                 return (false, null, "Not found"); | ||||
|             } | ||||
|             catch (Exception ex) | ||||
|             { | ||||
|                 logger?.LogError(ex.ToString()); | ||||
|                 return (false, null, ex.Message); | ||||
|             } | ||||
|  | ||||
|         } | ||||
|         //public async Task<(bool IsSuccess, IEnumerable<Models.ResDoculink> documents, string ErrorMessage)> GetDocumnetsAsync(string? language) | ||||
|         //{ | ||||
|  | ||||
|         //    try | ||||
|         //    { | ||||
|         //        logger?.LogInformation("Query Question"); | ||||
|         //        var documents = await DocumentDbContext.Documents.Include(a => a.LinkType).AsNoTracking().Where(q => q.IsActive).ToListAsync(); | ||||
|         //        if (documents != null) | ||||
|         //        { | ||||
|         //            logger?.LogInformation($"{documents.Count} Document(s) found"); | ||||
|         //            var result = mapper.Map<List<Db.Document>, List<Models.ResDoculink>>(documents); | ||||
|         //            foreach (var item in result) | ||||
|         //            { | ||||
|         //                var multilan = CreateMultiLanguageObject(GetDocumentTranslations(item.Id, language)); | ||||
|         //                item.titles = multilan.titles; | ||||
|         //                item.description = multilan.description; | ||||
|         //            } | ||||
|         //            return (true, result, null); | ||||
|         //        } | ||||
|         //        return (false, null, "Not found"); | ||||
|         //    } | ||||
|         //    catch (Exception ex) | ||||
|         //    { | ||||
|         //        logger?.LogError(ex.ToString()); | ||||
|         //        return (false, null, ex.Message); | ||||
|         //    } | ||||
|  | ||||
|         //} | ||||
|         public async Task<(bool IsSuccess, Models.Doculink Document, string ErrorMessage)> GetDocumentByidAsync(int id) | ||||
|         { | ||||
|             try | ||||
|             { | ||||
|                 logger?.LogInformation("Query LinkType"); | ||||
|                 var Document = await DocumentDbContext.Documents.AsNoTracking().FirstOrDefaultAsync(q => q.Id == id && q.IsActive); | ||||
|                 if (Document != null) | ||||
|                 { | ||||
|                     logger?.LogInformation($"{Document} customer(s) found"); | ||||
|                     var result = mapper.Map<Db.Doculink, Models.Doculink>(Document); | ||||
|                     result.documentsTranslations = mapper.Map<List<Db.DoculinkTranslation>, List<Models.DoculinkTranslation>>( | ||||
|                             DocumentDbContext.DocumentsTranslations.Where(a => a.DocumentId == result.Id).ToList()); | ||||
|  | ||||
|                     result.doclinksAttachments = mapper.Map<List<Db.DoculinkAttachments>, List<Models.DoculinkAttachments>>( | ||||
|                         DocumentDbContext.DoclinksAttachments.AsNoTracking().Where(a => a.DocumentId == id).ToList()); | ||||
|                     return (true, result, null); | ||||
|                 } | ||||
|                 return (false, null, "Not found"); | ||||
|             } | ||||
|             catch (Exception ex) | ||||
|             { | ||||
|                 logger?.LogError(ex.ToString()); | ||||
|                 return (false, null, ex.Message); | ||||
|             } | ||||
|         } | ||||
|         //added linktype filter  | ||||
|         public async Task<(bool IsSuccess, Models.ResDoculink Document, string ErrorMessage)> GetDocumentAsync(int id, string? linkType, string? language) | ||||
|         { | ||||
|             try | ||||
|             { | ||||
|                 logger?.LogInformation("Query LinkType"); | ||||
|                 //var Document = await DocumentDbContext.Documents.Include(a => a.LinkType).AsNoTracking().FirstOrDefaultAsync(q => q.Id == id && q.IsActive); | ||||
|                 var Document = new Db.Doculink(); | ||||
|                 if (String.IsNullOrEmpty(linkType)) | ||||
|                     Document = await DocumentDbContext.Documents.AsNoTracking().Where(q => q.IsActive && q.Id == id).FirstOrDefaultAsync(); | ||||
|                 else | ||||
|                     Document = await DocumentDbContext.Documents.AsNoTracking().Where(q => q.IsActive && q.Id == id && | ||||
|                      q.linkTypeId == (DocumentDbContext.LinksTranslations.AsNoTracking().Where(a => a.TypeText.ToLower() == linkType.ToLower()).Select(a => a.Id).FirstOrDefault())).FirstOrDefaultAsync(); | ||||
|                 if (Document != null) | ||||
|                 { | ||||
|                     logger?.LogInformation($"{Document} customer(s) found"); | ||||
|                     var result = mapper.Map<Db.Doculink, Models.ResDoculink>(Document); | ||||
|                     var multilan = CreateMultiLanguageObject(GetDocumentTranslations(result.Id, language)); | ||||
|                     result.linktypes = CreateMultiLanguageLinkTypeObject(GetLinkTypeTranslations(result.linkTypeId, language)); | ||||
|                     result.titles = multilan.titles; | ||||
|                     result.description = multilan.description; | ||||
|                     result.doclinksAttachments = mapper.Map<List<Db.DoculinkAttachments>, List<Models.DoculinkAttachments>>( | ||||
|                         DocumentDbContext.DoclinksAttachments.AsNoTracking().Where(a => a.DocumentId == id).ToList()); | ||||
|                     return (true, result, null); | ||||
|                 } | ||||
|                 return (false, null, "Not found"); | ||||
|             } | ||||
|             catch (Exception ex) | ||||
|             { | ||||
|                 logger?.LogError(ex.ToString()); | ||||
|                 return (false, null, ex.Message); | ||||
|             } | ||||
|         } | ||||
|         public async Task<(bool IsSuccess, Models.ResDoculink Document, string ErrorMessage)> PostDocumentAsync(Models.Doculink Document) | ||||
|         { | ||||
|             try | ||||
|             { | ||||
|                 var document = mapper.Map<Models.Doculink, Db.Doculink>(Document); | ||||
|                 document.dateCreated = DateTime.Now; document.dateUpdated = DateTime.Now; | ||||
|                 DocumentDbContext.Documents.Add(document); | ||||
|                 DocumentDbContext.SaveChanges(); | ||||
|                 var dbtranslation = mapper.Map<List<Models.DoculinkTranslation>, List<Db.DoculinkTranslation>>(Document.documentsTranslations); | ||||
|                 dbtranslation.ForEach(i => i.DocumentId = document.Id); | ||||
|                 DocumentDbContext.DocumentsTranslations.AddRange(dbtranslation); | ||||
|                 var dbattachments = mapper.Map<List<Models.DoculinkAttachments>, List<Db.DoculinkAttachments>>(Document.doclinksAttachments); | ||||
|                 dbattachments.ForEach(i => i.DocumentId = document.Id); | ||||
|                 DocumentDbContext.DoclinksAttachments.AddRange(dbattachments); | ||||
|                 DocumentDbContext.SaveChanges(); | ||||
|                 var result = mapper.Map<Db.Doculink, Models.ResDoculink>(document); | ||||
|                 var multilan = CreateMultiLanguageObject(GetDocumentTranslations(document.Id, "")); | ||||
|                 result.linktypes = CreateMultiLanguageLinkTypeObject(GetLinkTypeTranslations(Document.linkTypeId, "")); | ||||
|                 result.titles = multilan.titles; | ||||
|                 result.description = multilan.description; | ||||
|                 result.doclinksAttachments = Document.doclinksAttachments; | ||||
|                 return (true, result, null); | ||||
|             } | ||||
|             catch (Exception ex) | ||||
|             { | ||||
|                 logger?.LogError(ex.ToString()); | ||||
|                 return (false, null, ex.Message); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         public async Task<(bool IsSuccess, Models.ResDoculink Document, string ErrorMessage)> UpdateDocumentAsync(int id, Models.Doculink Document) | ||||
|         { | ||||
|             try | ||||
|             { | ||||
|                 if (Document != null) | ||||
|                 { | ||||
|                     var existing = DocumentDbContext.Documents.AsNoTracking().FirstOrDefault(x => x.Id == id); | ||||
|                     if (existing != null) | ||||
|                     { | ||||
|                         Document.Id = existing.Id; | ||||
|                         var document = mapper.Map<Models.Doculink, Db.Doculink>(Document); | ||||
|                         document.dateUpdated = DateTime.Now; | ||||
|                         DocumentDbContext.Documents.Update(document); | ||||
|                         DocumentDbContext.SaveChanges(); | ||||
|                         var oldtranslations = DocumentDbContext.DocumentsTranslations.Where(a => a.DocumentId == id).ToList(); | ||||
|                         if (oldtranslations != null) | ||||
|                             DocumentDbContext.DocumentsTranslations.RemoveRange(oldtranslations); | ||||
|                         var oldattachments = DocumentDbContext.DoclinksAttachments.Where(a => a.DocumentId == id).ToList(); | ||||
|                         if (oldattachments != null) | ||||
|                             DocumentDbContext.DoclinksAttachments.RemoveRange(oldattachments); | ||||
|                         var dbtranslation = mapper.Map<List<Models.DoculinkTranslation>, List<Db.DoculinkTranslation>>(Document.documentsTranslations); | ||||
|                         dbtranslation.ForEach(i => i.DocumentId = Document.Id); | ||||
|                         DocumentDbContext.DocumentsTranslations.AddRange(dbtranslation); | ||||
|                         var dbattachments = mapper.Map<List<Models.DoculinkAttachments>, List<Db.DoculinkAttachments>>(Document.doclinksAttachments); | ||||
|                         dbattachments.ForEach(i => i.DocumentId = document.Id); | ||||
|                         DocumentDbContext.DoclinksAttachments.AddRange(dbattachments); | ||||
|                         DocumentDbContext.SaveChanges(); | ||||
|                         var result = mapper.Map<Db.Doculink, Models.ResDoculink>(document); | ||||
|                         var multilan = CreateMultiLanguageObject(GetDocumentTranslations(document.Id, "")); | ||||
|                         result.linktypes = CreateMultiLanguageLinkTypeObject(GetLinkTypeTranslations(document.linkTypeId, "")); | ||||
|                         result.titles = multilan.titles; | ||||
|                         result.description = multilan.description; | ||||
|                         result.doclinksAttachments = Document.doclinksAttachments; | ||||
|                         return (true, result, "Successful"); | ||||
|                     } | ||||
|                     else | ||||
|                     { | ||||
|                         logger?.LogInformation($"{Document} Not found"); | ||||
|                         return (false, null, "Not Found"); | ||||
|                     } | ||||
|                 } | ||||
|                 else | ||||
|                 { | ||||
|                     logger?.LogInformation($"{Document} Bad Request"); | ||||
|                     return (false, null, "Bad request"); | ||||
|                 } | ||||
|  | ||||
|             } | ||||
|             catch (Exception ex) | ||||
|             { | ||||
|  | ||||
|                 logger?.LogError(ex.ToString()); | ||||
|                 return (false, null, ex.Message); | ||||
|             } | ||||
|         } | ||||
|         public async Task<(bool IsSuccess, Models.ResDoculink Document, string ErrorMessage)> DeleteDocumentAsync(int id) | ||||
|         { | ||||
|  | ||||
|             try | ||||
|             { | ||||
|                 Db.Doculink Document = DocumentDbContext.Documents.AsNoTracking().Where(a => a.Id == id).FirstOrDefault(); | ||||
|                 if (Document == null) | ||||
|                 { | ||||
|                     return (false, null, "Not Found"); | ||||
|                 } | ||||
|                 var result = mapper.Map<Db.Doculink, Models.ResDoculink>(Document); | ||||
|                 var multilan = CreateMultiLanguageObject(GetDocumentTranslations(Document.Id, "")); | ||||
|                 result.titles = multilan.titles; | ||||
|                 result.description = multilan.description; | ||||
|                 result.linktypes = CreateMultiLanguageLinkTypeObject(GetLinkTypeTranslations(result.linkTypeId, "")); | ||||
|                 result.doclinksAttachments = mapper.Map<List<Db.DoculinkAttachments>, List<Models.DoculinkAttachments>>( | ||||
|                     DocumentDbContext.DoclinksAttachments.AsNoTracking().Where(a => a.DocumentId == id).ToList()); | ||||
|                 Document.IsActive = false; | ||||
|                 DocumentDbContext.Documents.Update(Document); | ||||
|                 DocumentDbContext.SaveChanges(); | ||||
|                 return (true, result, $"DocumentId {id} deleted Successfuly"); | ||||
|             } | ||||
|             catch (Exception ex) | ||||
|             { | ||||
|  | ||||
|                 logger?.LogError(ex.ToString()); | ||||
|                 return (false, null, ex.Message); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         public async Task<(bool IsSuccess, int counter, string message)> GetDocumentCounter() | ||||
|         { | ||||
|             try | ||||
|             { | ||||
|                 int AttachmentId = DocumentDbContext.DoclinksAttachments.Max(a => a.Id); | ||||
|                 return (true, AttachmentId, ""); | ||||
|             } | ||||
|             catch (Exception ex) | ||||
|             { | ||||
|                 return (false, 0, ex.Message); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         //Link Type methods | ||||
|         public async Task<(bool IsSuccess, IEnumerable<Models.ResLinkType> LinkTypes, string ErrorMessage)> GetLinkTypesAsync(string? language) | ||||
|         { | ||||
|  | ||||
|             try | ||||
|             { | ||||
|                 logger?.LogInformation("Query Question"); | ||||
|                 var LinkType = await DocumentDbContext.LinkTypes.AsNoTracking().Where(q => q.IsActive).ToListAsync(); | ||||
|                 if (LinkType != null) | ||||
|                 { | ||||
|                     logger?.LogInformation($"{LinkType.Count} LinkTypes(s) found"); | ||||
|                     var result = mapper.Map<IEnumerable<Db.LinkType>, IEnumerable<Models.ResLinkType>>(LinkType); | ||||
|                     foreach (var item in result) | ||||
|                     { | ||||
|                         item.titles = CreateMultiLanguageLinkTypeObject(GetLinkTypeTranslations(item.Id, language)); | ||||
|                     } | ||||
|                     return (true, result, null); | ||||
|                 } | ||||
|                 return (false, null, "Not found"); | ||||
|             } | ||||
|             catch (Exception ex) | ||||
|             { | ||||
|                 logger?.LogError(ex.ToString()); | ||||
|                 return (false, null, ex.Message); | ||||
|             } | ||||
|  | ||||
|         } | ||||
|         public async Task<(bool IsSuccess, Models.ResLinkType LinkType, string ErrorMessage)> GetLinkTypeAsync(int Id, string? language) | ||||
|         { | ||||
|             try | ||||
|             { | ||||
|                 logger?.LogInformation("Query LinkType"); | ||||
|                 var LinkType = await DocumentDbContext.LinkTypes.AsNoTracking().FirstOrDefaultAsync(q => q.Id == Id && q.IsActive); | ||||
|                 if (LinkType != null) | ||||
|                 { | ||||
|                     logger?.LogInformation($"{LinkType} customer(s) found"); | ||||
|                     var result = mapper.Map<Db.LinkType, Models.ResLinkType>(LinkType); | ||||
|                     result.titles = CreateMultiLanguageLinkTypeObject(GetLinkTypeTranslations(result.Id, language)); | ||||
|                     return (true, result, null); | ||||
|                 } | ||||
|                 return (false, null, "Not found"); | ||||
|             } | ||||
|             catch (Exception ex) | ||||
|             { | ||||
|                 logger?.LogError(ex.ToString()); | ||||
|                 return (false, null, ex.Message); | ||||
|             } | ||||
|         } | ||||
|         public async Task<(bool IsSuccess, Models.ResLinkType LinkType, string ErrorMessage)> PostLinkTypeAsync(Models.LinkType LinkType) | ||||
|         { | ||||
|             try | ||||
|             { | ||||
|                 logger?.LogInformation("Query LinkType"); | ||||
|                 if (!LinkTypeExists(LinkType.Id)) | ||||
|                 { | ||||
|                     var dbLink = mapper.Map<Models.LinkType, Db.LinkType>(LinkType); | ||||
|                     DocumentDbContext.LinkTypes.Add(dbLink); | ||||
|                     DocumentDbContext.SaveChanges(); | ||||
|                     var dbtranslation = mapper.Map<List<Models.LinksTranslation>, List<Db.LinksTranslation>>(LinkType.linksTranslations); | ||||
|                     dbtranslation.ForEach(i => i.LinkTypeId = dbLink.Id); | ||||
|                     DocumentDbContext.LinksTranslations.AddRange(dbtranslation); | ||||
|                     DocumentDbContext.SaveChanges(); | ||||
|                     var result = mapper.Map<Db.LinkType, Models.ResLinkType>(dbLink); | ||||
|                     result.titles = CreateMultiLanguageLinkTypeObject(GetLinkTypeTranslations(result.Id, "")); | ||||
|                     return (true, result, null); | ||||
|                 } | ||||
|                 return (false, null, "LinkType is already exits"); | ||||
|             } | ||||
|             catch (Exception ex) | ||||
|             { | ||||
|                 logger?.LogError(ex.ToString()); | ||||
|                 return (false, null, ex.Message); | ||||
|             } | ||||
|         } | ||||
|         public async Task<(bool IsSuccess, Models.ResLinkType LinkType, string ErrorMessage)> UpdateLinkTypeAsync(int id, Models.LinkType LinkType) | ||||
|         { | ||||
|             try | ||||
|             { | ||||
|                 if (LinkType != null) | ||||
|                 { | ||||
|                     var existing = DocumentDbContext.LinkTypes.AsNoTracking().FirstOrDefault(x => x.Id == id); | ||||
|                     if (existing != null) | ||||
|                     { | ||||
|                         var dbLink = mapper.Map<Models.LinkType, Db.LinkType>(LinkType); | ||||
|                         DocumentDbContext.LinkTypes.Update(dbLink); | ||||
|                         DocumentDbContext.SaveChanges(); | ||||
|                         var oldtranslations = DocumentDbContext.LinksTranslations.Where(a => a.LinkTypeId == id).ToList(); | ||||
|                         if (oldtranslations != null) | ||||
|                             DocumentDbContext.LinksTranslations.RemoveRange(oldtranslations); | ||||
|                         var dbtranslation = mapper.Map<List<Models.LinksTranslation>, List<Db.LinksTranslation>>(LinkType.linksTranslations); | ||||
|                         dbtranslation.ForEach(i => i.LinkTypeId = dbLink.Id); | ||||
|                         DocumentDbContext.LinksTranslations.AddRange(dbtranslation); | ||||
|                         DocumentDbContext.SaveChanges(); | ||||
|                         var result = mapper.Map<Db.LinkType, Models.ResLinkType>(dbLink); | ||||
|                         result.titles = CreateMultiLanguageLinkTypeObject(GetLinkTypeTranslations(result.Id, "")); | ||||
|                         return (true, result, "Successful"); | ||||
|                     } | ||||
|                     else | ||||
|                     { | ||||
|                         logger?.LogInformation($"{LinkType} Not found"); | ||||
|                         return (false, null, "Not Found"); | ||||
|                     } | ||||
|                 } | ||||
|                 else | ||||
|                 { | ||||
|                     logger?.LogInformation($"{LinkType} Bad Request"); | ||||
|                     return (false, null, "Bad request"); | ||||
|                 } | ||||
|  | ||||
|             } | ||||
|             catch (Exception ex) | ||||
|             { | ||||
|  | ||||
|                 logger?.LogError(ex.ToString()); | ||||
|                 return (false, null, ex.Message); | ||||
|             } | ||||
|         } | ||||
|         public async Task<(bool IsSuccess, Models.ResLinkType LinkType, string ErrorMessage)> DeleteLinkTypeAsync(int id) | ||||
|         { | ||||
|  | ||||
|             try | ||||
|             { | ||||
|                 Db.LinkType LinkType = DocumentDbContext.LinkTypes.AsNoTracking().Where(a => a.Id == id).FirstOrDefault(); | ||||
|                 if (LinkType == null) | ||||
|                 { | ||||
|                     return (false, null, "Not Found"); | ||||
|                 } | ||||
|                 LinkType.IsActive = false; | ||||
|                 var result = mapper.Map<Db.LinkType, Models.ResLinkType>(LinkType); | ||||
|                 result.titles = CreateMultiLanguageLinkTypeObject(GetLinkTypeTranslations(result.Id, "")); | ||||
|                 DocumentDbContext.LinkTypes.Update(LinkType); | ||||
|                 DocumentDbContext.SaveChanges(); | ||||
|                 return (true, result, $"LinkTypeId {id} deleted Successfuly"); | ||||
|             } | ||||
|             catch (Exception ex) | ||||
|             { | ||||
|  | ||||
|                 logger?.LogError(ex.ToString()); | ||||
|                 return (false, null, ex.Message); | ||||
|             } | ||||
|         } | ||||
|         private bool LinkTypeExists(int id) | ||||
|         { | ||||
|             return DocumentDbContext.LinkTypes.AsNoTracking().Count(e => e.Id == id) > 0; | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,142 @@ | ||||
| using AutoMapper; | ||||
| using Azure; | ||||
| using DamageAssesment.Api.DocuLinks.Db; | ||||
| using DamageAssesment.Api.DocuLinks.Interfaces; | ||||
| using DamageAssesment.Api.DocuLinks.Models; | ||||
| using Microsoft.AspNetCore.Http; | ||||
| using Microsoft.EntityFrameworkCore.Metadata.Internal; | ||||
| using System.Diagnostics.Metrics; | ||||
| using System.Net.Http; | ||||
| using System.Security.AccessControl; | ||||
| using System.Security.Principal; | ||||
|  | ||||
| namespace DamageAssesment.Api.DocuLinks.Providers | ||||
| { | ||||
|     public class UploadService : IUploadService | ||||
|     { | ||||
|         private ILogger<UploadService> logger; | ||||
|         private IMapper mapper; | ||||
|         private string uploadpath = ""; | ||||
|         private string Deletepath = ""; | ||||
|         public UploadService(IConfiguration configuration, ILogger<UploadService> logger, IMapper mapper) | ||||
|         { | ||||
|             this.logger = logger; | ||||
|             this.mapper = mapper; | ||||
|             uploadpath = configuration.GetValue<string>("Fileupload:folderpath"); | ||||
|             Deletepath = configuration.GetValue<string>("Fileupload:Deletepath"); | ||||
|         } | ||||
|  | ||||
|         public Models.Doculink UploadDocument(int counter, ReqDoculink documentInfo) | ||||
|         { | ||||
|             Models.Doculink Documents = new Models.Doculink(); | ||||
|             List<Models.DoculinkAttachments> attachments = new List<Models.DoculinkAttachments>(); | ||||
|             try  | ||||
|             { | ||||
|                 string path = "", UserfileName=""; | ||||
|                 var fullDirectoryPath = Path.Combine(Directory.GetCurrentDirectory(), uploadpath); | ||||
|                 if (!Directory.Exists(fullDirectoryPath)) //Create deirectory if does not exist | ||||
|                     Directory.CreateDirectory(fullDirectoryPath); | ||||
|                 if (documentInfo.Files != null) | ||||
|                 { | ||||
|  | ||||
|                     foreach (var item in documentInfo.Files) | ||||
|                     { | ||||
|                         counter++; | ||||
|                         if (item.IsAttachments) | ||||
|                         { | ||||
|                             UserfileName = Path.GetFileName(item.FileName); | ||||
|                             var fileName = String.Format("Document_{0}{1}", counter, item.FileExtension); | ||||
|                             path = Path.Combine(fullDirectoryPath, fileName); | ||||
|                             File.WriteAllBytes(path, Convert.FromBase64String(item.FileContent)); | ||||
|                         } | ||||
|                         else | ||||
|                             path = item.url; | ||||
|                         attachments.Add(new Models.DoculinkAttachments { docName=UserfileName,Path=path,IsAttachments=item.IsAttachments,CustomOrder=item.CustomOrder }); | ||||
|                     } | ||||
|                 } | ||||
|                 Documents=new Models.Doculink (){ linkTypeId = documentInfo.linkTypeId, | ||||
|                     documentsTranslations = documentInfo.documentsTranslations,doclinksAttachments=attachments, | ||||
|                     IsDeleted=false,CustomOrder=documentInfo.CustomOrder, IsActive =true}; | ||||
|              | ||||
|                 return Documents; | ||||
|             } | ||||
|             catch (Exception ex) { | ||||
|                 return new Models.Doculink(); | ||||
|             } | ||||
|  | ||||
|             | ||||
|         } | ||||
|         public Models.Doculink UpdateDocuments(int counter, Models.Doculink document, ReqDoculink documentInfo) | ||||
|         { | ||||
|             try | ||||
|             { | ||||
|                 foreach (var item in document.doclinksAttachments) | ||||
|                 { | ||||
|                     Movefile(item.Path); | ||||
|                 } | ||||
|                 var fullDirectoryPath = Path.Combine(Directory.GetCurrentDirectory(), uploadpath); | ||||
|                 if (!Directory.Exists(fullDirectoryPath)) //Create deirectory if does not exist | ||||
|                     Directory.CreateDirectory(fullDirectoryPath); | ||||
|  | ||||
|                 string path = "", UserfileName = ""; | ||||
|                 List<Models.DoculinkAttachments> attachments = new List<Models.DoculinkAttachments>(); | ||||
|                 foreach (var item in documentInfo.Files) | ||||
|                 { | ||||
|                     counter++; | ||||
|                     if (item.IsAttachments) | ||||
|                     { | ||||
|                         UserfileName = Path.GetFileName(item.FileName); | ||||
|                         var fileName = String.Format("Document_{0}{1}", counter, item.FileExtension); | ||||
|                         path = Path.Combine(fullDirectoryPath, fileName); | ||||
|                         File.WriteAllBytes(path, Convert.FromBase64String(item.FileContent)); | ||||
|                     } | ||||
|                     else | ||||
|                         path = item.url; | ||||
|                     attachments.Add(new Models.DoculinkAttachments { docName = UserfileName, Path = path,IsAttachments=item.IsAttachments,CustomOrder=item.CustomOrder }); | ||||
|                 } | ||||
|                 Models.Doculink Documents = new Models.Doculink() | ||||
|                 { | ||||
|                     Id = documentInfo.Id, | ||||
|                     linkTypeId = documentInfo.linkTypeId, | ||||
|                     documentsTranslations=documentInfo.documentsTranslations, | ||||
|                     IsActive = true, | ||||
|                     IsDeleted=false, | ||||
|                     CustomOrder = documentInfo.CustomOrder, | ||||
|                     doclinksAttachments = attachments | ||||
|                 }; | ||||
|  | ||||
|                 return Documents; | ||||
|             } | ||||
|  | ||||
|              catch (Exception ex) { | ||||
|                 return new Models.Doculink(); | ||||
|             } | ||||
|         } | ||||
|         public void Deletefile(string path) | ||||
|         { | ||||
|             if (path != "") | ||||
|             { | ||||
|                 FileInfo file = new FileInfo(path); | ||||
|                 if (file?.Exists??false)//check file exsit or not   | ||||
|                 { | ||||
|                     file.Delete(); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         public void Movefile(string path) | ||||
|         { | ||||
|             if (path != "") | ||||
|             { | ||||
|                 var pathToSave = Path.Combine(Directory.GetCurrentDirectory(), Deletepath); | ||||
|                 if (!Directory.Exists(pathToSave)) //Create deirectory if does not exist | ||||
|                     Directory.CreateDirectory(pathToSave); | ||||
|                 FileInfo file = new FileInfo(path); | ||||
|                 if (file?.Exists ?? false)//check file exsit or not   | ||||
|                 { | ||||
|                     string filename = file.Name.Replace(file.Extension, " ") + DateTime.Now.ToShortDateString().Replace("/","_") + file.Extension; | ||||
|                     file.MoveTo(pathToSave+"\\"+ filename); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,8 @@ | ||||
| { | ||||
|   "Logging": { | ||||
|     "LogLevel": { | ||||
|       "Default": "Information", | ||||
|       "Microsoft.AspNetCore": "Warning" | ||||
|     } | ||||
|   } | ||||
| } | ||||
| @ -0,0 +1,13 @@ | ||||
| { | ||||
|   "Logging": { | ||||
|     "LogLevel": { | ||||
|       "Default": "Information", | ||||
|       "Microsoft.AspNetCore": "Warning" | ||||
|     } | ||||
|   }, | ||||
|   "AllowedHosts": "*", | ||||
|   "Fileupload": { | ||||
|     "folderpath": "DASA_Documents/Active", | ||||
|     "Deletepath": "DASA_Documents/Deleted" | ||||
|   } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user