Compare commits
No commits in common. "dev" and "v1.0.8" have entirely different histories.
19 changed files with 380 additions and 2368 deletions
9
BMA.EHR.Recruit.Service.csproj.user
Normal file
9
BMA.EHR.Recruit.Service.csproj.user
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<ActiveDebugProfile>https</ActiveDebugProfile>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||
<DebuggerFlavor>ProjectDebugger</DebuggerFlavor>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
|
|
@ -24,8 +24,6 @@
|
|||
<PackageReference Include="CoreAdmin" Version="2.7.0" />
|
||||
<PackageReference Include="EFCore.BulkExtensions.MySql" Version="6.7.16" />
|
||||
<PackageReference Include="EPPlus" Version="6.1.3" />
|
||||
<PackageReference Include="ExcelDataReader" Version="3.8.0" />
|
||||
<PackageReference Include="ExcelDataReader.DataSet" Version="3.8.0" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="7.0.20" />
|
||||
<PackageReference Include="Microsoft.IdentityModel.Protocols.OpenIdConnect" Version="7.1.2" />
|
||||
<PackageReference Include="Microsoft.IdentityModel.Protocols" Version="7.1.2" />
|
||||
|
|
|
|||
|
|
@ -377,7 +377,6 @@ namespace BMA.EHR.Recruit.Controllers
|
|||
try
|
||||
{
|
||||
var data = await _context.RecruitImports.AsQueryable()
|
||||
.AsNoTracking()
|
||||
.Include(x => x.RecruitImages)
|
||||
.ThenInclude(x => x.Document)
|
||||
.Include(x => x.RecruitDocuments)
|
||||
|
|
@ -718,11 +717,9 @@ namespace BMA.EHR.Recruit.Controllers
|
|||
var doc = await _minioService.UploadFileAsync(file);
|
||||
var import_doc_id = doc.Id.ToString("D");
|
||||
|
||||
// Write file to disk directly from IFormFile instead of downloading back from MinIO
|
||||
using (var stream = new FileStream(importFile, FileMode.Create))
|
||||
{
|
||||
await file.CopyToAsync(stream);
|
||||
}
|
||||
var fileContent = (await _minioService.DownloadFileAsync(doc.Id)).FileContent;
|
||||
System.IO.File.WriteAllBytes(importFile, fileContent);
|
||||
fileContent = null;
|
||||
|
||||
// สร้างรอบการบรรจุ
|
||||
var imported = new RecruitImport
|
||||
|
|
@ -758,7 +755,6 @@ namespace BMA.EHR.Recruit.Controllers
|
|||
ImportDocId = import_doc_id,
|
||||
UserId = UserId,
|
||||
FullName = FullName,
|
||||
Token = token,
|
||||
Request = req,
|
||||
});
|
||||
await _importJobQueue.EnqueueAsync(job);
|
||||
|
|
@ -934,11 +930,9 @@ namespace BMA.EHR.Recruit.Controllers
|
|||
var doc = await _minioService.UploadFileAsync(file);
|
||||
var import_doc_id = doc.Id.ToString("D");
|
||||
|
||||
// Write file to disk directly from IFormFile instead of downloading back from MinIO
|
||||
using (var stream = new FileStream(importFile, FileMode.Create))
|
||||
{
|
||||
await file.CopyToAsync(stream);
|
||||
}
|
||||
var fileContent = (await _minioService.DownloadFileAsync(doc.Id)).FileContent;
|
||||
System.IO.File.WriteAllBytes(importFile, fileContent);
|
||||
fileContent = null;
|
||||
|
||||
// Enqueue background job
|
||||
var job = _importJobTracker.CreateJob(new ImportJobInfo
|
||||
|
|
@ -949,7 +943,6 @@ namespace BMA.EHR.Recruit.Controllers
|
|||
ImportDocId = import_doc_id,
|
||||
UserId = UserId,
|
||||
FullName = FullName,
|
||||
Token = token,
|
||||
});
|
||||
await _importJobQueue.EnqueueAsync(job);
|
||||
|
||||
|
|
@ -1020,7 +1013,6 @@ namespace BMA.EHR.Recruit.Controllers
|
|||
ImportDocId = import_doc_id,
|
||||
UserId = UserId,
|
||||
FullName = FullName,
|
||||
Token = token,
|
||||
});
|
||||
await _importJobQueue.EnqueueAsync(job);
|
||||
|
||||
|
|
@ -1090,7 +1082,6 @@ namespace BMA.EHR.Recruit.Controllers
|
|||
RecruitImportId = id,
|
||||
UserId = UserId,
|
||||
FullName = FullName,
|
||||
Token = token,
|
||||
});
|
||||
await _importJobQueue.EnqueueAsync(job);
|
||||
|
||||
|
|
@ -2010,7 +2001,6 @@ namespace BMA.EHR.Recruit.Controllers
|
|||
public async Task<ActionResult<ResponseObject>> ExportExamAsync(Guid id)
|
||||
{
|
||||
var data = await _context.RecruitImports.AsQueryable()
|
||||
.AsNoTracking()
|
||||
.Include(x => x.Recruits)
|
||||
.FirstOrDefaultAsync(x => x.Id == id);
|
||||
|
||||
|
|
@ -2519,7 +2509,6 @@ namespace BMA.EHR.Recruit.Controllers
|
|||
public async Task<IActionResult> GetCandidateNewListReportAsync(Guid id)
|
||||
{
|
||||
var data = await _context.Recruits.AsQueryable()
|
||||
.AsNoTracking()
|
||||
.Include(x => x.RecruitImport)
|
||||
.Where(x => x.RecruitImport.Id == id)
|
||||
.OrderBy(x => x.ExamId)
|
||||
|
|
|
|||
|
|
@ -20,7 +20,6 @@ namespace BMA.EHR.Recruit.Data
|
|||
modelBuilder.Entity<Models.Recruits.Recruit>().HasMany(x => x.Addresses).WithOne(x => x.Recruit).OnDelete(DeleteBehavior.Cascade);
|
||||
modelBuilder.Entity<Models.Recruits.Recruit>().HasMany(x => x.Certificates).WithOne(x => x.Recruit).OnDelete(DeleteBehavior.Cascade);
|
||||
modelBuilder.Entity<Models.Recruits.Recruit>().HasMany(x => x.Payments).WithOne(x => x.Recruit).OnDelete(DeleteBehavior.Cascade);
|
||||
modelBuilder.Entity<ScoreImport>().HasMany(x => x.Scores).WithOne(x => x.ScoreImport).HasForeignKey(x => x.ScoreImportId).OnDelete(DeleteBehavior.Cascade);
|
||||
}
|
||||
|
||||
public DbSet<Document> Documents { get; set; }
|
||||
|
|
|
|||
|
|
@ -20,9 +20,4 @@ RUN dotnet publish "BMA.EHR.Recruit.csproj" -c Release -o /app/publish /p:UseApp
|
|||
FROM base AS final
|
||||
WORKDIR /app
|
||||
COPY --from=publish /app/publish .
|
||||
|
||||
# GC configuration for better memory management in containers
|
||||
#ENV DOTNET_GCHeapHardLimit=1073741824
|
||||
#ENV DOTNET_GCConserveMemory=9
|
||||
|
||||
ENTRYPOINT ["dotnet", "BMA.EHR.Recruit.dll"]
|
||||
1605
Migrations/20260519102256_fix relation.Designer.cs
generated
1605
Migrations/20260519102256_fix relation.Designer.cs
generated
File diff suppressed because it is too large
Load diff
|
|
@ -1,64 +0,0 @@
|
|||
using System;
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace BMA.EHR.Recruit.Migrations
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public partial class fixrelation : Migration
|
||||
{
|
||||
/// <inheritdoc />
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.DropForeignKey(
|
||||
name: "FK_ScoreImports_Documents_ImportFileId",
|
||||
table: "ScoreImports");
|
||||
|
||||
migrationBuilder.AlterColumn<Guid>(
|
||||
name: "ImportFileId",
|
||||
table: "ScoreImports",
|
||||
type: "char(36)",
|
||||
nullable: true,
|
||||
collation: "ascii_general_ci",
|
||||
oldClrType: typeof(Guid),
|
||||
oldType: "char(36)")
|
||||
.OldAnnotation("Relational:Collation", "ascii_general_ci");
|
||||
|
||||
migrationBuilder.AddForeignKey(
|
||||
name: "FK_ScoreImports_Documents_ImportFileId",
|
||||
table: "ScoreImports",
|
||||
column: "ImportFileId",
|
||||
principalTable: "Documents",
|
||||
principalColumn: "Id");
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.DropForeignKey(
|
||||
name: "FK_ScoreImports_Documents_ImportFileId",
|
||||
table: "ScoreImports");
|
||||
|
||||
migrationBuilder.AlterColumn<Guid>(
|
||||
name: "ImportFileId",
|
||||
table: "ScoreImports",
|
||||
type: "char(36)",
|
||||
nullable: false,
|
||||
defaultValue: new Guid("00000000-0000-0000-0000-000000000000"),
|
||||
collation: "ascii_general_ci",
|
||||
oldClrType: typeof(Guid),
|
||||
oldType: "char(36)",
|
||||
oldNullable: true)
|
||||
.OldAnnotation("Relational:Collation", "ascii_general_ci");
|
||||
|
||||
migrationBuilder.AddForeignKey(
|
||||
name: "FK_ScoreImports_Documents_ImportFileId",
|
||||
table: "ScoreImports",
|
||||
column: "ImportFileId",
|
||||
principalTable: "Documents",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1353,7 +1353,7 @@ namespace BMA.EHR.Recruit.Migrations
|
|||
.HasColumnOrder(101)
|
||||
.HasComment("User Id ที่สร้างข้อมูล");
|
||||
|
||||
b.Property<Guid?>("ImportFileId")
|
||||
b.Property<Guid>("ImportFileId")
|
||||
.HasColumnType("char(36)");
|
||||
|
||||
b.Property<string>("LastUpdateFullName")
|
||||
|
|
@ -1550,7 +1550,9 @@ namespace BMA.EHR.Recruit.Migrations
|
|||
{
|
||||
b.HasOne("BMA.EHR.Recruit.Models.Documents.Document", "ImportFile")
|
||||
.WithMany()
|
||||
.HasForeignKey("ImportFileId");
|
||||
.HasForeignKey("ImportFileId")
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.IsRequired();
|
||||
|
||||
b.HasOne("BMA.EHR.Recruit.Models.Recruits.RecruitImport", "RecruitImport")
|
||||
.WithOne("ScoreImport")
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
using Microsoft.EntityFrameworkCore;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
namespace BMA.EHR.Recruit.Models.Recruits
|
||||
{
|
||||
|
|
@ -84,9 +83,6 @@ namespace BMA.EHR.Recruit.Models.Recruits
|
|||
[MaxLength(50), Comment("สถานะคัดกรองคุณสมบัติ")]
|
||||
public string ExamAttribute { get; set; } = string.Empty;
|
||||
|
||||
[ForeignKey("ScoreImport")]
|
||||
public Guid ScoreImportId { get; set; }
|
||||
|
||||
public ScoreImport ScoreImport { get; set; }
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,9 +7,7 @@ namespace BMA.EHR.Recruit.Models.Recruits
|
|||
{
|
||||
public int Year { get; set; }
|
||||
|
||||
public Guid? ImportFileId { get; set; }
|
||||
|
||||
public Document ImportFile { get; set; }
|
||||
public Document ImportFile { get; set; } = new Document();
|
||||
|
||||
public virtual List<RecruitScore> Scores { get; set; } = new List<RecruitScore>();
|
||||
|
||||
|
|
|
|||
|
|
@ -69,7 +69,6 @@ builder.Services.AddAuthorization();
|
|||
// Register Services
|
||||
builder.Services.AddTransient<RecruitService>();
|
||||
builder.Services.AddTransient<MinIOService>();
|
||||
builder.Services.AddTransient<NotificationService>();
|
||||
builder.Services.AddTransient<PermissionRepository>();
|
||||
builder.Services.AddSingleton<ImportJobQueue>();
|
||||
builder.Services.AddSingleton<ImportJobTracker>();
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -36,7 +36,6 @@ public class ImportJobInfo
|
|||
public string ImportDocId { get; set; } = "";
|
||||
public string? UserId { get; set; }
|
||||
public string? FullName { get; set; }
|
||||
public string? Token { get; set; }
|
||||
|
||||
// For CandidateFile
|
||||
public PostRecruitImportRequest? Request { get; set; }
|
||||
|
|
@ -45,11 +44,9 @@ public class ImportJobInfo
|
|||
public class ImportJobTracker
|
||||
{
|
||||
private readonly ConcurrentDictionary<string, ImportJobInfo> _jobs = new();
|
||||
private readonly TimeSpan _evictionAge = TimeSpan.FromHours(1);
|
||||
|
||||
public ImportJobInfo CreateJob(ImportJobInfo job)
|
||||
{
|
||||
EvictOldJobs();
|
||||
_jobs[job.JobId] = job;
|
||||
return job;
|
||||
}
|
||||
|
|
@ -68,23 +65,7 @@ public class ImportJobTracker
|
|||
if (errorMessage != null)
|
||||
job.ErrorMessage = errorMessage;
|
||||
if (status == ImportJobStatus.Completed || status == ImportJobStatus.Failed)
|
||||
{
|
||||
job.CompletedAt = DateTime.Now;
|
||||
// Clear request data to free memory for completed/failed jobs
|
||||
job.Request = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void EvictOldJobs()
|
||||
{
|
||||
var cutoff = DateTime.Now - _evictionAge;
|
||||
foreach (var kvp in _jobs)
|
||||
{
|
||||
if (kvp.Value.CompletedAt.HasValue && kvp.Value.CompletedAt.Value < cutoff)
|
||||
{
|
||||
_jobs.TryRemove(kvp.Key, out _);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -72,13 +72,14 @@ namespace BMA.EHR.Recruit.Services
|
|||
{
|
||||
var id = Guid.NewGuid();
|
||||
file.CopyTo(ms);
|
||||
ms.Position = 0; // Reset stream position for reading
|
||||
var fileBytes = ms.ToArray();
|
||||
System.IO.MemoryStream filestream = new System.IO.MemoryStream(fileBytes);
|
||||
|
||||
var request = new PutObjectRequest
|
||||
{
|
||||
BucketName = _bucketName,
|
||||
Key = id.ToString("D"),
|
||||
InputStream = ms,
|
||||
InputStream = filestream,
|
||||
ContentType = file.ContentType,
|
||||
CannedACL = S3CannedACL.PublicRead
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,59 +0,0 @@
|
|||
using Microsoft.Extensions.Logging;
|
||||
using Newtonsoft.Json;
|
||||
using System.Net.Http.Headers;
|
||||
using System.Text;
|
||||
|
||||
namespace BMA.EHR.Recruit.Services;
|
||||
|
||||
public class NotificationService
|
||||
{
|
||||
private readonly IHttpClientFactory _httpClientFactory;
|
||||
private readonly ILogger<NotificationService> _logger;
|
||||
private readonly IConfiguration _configuration;
|
||||
|
||||
private string NotifyEndpoint = "https://hrmsbkk.case-collection.com/api/v1/org/through-socket/notify-from-token";
|
||||
|
||||
public NotificationService(IHttpClientFactory httpClientFactory, ILogger<NotificationService> logger, IConfiguration configuration)
|
||||
{
|
||||
_httpClientFactory = httpClientFactory;
|
||||
_logger = logger;
|
||||
_configuration = configuration;
|
||||
NotifyEndpoint = $"{_configuration["API"]}/org/through-socket/notify-from-token";
|
||||
}
|
||||
|
||||
public async Task SendImportNotificationAsync(string? token, bool error, string message)
|
||||
{
|
||||
if (string.IsNullOrEmpty(token))
|
||||
{
|
||||
_logger.LogWarning("Cannot send import notification: token is null or empty.");
|
||||
return;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
var client = _httpClientFactory.CreateClient("default");
|
||||
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.Replace("Bearer ", ""));
|
||||
|
||||
var payload = new
|
||||
{
|
||||
error,
|
||||
message
|
||||
};
|
||||
|
||||
var json = JsonConvert.SerializeObject(payload);
|
||||
var content = new StringContent(json, Encoding.UTF8, "application/json");
|
||||
|
||||
var response = await client.PostAsync(NotifyEndpoint, content);
|
||||
|
||||
if (!response.IsSuccessStatusCode)
|
||||
{
|
||||
var responseBody = await response.Content.ReadAsStringAsync();
|
||||
_logger.LogWarning("Import notification failed with status {StatusCode}: {Body}", response.StatusCode, responseBody);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Failed to send import notification: {Message}", ex.Message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -18,7 +18,7 @@
|
|||
"MongoConnection": "mongodb://admin:adminVM123@127.0.0.1:27017",
|
||||
"DefaultConnection": "Server=192.168.1.63;User ID=root;Password=12345678;Port=3306;database=hrms;Convert Zero Datetime=True;Allow User Variables=true;Pooling=True;SslMode=None",
|
||||
"OrgConnection": "Server=192.168.1.63;User ID=root;Password=12345678;Port=3306;database=hrms_organization;Convert Zero Datetime=True;Allow User Variables=true;Pooling=True;SslMode=None",
|
||||
"RecruitConnection": "Server=192.168.1.63;User ID=root;Password=12345678;Port=3306;database=hrms_recruit;Convert Zero Datetime=True;Allow User Variables=true;Pooling=True;SslMode=None;AllowLoadLocalInfile=true;"
|
||||
"RecruitConnection": "Server=192.168.1.63;User ID=root;Password=12345678;Port=3306;database=hrms_recruit;Convert Zero Datetime=True;Allow User Variables=true;Pooling=True;SslMode=None"
|
||||
},
|
||||
"Jwt": {
|
||||
"Key": "j7C9RO_p4nRtuwCH4z9Db_A_6We42tkD_p4lZtDrezc",
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@
|
|||
"MongoConnection": "mongodb://admin:adminVM123@127.0.0.1:27017",
|
||||
"DefaultConnection": "Server=192.168.1.63;User ID=root;Password=12345678;Port=3306;database=hrms;Convert Zero Datetime=True;Allow User Variables=true;Pooling=True;SslMode=None",
|
||||
"OrgConnection": "Server=192.168.1.63;User ID=root;Password=12345678;Port=3306;database=hrms_organization;Convert Zero Datetime=True;Allow User Variables=true;Pooling=True;SslMode=None",
|
||||
"RecruitConnection": "Server=192.168.1.63;User ID=root;Password=12345678;Port=3306;database=hrms_recruit;Convert Zero Datetime=True;Allow User Variables=true;Pooling=True;SslMode=None;AllowLoadLocalInfile=true;"
|
||||
"RecruitConnection": "Server=192.168.1.63;User ID=root;Password=12345678;Port=3306;database=hrms_recruit;Convert Zero Datetime=True;Allow User Variables=true;Pooling=True;SslMode=None"
|
||||
},
|
||||
"Jwt": {
|
||||
"Key": "j7C9RO_p4nRtuwCH4z9Db_A_6We42tkD_p4lZtDrezc",
|
||||
|
|
|
|||
|
|
@ -289,35 +289,6 @@
|
|||
"lib/net7.0/EPPlus.System.Drawing.dll": {}
|
||||
}
|
||||
},
|
||||
"ExcelDataReader/3.8.0": {
|
||||
"type": "package",
|
||||
"compile": {
|
||||
"lib/netstandard2.1/ExcelDataReader.dll": {
|
||||
"related": ".pdb;.xml"
|
||||
}
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.1/ExcelDataReader.dll": {
|
||||
"related": ".pdb;.xml"
|
||||
}
|
||||
}
|
||||
},
|
||||
"ExcelDataReader.DataSet/3.8.0": {
|
||||
"type": "package",
|
||||
"dependencies": {
|
||||
"ExcelDataReader": "3.8.0"
|
||||
},
|
||||
"compile": {
|
||||
"lib/netstandard2.1/ExcelDataReader.DataSet.dll": {
|
||||
"related": ".pdb;.xml"
|
||||
}
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.1/ExcelDataReader.DataSet.dll": {
|
||||
"related": ".pdb;.xml"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Google.Protobuf/3.19.4": {
|
||||
"type": "package",
|
||||
"compile": {
|
||||
|
|
@ -5699,56 +5670,6 @@
|
|||
"readme.md"
|
||||
]
|
||||
},
|
||||
"ExcelDataReader/3.8.0": {
|
||||
"sha512": "kbUsldc5Fn9IKgzL2nr4VvN/mKqPqn8zGXUZpA7uL6svCA4psF+qMK519EhMvderpU4pAJoqk9DWpiSIkiZtXA==",
|
||||
"type": "package",
|
||||
"path": "exceldatareader/3.8.0",
|
||||
"files": [
|
||||
".nupkg.metadata",
|
||||
".signature.p7s",
|
||||
"ExcelDataReader.png",
|
||||
"README.md",
|
||||
"exceldatareader.3.8.0.nupkg.sha512",
|
||||
"exceldatareader.nuspec",
|
||||
"lib/net462/ExcelDataReader.dll",
|
||||
"lib/net462/ExcelDataReader.pdb",
|
||||
"lib/net462/ExcelDataReader.xml",
|
||||
"lib/net8.0/ExcelDataReader.dll",
|
||||
"lib/net8.0/ExcelDataReader.pdb",
|
||||
"lib/net8.0/ExcelDataReader.xml",
|
||||
"lib/netstandard2.0/ExcelDataReader.dll",
|
||||
"lib/netstandard2.0/ExcelDataReader.pdb",
|
||||
"lib/netstandard2.0/ExcelDataReader.xml",
|
||||
"lib/netstandard2.1/ExcelDataReader.dll",
|
||||
"lib/netstandard2.1/ExcelDataReader.pdb",
|
||||
"lib/netstandard2.1/ExcelDataReader.xml"
|
||||
]
|
||||
},
|
||||
"ExcelDataReader.DataSet/3.8.0": {
|
||||
"sha512": "+eQg5oinHir7ayE/rF4dedvy8J6FBDG8RDyKFQsS/VZG9ygrnNgW6U8JSlrfGfe3DxYgbVoVwYV9Hbk63JQJFQ==",
|
||||
"type": "package",
|
||||
"path": "exceldatareader.dataset/3.8.0",
|
||||
"files": [
|
||||
".nupkg.metadata",
|
||||
".signature.p7s",
|
||||
"ExcelDataReader.png",
|
||||
"README.md",
|
||||
"exceldatareader.dataset.3.8.0.nupkg.sha512",
|
||||
"exceldatareader.dataset.nuspec",
|
||||
"lib/net462/ExcelDataReader.DataSet.dll",
|
||||
"lib/net462/ExcelDataReader.DataSet.pdb",
|
||||
"lib/net462/ExcelDataReader.DataSet.xml",
|
||||
"lib/net8.0/ExcelDataReader.DataSet.dll",
|
||||
"lib/net8.0/ExcelDataReader.DataSet.pdb",
|
||||
"lib/net8.0/ExcelDataReader.DataSet.xml",
|
||||
"lib/netstandard2.0/ExcelDataReader.DataSet.dll",
|
||||
"lib/netstandard2.0/ExcelDataReader.DataSet.pdb",
|
||||
"lib/netstandard2.0/ExcelDataReader.DataSet.xml",
|
||||
"lib/netstandard2.1/ExcelDataReader.DataSet.dll",
|
||||
"lib/netstandard2.1/ExcelDataReader.DataSet.pdb",
|
||||
"lib/netstandard2.1/ExcelDataReader.DataSet.xml"
|
||||
]
|
||||
},
|
||||
"Google.Protobuf/3.19.4": {
|
||||
"sha512": "fd07/ykL4O4FhqrZIELm5lmiyOHfdPg9+o+hWr6tcfRdS7tHXnImg/2wtogLzlW2eEmr0J7j6ZrZvaWOLiJbxQ==",
|
||||
"type": "package",
|
||||
|
|
@ -14075,8 +13996,6 @@
|
|||
"CoreAdmin >= 2.7.0",
|
||||
"EFCore.BulkExtensions.MySql >= 6.7.16",
|
||||
"EPPlus >= 6.1.3",
|
||||
"ExcelDataReader >= 3.8.0",
|
||||
"ExcelDataReader.DataSet >= 3.8.0",
|
||||
"Microsoft.AspNetCore.Authentication.JwtBearer >= 7.0.20",
|
||||
"Microsoft.AspNetCore.Mvc.NewtonsoftJson >= 7.0.3",
|
||||
"Microsoft.AspNetCore.Mvc.Versioning >= 5.0.0",
|
||||
|
|
@ -14170,14 +14089,6 @@
|
|||
"target": "Package",
|
||||
"version": "[6.1.3, )"
|
||||
},
|
||||
"ExcelDataReader": {
|
||||
"target": "Package",
|
||||
"version": "[3.8.0, )"
|
||||
},
|
||||
"ExcelDataReader.DataSet": {
|
||||
"target": "Package",
|
||||
"version": "[3.8.0, )"
|
||||
},
|
||||
"Microsoft.AspNetCore.Authentication.JwtBearer": {
|
||||
"target": "Package",
|
||||
"version": "[7.0.20, )"
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"version": 2,
|
||||
"dgSpecHash": "++tptrWNc3M=",
|
||||
"dgSpecHash": "XR3lYvVwNcQ=",
|
||||
"success": true,
|
||||
"projectFilePath": "/Users/suphonchaip/Develop/hrms/hrms-api-recruit/BMA.EHR.Recruit.csproj",
|
||||
"expectedPackageFiles": [
|
||||
|
|
@ -21,8 +21,6 @@
|
|||
"/Users/suphonchaip/.nuget/packages/epplus/6.1.3/epplus.6.1.3.nupkg.sha512",
|
||||
"/Users/suphonchaip/.nuget/packages/epplus.interfaces/6.1.1/epplus.interfaces.6.1.1.nupkg.sha512",
|
||||
"/Users/suphonchaip/.nuget/packages/epplus.system.drawing/6.1.1/epplus.system.drawing.6.1.1.nupkg.sha512",
|
||||
"/Users/suphonchaip/.nuget/packages/exceldatareader/3.8.0/exceldatareader.3.8.0.nupkg.sha512",
|
||||
"/Users/suphonchaip/.nuget/packages/exceldatareader.dataset/3.8.0/exceldatareader.dataset.3.8.0.nupkg.sha512",
|
||||
"/Users/suphonchaip/.nuget/packages/google.protobuf/3.19.4/google.protobuf.3.19.4.nupkg.sha512",
|
||||
"/Users/suphonchaip/.nuget/packages/humanizer.core/2.14.1/humanizer.core.2.14.1.nupkg.sha512",
|
||||
"/Users/suphonchaip/.nuget/packages/k4os.compression.lz4/1.2.6/k4os.compression.lz4.1.2.6.nupkg.sha512",
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue