Compare commits

..

21 commits
v1.0.8 ... dev

Author SHA1 Message Date
Suphonchai Phoonsawat
44c56c4a0a แก้ error insert score
All checks were successful
Build & Deploy on Dev / build (push) Successful in 45s
2026-05-19 17:37:42 +07:00
Suphonchai Phoonsawat
d019ed588b fix relation
All checks were successful
Build & Deploy on Dev / build (push) Successful in 41s
2026-05-19 17:23:36 +07:00
Suphonchai Phoonsawat
054ef81c63 update model and fix code
All checks were successful
Build & Deploy on Dev / build (push) Successful in 44s
2026-05-19 17:14:39 +07:00
Suphonchai Phoonsawat
9c353f40c6 fix fk
All checks were successful
Build & Deploy on Dev / build (push) Successful in 43s
2026-05-19 17:07:27 +07:00
Suphonchai Phoonsawat
cba16f25b9 fix scoreimport
All checks were successful
Build & Deploy on Dev / build (push) Successful in 46s
2026-05-19 17:02:53 +07:00
Suphonchai Phoonsawat
13a8e309e7 fix minio file
All checks were successful
Build & Deploy on Dev / build (push) Successful in 49s
2026-05-19 16:57:33 +07:00
Suphonchai Phoonsawat
e8681834f2 fix again
All checks were successful
Build & Deploy on Dev / build (push) Successful in 55s
2026-05-19 16:53:27 +07:00
Suphonchai Phoonsawat
e0adbb0b71 fix Score Import
All checks were successful
Build & Deploy on Dev / build (push) Successful in 49s
2026-05-19 16:47:12 +07:00
Suphonchai Phoonsawat
73b0db6b36 Merge branch 'develop' into working
All checks were successful
Build & Deploy on Dev / build (push) Successful in 44s
# Conflicts:
#	Services/ImportBackgroundService.cs
2026-05-19 16:35:59 +07:00
Suphonchai Phoonsawat
902faeb7f4 fix OOM 2026-05-19 16:34:03 +07:00
harid
eea7fbcfa1 fix Update FK ติด Error
All checks were successful
Build & Deploy on Dev / build (push) Successful in 44s
2026-05-19 13:40:50 +07:00
harid
4ea7c0010b fix ระบบแจ้ง Error #2497
All checks were successful
Build & Deploy on Dev / build (push) Successful in 51s
2026-05-18 17:48:51 +07:00
harid
e33448508e fix ระบบแจ้ง Error #2497
All checks were successful
Build & Deploy on Dev / build (push) Successful in 46s
2026-05-18 14:45:27 +07:00
harid
cf98121993 fix ระบบแจ้ง Error #2497
All checks were successful
Build & Deploy on Dev / build (push) Successful in 1m5s
2026-05-18 13:57:48 +07:00
Suphonchai Phoonsawat
11d308ab51 remove file
All checks were successful
Build & Deploy on Dev / build (push) Successful in 49s
2026-05-16 09:51:26 +07:00
Suphonchai Phoonsawat
1dab8652de Merge branch 'dev' into develop
# Conflicts:
#	obj/Debug/net7.0/BMA.EHR.Recruit.Service.AssemblyInfo.cs
#	obj/Debug/net7.0/BMA.EHR.Recruit.Service.AssemblyInfoInputs.cache
2026-05-16 09:36:17 +07:00
Suphonchai Phoonsawat
c77035dbb2 แก้ปัญหา token ถูกล้างไปก่อนที่จะส่ง notification 2026-05-15 21:53:40 +07:00
Suphonchai Phoonsawat
2b000cbd69 fix OOM Error
All checks were successful
Build & Deploy on Dev / build (push) Successful in 54s
2026-05-15 16:37:14 +07:00
Suphonchai Phoonsawat
9c2caa3f4a add send noti and bulk insert (not complete)
All checks were successful
Build & Deploy on Dev / build (push) Successful in 49s
2026-05-14 16:29:16 +07:00
Suphonchai Phoonsawat
7cb50f594b Merge branch 'dev' into develop
# Conflicts:
#	obj/Debug/net7.0/BMA.EHR.Recruit.Service.AssemblyInfo.cs
#	obj/Debug/net7.0/BMA.EHR.Recruit.Service.AssemblyInfoInputs.cache
2026-05-12 13:22:29 +07:00
Suphonchai Phoonsawat
17d48ebbf8 fix 2026-05-12 13:21:38 +07:00
19 changed files with 2370 additions and 382 deletions

View file

@ -1,9 +0,0 @@
<?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>

View file

@ -24,6 +24,8 @@
<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" />

View file

@ -377,6 +377,7 @@ 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)
@ -717,9 +718,11 @@ namespace BMA.EHR.Recruit.Controllers
var doc = await _minioService.UploadFileAsync(file);
var import_doc_id = doc.Id.ToString("D");
var fileContent = (await _minioService.DownloadFileAsync(doc.Id)).FileContent;
System.IO.File.WriteAllBytes(importFile, fileContent);
fileContent = null;
// 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 imported = new RecruitImport
@ -755,6 +758,7 @@ namespace BMA.EHR.Recruit.Controllers
ImportDocId = import_doc_id,
UserId = UserId,
FullName = FullName,
Token = token,
Request = req,
});
await _importJobQueue.EnqueueAsync(job);
@ -930,9 +934,11 @@ namespace BMA.EHR.Recruit.Controllers
var doc = await _minioService.UploadFileAsync(file);
var import_doc_id = doc.Id.ToString("D");
var fileContent = (await _minioService.DownloadFileAsync(doc.Id)).FileContent;
System.IO.File.WriteAllBytes(importFile, fileContent);
fileContent = null;
// 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);
}
// Enqueue background job
var job = _importJobTracker.CreateJob(new ImportJobInfo
@ -943,6 +949,7 @@ namespace BMA.EHR.Recruit.Controllers
ImportDocId = import_doc_id,
UserId = UserId,
FullName = FullName,
Token = token,
});
await _importJobQueue.EnqueueAsync(job);
@ -1013,6 +1020,7 @@ namespace BMA.EHR.Recruit.Controllers
ImportDocId = import_doc_id,
UserId = UserId,
FullName = FullName,
Token = token,
});
await _importJobQueue.EnqueueAsync(job);
@ -1082,6 +1090,7 @@ namespace BMA.EHR.Recruit.Controllers
RecruitImportId = id,
UserId = UserId,
FullName = FullName,
Token = token,
});
await _importJobQueue.EnqueueAsync(job);
@ -2001,6 +2010,7 @@ 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);
@ -2509,6 +2519,7 @@ 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)

View file

@ -20,6 +20,7 @@ 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; }

View file

@ -20,4 +20,9 @@ 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"]

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,64 @@
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);
}
}
}

View file

@ -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,9 +1550,7 @@ namespace BMA.EHR.Recruit.Migrations
{
b.HasOne("BMA.EHR.Recruit.Models.Documents.Document", "ImportFile")
.WithMany()
.HasForeignKey("ImportFileId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
.HasForeignKey("ImportFileId");
b.HasOne("BMA.EHR.Recruit.Models.Recruits.RecruitImport", "RecruitImport")
.WithOne("ScoreImport")

View file

@ -1,5 +1,6 @@
using Microsoft.EntityFrameworkCore;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace BMA.EHR.Recruit.Models.Recruits
{
@ -83,6 +84,9 @@ 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; }
}
}

View file

@ -7,7 +7,9 @@ namespace BMA.EHR.Recruit.Models.Recruits
{
public int Year { get; set; }
public Document ImportFile { get; set; } = new Document();
public Guid? ImportFileId { get; set; }
public Document ImportFile { get; set; }
public virtual List<RecruitScore> Scores { get; set; } = new List<RecruitScore>();

View file

@ -69,6 +69,7 @@ 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

View file

@ -36,6 +36,7 @@ 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; }
@ -44,9 +45,11 @@ 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;
}
@ -65,7 +68,23 @@ 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 _);
}
}
}
}

View file

@ -72,14 +72,13 @@ namespace BMA.EHR.Recruit.Services
{
var id = Guid.NewGuid();
file.CopyTo(ms);
var fileBytes = ms.ToArray();
System.IO.MemoryStream filestream = new System.IO.MemoryStream(fileBytes);
ms.Position = 0; // Reset stream position for reading
var request = new PutObjectRequest
{
BucketName = _bucketName,
Key = id.ToString("D"),
InputStream = filestream,
InputStream = ms,
ContentType = file.ContentType,
CannedACL = S3CannedACL.PublicRead
};

View file

@ -0,0 +1,59 @@
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);
}
}
}

View file

@ -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"
"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;"
},
"Jwt": {
"Key": "j7C9RO_p4nRtuwCH4z9Db_A_6We42tkD_p4lZtDrezc",

View file

@ -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"
"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;"
},
"Jwt": {
"Key": "j7C9RO_p4nRtuwCH4z9Db_A_6We42tkD_p4lZtDrezc",

View file

@ -289,6 +289,35 @@
"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": {
@ -5670,6 +5699,56 @@
"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",
@ -13996,6 +14075,8 @@
"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",
@ -14089,6 +14170,14 @@
"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, )"

View file

@ -1,6 +1,6 @@
{
"version": 2,
"dgSpecHash": "XR3lYvVwNcQ=",
"dgSpecHash": "++tptrWNc3M=",
"success": true,
"projectFilePath": "/Users/suphonchaip/Develop/hrms/hrms-api-recruit/BMA.EHR.Recruit.csproj",
"expectedPackageFiles": [
@ -21,6 +21,8 @@
"/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",