Compare commits
No commits in common. "dev" and "v1.0.7" have entirely different histories.
21 changed files with 399 additions and 2890 deletions
|
|
@ -1,11 +0,0 @@
|
||||||
{
|
|
||||||
"permissions": {
|
|
||||||
"allow": [
|
|
||||||
"Bash(dotnet build:*)",
|
|
||||||
"WebSearch",
|
|
||||||
"Bash(dotnet add:*)"
|
|
||||||
],
|
|
||||||
"deny": [],
|
|
||||||
"ask": []
|
|
||||||
}
|
|
||||||
}
|
|
||||||
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>
|
||||||
|
|
@ -22,10 +22,7 @@
|
||||||
<!-- <PackageReference Include="BMA.EHR.Core" Version="1.0.0" />
|
<!-- <PackageReference Include="BMA.EHR.Core" Version="1.0.0" />
|
||||||
<PackageReference Include="BMA.EHR.Extensions" Version="1.0.4" /> -->
|
<PackageReference Include="BMA.EHR.Extensions" Version="1.0.4" /> -->
|
||||||
<PackageReference Include="CoreAdmin" Version="2.7.0" />
|
<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="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.AspNetCore.Authentication.JwtBearer" Version="7.0.20" />
|
||||||
<PackageReference Include="Microsoft.IdentityModel.Protocols.OpenIdConnect" Version="7.1.2" />
|
<PackageReference Include="Microsoft.IdentityModel.Protocols.OpenIdConnect" Version="7.1.2" />
|
||||||
<PackageReference Include="Microsoft.IdentityModel.Protocols" Version="7.1.2" />
|
<PackageReference Include="Microsoft.IdentityModel.Protocols" Version="7.1.2" />
|
||||||
|
|
|
||||||
76
CLAUDE.md
76
CLAUDE.md
|
|
@ -1,76 +0,0 @@
|
||||||
# CLAUDE.md
|
|
||||||
|
|
||||||
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
|
||||||
|
|
||||||
## Build & Run
|
|
||||||
|
|
||||||
```bash
|
|
||||||
dotnet build BMA.EHR.Recruit.Service.sln
|
|
||||||
dotnet build BMA.EHR.Recruit.Service.sln -c Release
|
|
||||||
dotnet publish -c Release -o /app/publish /p:UseAppHost=false
|
|
||||||
```
|
|
||||||
|
|
||||||
No test projects exist in this solution.
|
|
||||||
|
|
||||||
## Architecture
|
|
||||||
|
|
||||||
**Stack:** ASP.NET Core 7.0 Web API / EF Core 7.0 / MySQL (Pomelo) / MinIO (S3) / Keycloak (JWT)
|
|
||||||
|
|
||||||
**Pattern:** Controllers → Services → EF Core DbContext (no repository layer for main data)
|
|
||||||
|
|
||||||
### Multiple DbContexts
|
|
||||||
Three separate MySQL databases, each with its own `DbContext`:
|
|
||||||
- `ApplicationDbContext` — Recruitment data (Recruits, Scores, Imports)
|
|
||||||
- `OrgDbContext` — Organization data
|
|
||||||
- `MetadataDbContext` — Metadata
|
|
||||||
|
|
||||||
All registered as `Transient` lifetime. Auto-migration runs on startup.
|
|
||||||
|
|
||||||
### Controllers
|
|
||||||
- `BaseController` provides standardized `Success()` / `Error()` response methods returning `ResponseObject` (Status, Message, Result)
|
|
||||||
- `RecruitController` is the sole business controller (route: `api/v{version}/recruit`)
|
|
||||||
- API versioning enabled via `Microsoft.AspNetCore.Mvc.Versioning`
|
|
||||||
|
|
||||||
### Background Import System
|
|
||||||
Excel file imports run asynchronously through a Channel-based queue:
|
|
||||||
- `ImportBackgroundService` (BackgroundService) — dequeues and processes jobs
|
|
||||||
- `ImportJobQueue` — bounded Channel (capacity 100)
|
|
||||||
- `ImportJobTracker` — in-memory ConcurrentDictionary tracking
|
|
||||||
|
|
||||||
Four import types: `CandidateFile`, `CandidateFileById`, `ScoreFile`, `ResultFile`
|
|
||||||
|
|
||||||
All imports use `EFCore.BulkExtensions.MySql` (v6.7.16) for bulk operations to handle 50,000+ rows without memory issues. Pattern:
|
|
||||||
1. Insert parent/history entities via `SaveChangesAsync` (small operations)
|
|
||||||
2. `ChangeTracker.Clear()` to release references
|
|
||||||
3. Collect entities into separate `List<T>` per table
|
|
||||||
4. `BulkInsertAsync` with `SetOutputIdentity = true` for parent entities
|
|
||||||
5. Assign generated Ids to child entities
|
|
||||||
6. `BulkInsertAsync` for each child entity table separately
|
|
||||||
7. Batch size: 500
|
|
||||||
|
|
||||||
### Entity Models
|
|
||||||
All entities inherit from `EntityBase` (Guid `Id` PK, audit fields: `CreatedAt`, `CreatedUserId`, `LastUpdatedAt`, etc.). Models are in `Models/` with subdirectories: `Recruits/`, `Documents/`, `HR/`, `MetaData/`, `Placement/`.
|
|
||||||
|
|
||||||
Key relationships use navigation properties without explicit FK properties (EF shadow properties). Configured via fluent API in `OnModelCreating`.
|
|
||||||
|
|
||||||
### External Services
|
|
||||||
- **Authentication:** Keycloak JWT Bearer (`hrmsbkk-id.case-collection.com/realms/hrms`)
|
|
||||||
- **File Storage:** MinIO via `MinIOService` (AWS S3 SDK)
|
|
||||||
- **Search/Logging:** Elasticsearch (NEST client)
|
|
||||||
- **Excel:** EPPlus for reading import files
|
|
||||||
|
|
||||||
## Key Files
|
|
||||||
|
|
||||||
- `Program.cs` — Service registration, middleware pipeline, auto-migration
|
|
||||||
- `Data/ApplicationDbContext.cs` — EF Core fluent API relationship configuration
|
|
||||||
- `Services/ImportBackgroundService.cs` — All bulk import logic (4 import methods)
|
|
||||||
- `Services/RecruitService.cs` — Core business logic
|
|
||||||
- `Controllers/BaseController.cs` — Standard response helpers
|
|
||||||
- `Responses/ResponseObject.cs` — Standard API response envelope
|
|
||||||
|
|
||||||
## Conventions
|
|
||||||
|
|
||||||
- Language: C# with nullable reference types enabled
|
|
||||||
- Naming: PascalCase properties, `_camelCase` parameters in service methods
|
|
||||||
- API responses: Always wrapped in `ResponseObject`
|
|
||||||
- Authorization: `[Authorize]` on controllers, user context from JWT claims
|
|
||||||
|
|
@ -377,7 +377,6 @@ namespace BMA.EHR.Recruit.Controllers
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var data = await _context.RecruitImports.AsQueryable()
|
var data = await _context.RecruitImports.AsQueryable()
|
||||||
.AsNoTracking()
|
|
||||||
.Include(x => x.RecruitImages)
|
.Include(x => x.RecruitImages)
|
||||||
.ThenInclude(x => x.Document)
|
.ThenInclude(x => x.Document)
|
||||||
.Include(x => x.RecruitDocuments)
|
.Include(x => x.RecruitDocuments)
|
||||||
|
|
@ -718,11 +717,9 @@ namespace BMA.EHR.Recruit.Controllers
|
||||||
var doc = await _minioService.UploadFileAsync(file);
|
var doc = await _minioService.UploadFileAsync(file);
|
||||||
var import_doc_id = doc.Id.ToString("D");
|
var import_doc_id = doc.Id.ToString("D");
|
||||||
|
|
||||||
// Write file to disk directly from IFormFile instead of downloading back from MinIO
|
var fileContent = (await _minioService.DownloadFileAsync(doc.Id)).FileContent;
|
||||||
using (var stream = new FileStream(importFile, FileMode.Create))
|
System.IO.File.WriteAllBytes(importFile, fileContent);
|
||||||
{
|
fileContent = null;
|
||||||
await file.CopyToAsync(stream);
|
|
||||||
}
|
|
||||||
|
|
||||||
// สร้างรอบการบรรจุ
|
// สร้างรอบการบรรจุ
|
||||||
var imported = new RecruitImport
|
var imported = new RecruitImport
|
||||||
|
|
@ -758,7 +755,6 @@ namespace BMA.EHR.Recruit.Controllers
|
||||||
ImportDocId = import_doc_id,
|
ImportDocId = import_doc_id,
|
||||||
UserId = UserId,
|
UserId = UserId,
|
||||||
FullName = FullName,
|
FullName = FullName,
|
||||||
Token = token,
|
|
||||||
Request = req,
|
Request = req,
|
||||||
});
|
});
|
||||||
await _importJobQueue.EnqueueAsync(job);
|
await _importJobQueue.EnqueueAsync(job);
|
||||||
|
|
@ -934,11 +930,9 @@ namespace BMA.EHR.Recruit.Controllers
|
||||||
var doc = await _minioService.UploadFileAsync(file);
|
var doc = await _minioService.UploadFileAsync(file);
|
||||||
var import_doc_id = doc.Id.ToString("D");
|
var import_doc_id = doc.Id.ToString("D");
|
||||||
|
|
||||||
// Write file to disk directly from IFormFile instead of downloading back from MinIO
|
var fileContent = (await _minioService.DownloadFileAsync(doc.Id)).FileContent;
|
||||||
using (var stream = new FileStream(importFile, FileMode.Create))
|
System.IO.File.WriteAllBytes(importFile, fileContent);
|
||||||
{
|
fileContent = null;
|
||||||
await file.CopyToAsync(stream);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Enqueue background job
|
// Enqueue background job
|
||||||
var job = _importJobTracker.CreateJob(new ImportJobInfo
|
var job = _importJobTracker.CreateJob(new ImportJobInfo
|
||||||
|
|
@ -949,7 +943,6 @@ namespace BMA.EHR.Recruit.Controllers
|
||||||
ImportDocId = import_doc_id,
|
ImportDocId = import_doc_id,
|
||||||
UserId = UserId,
|
UserId = UserId,
|
||||||
FullName = FullName,
|
FullName = FullName,
|
||||||
Token = token,
|
|
||||||
});
|
});
|
||||||
await _importJobQueue.EnqueueAsync(job);
|
await _importJobQueue.EnqueueAsync(job);
|
||||||
|
|
||||||
|
|
@ -1020,7 +1013,6 @@ namespace BMA.EHR.Recruit.Controllers
|
||||||
ImportDocId = import_doc_id,
|
ImportDocId = import_doc_id,
|
||||||
UserId = UserId,
|
UserId = UserId,
|
||||||
FullName = FullName,
|
FullName = FullName,
|
||||||
Token = token,
|
|
||||||
});
|
});
|
||||||
await _importJobQueue.EnqueueAsync(job);
|
await _importJobQueue.EnqueueAsync(job);
|
||||||
|
|
||||||
|
|
@ -1090,7 +1082,6 @@ namespace BMA.EHR.Recruit.Controllers
|
||||||
RecruitImportId = id,
|
RecruitImportId = id,
|
||||||
UserId = UserId,
|
UserId = UserId,
|
||||||
FullName = FullName,
|
FullName = FullName,
|
||||||
Token = token,
|
|
||||||
});
|
});
|
||||||
await _importJobQueue.EnqueueAsync(job);
|
await _importJobQueue.EnqueueAsync(job);
|
||||||
|
|
||||||
|
|
@ -2010,7 +2001,6 @@ namespace BMA.EHR.Recruit.Controllers
|
||||||
public async Task<ActionResult<ResponseObject>> ExportExamAsync(Guid id)
|
public async Task<ActionResult<ResponseObject>> ExportExamAsync(Guid id)
|
||||||
{
|
{
|
||||||
var data = await _context.RecruitImports.AsQueryable()
|
var data = await _context.RecruitImports.AsQueryable()
|
||||||
.AsNoTracking()
|
|
||||||
.Include(x => x.Recruits)
|
.Include(x => x.Recruits)
|
||||||
.FirstOrDefaultAsync(x => x.Id == id);
|
.FirstOrDefaultAsync(x => x.Id == id);
|
||||||
|
|
||||||
|
|
@ -2519,7 +2509,6 @@ namespace BMA.EHR.Recruit.Controllers
|
||||||
public async Task<IActionResult> GetCandidateNewListReportAsync(Guid id)
|
public async Task<IActionResult> GetCandidateNewListReportAsync(Guid id)
|
||||||
{
|
{
|
||||||
var data = await _context.Recruits.AsQueryable()
|
var data = await _context.Recruits.AsQueryable()
|
||||||
.AsNoTracking()
|
|
||||||
.Include(x => x.RecruitImport)
|
.Include(x => x.RecruitImport)
|
||||||
.Where(x => x.RecruitImport.Id == id)
|
.Where(x => x.RecruitImport.Id == id)
|
||||||
.OrderBy(x => x.ExamId)
|
.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.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.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<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; }
|
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
|
FROM base AS final
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
COPY --from=publish /app/publish .
|
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"]
|
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)
|
.HasColumnOrder(101)
|
||||||
.HasComment("User Id ที่สร้างข้อมูล");
|
.HasComment("User Id ที่สร้างข้อมูล");
|
||||||
|
|
||||||
b.Property<Guid?>("ImportFileId")
|
b.Property<Guid>("ImportFileId")
|
||||||
.HasColumnType("char(36)");
|
.HasColumnType("char(36)");
|
||||||
|
|
||||||
b.Property<string>("LastUpdateFullName")
|
b.Property<string>("LastUpdateFullName")
|
||||||
|
|
@ -1550,7 +1550,9 @@ namespace BMA.EHR.Recruit.Migrations
|
||||||
{
|
{
|
||||||
b.HasOne("BMA.EHR.Recruit.Models.Documents.Document", "ImportFile")
|
b.HasOne("BMA.EHR.Recruit.Models.Documents.Document", "ImportFile")
|
||||||
.WithMany()
|
.WithMany()
|
||||||
.HasForeignKey("ImportFileId");
|
.HasForeignKey("ImportFileId")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
b.HasOne("BMA.EHR.Recruit.Models.Recruits.RecruitImport", "RecruitImport")
|
b.HasOne("BMA.EHR.Recruit.Models.Recruits.RecruitImport", "RecruitImport")
|
||||||
.WithOne("ScoreImport")
|
.WithOne("ScoreImport")
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using System.ComponentModel.DataAnnotations;
|
using System.ComponentModel.DataAnnotations;
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
|
||||||
|
|
||||||
namespace BMA.EHR.Recruit.Models.Recruits
|
namespace BMA.EHR.Recruit.Models.Recruits
|
||||||
{
|
{
|
||||||
|
|
@ -84,9 +83,6 @@ namespace BMA.EHR.Recruit.Models.Recruits
|
||||||
[MaxLength(50), Comment("สถานะคัดกรองคุณสมบัติ")]
|
[MaxLength(50), Comment("สถานะคัดกรองคุณสมบัติ")]
|
||||||
public string ExamAttribute { get; set; } = string.Empty;
|
public string ExamAttribute { get; set; } = string.Empty;
|
||||||
|
|
||||||
[ForeignKey("ScoreImport")]
|
|
||||||
public Guid ScoreImportId { get; set; }
|
|
||||||
|
|
||||||
public ScoreImport ScoreImport { get; set; }
|
public ScoreImport ScoreImport { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,9 +7,7 @@ namespace BMA.EHR.Recruit.Models.Recruits
|
||||||
{
|
{
|
||||||
public int Year { get; set; }
|
public int Year { get; set; }
|
||||||
|
|
||||||
public Guid? ImportFileId { get; set; }
|
public Document ImportFile { get; set; } = new Document();
|
||||||
|
|
||||||
public Document ImportFile { get; set; }
|
|
||||||
|
|
||||||
public virtual List<RecruitScore> Scores { get; set; } = new List<RecruitScore>();
|
public virtual List<RecruitScore> Scores { get; set; } = new List<RecruitScore>();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -69,7 +69,6 @@ builder.Services.AddAuthorization();
|
||||||
// Register Services
|
// Register Services
|
||||||
builder.Services.AddTransient<RecruitService>();
|
builder.Services.AddTransient<RecruitService>();
|
||||||
builder.Services.AddTransient<MinIOService>();
|
builder.Services.AddTransient<MinIOService>();
|
||||||
builder.Services.AddTransient<NotificationService>();
|
|
||||||
builder.Services.AddTransient<PermissionRepository>();
|
builder.Services.AddTransient<PermissionRepository>();
|
||||||
builder.Services.AddSingleton<ImportJobQueue>();
|
builder.Services.AddSingleton<ImportJobQueue>();
|
||||||
builder.Services.AddSingleton<ImportJobTracker>();
|
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 ImportDocId { get; set; } = "";
|
||||||
public string? UserId { get; set; }
|
public string? UserId { get; set; }
|
||||||
public string? FullName { get; set; }
|
public string? FullName { get; set; }
|
||||||
public string? Token { get; set; }
|
|
||||||
|
|
||||||
// For CandidateFile
|
// For CandidateFile
|
||||||
public PostRecruitImportRequest? Request { get; set; }
|
public PostRecruitImportRequest? Request { get; set; }
|
||||||
|
|
@ -45,11 +44,9 @@ public class ImportJobInfo
|
||||||
public class ImportJobTracker
|
public class ImportJobTracker
|
||||||
{
|
{
|
||||||
private readonly ConcurrentDictionary<string, ImportJobInfo> _jobs = new();
|
private readonly ConcurrentDictionary<string, ImportJobInfo> _jobs = new();
|
||||||
private readonly TimeSpan _evictionAge = TimeSpan.FromHours(1);
|
|
||||||
|
|
||||||
public ImportJobInfo CreateJob(ImportJobInfo job)
|
public ImportJobInfo CreateJob(ImportJobInfo job)
|
||||||
{
|
{
|
||||||
EvictOldJobs();
|
|
||||||
_jobs[job.JobId] = job;
|
_jobs[job.JobId] = job;
|
||||||
return job;
|
return job;
|
||||||
}
|
}
|
||||||
|
|
@ -68,23 +65,7 @@ public class ImportJobTracker
|
||||||
if (errorMessage != null)
|
if (errorMessage != null)
|
||||||
job.ErrorMessage = errorMessage;
|
job.ErrorMessage = errorMessage;
|
||||||
if (status == ImportJobStatus.Completed || status == ImportJobStatus.Failed)
|
if (status == ImportJobStatus.Completed || status == ImportJobStatus.Failed)
|
||||||
{
|
|
||||||
job.CompletedAt = DateTime.Now;
|
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();
|
var id = Guid.NewGuid();
|
||||||
file.CopyTo(ms);
|
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
|
var request = new PutObjectRequest
|
||||||
{
|
{
|
||||||
BucketName = _bucketName,
|
BucketName = _bucketName,
|
||||||
Key = id.ToString("D"),
|
Key = id.ToString("D"),
|
||||||
InputStream = ms,
|
InputStream = filestream,
|
||||||
ContentType = file.ContentType,
|
ContentType = file.ContentType,
|
||||||
CannedACL = S3CannedACL.PublicRead
|
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",
|
"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",
|
"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",
|
"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": {
|
"Jwt": {
|
||||||
"Key": "j7C9RO_p4nRtuwCH4z9Db_A_6We42tkD_p4lZtDrezc",
|
"Key": "j7C9RO_p4nRtuwCH4z9Db_A_6We42tkD_p4lZtDrezc",
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@
|
||||||
"MongoConnection": "mongodb://admin:adminVM123@127.0.0.1:27017",
|
"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",
|
"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",
|
"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": {
|
"Jwt": {
|
||||||
"Key": "j7C9RO_p4nRtuwCH4z9Db_A_6We42tkD_p4lZtDrezc",
|
"Key": "j7C9RO_p4nRtuwCH4z9Db_A_6We42tkD_p4lZtDrezc",
|
||||||
|
|
|
||||||
|
|
@ -155,43 +155,6 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"dotMorten.Microsoft.SqlServer.Types/1.4.0": {
|
|
||||||
"type": "package",
|
|
||||||
"dependencies": {
|
|
||||||
"System.Data.SqlClient": "4.8.3",
|
|
||||||
"System.Memory": "4.5.4"
|
|
||||||
},
|
|
||||||
"compile": {
|
|
||||||
"lib/netstandard2.0/Microsoft.SqlServer.Types.dll": {
|
|
||||||
"related": ".pdb;.xml"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"runtime": {
|
|
||||||
"lib/netstandard2.0/Microsoft.SqlServer.Types.dll": {
|
|
||||||
"related": ".pdb;.xml"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"EFCore.BulkExtensions.MySql/6.7.16": {
|
|
||||||
"type": "package",
|
|
||||||
"dependencies": {
|
|
||||||
"EntityFrameworkCore.SqlServer.HierarchyId": "3.0.1",
|
|
||||||
"MedallionTopologicalSort": "1.0.0",
|
|
||||||
"Microsoft.EntityFrameworkCore.SqlServer.NetTopologySuite": "6.0.21",
|
|
||||||
"Pomelo.EntityFrameworkCore.MySql": "6.0.2",
|
|
||||||
"StrongNamer": "0.2.5"
|
|
||||||
},
|
|
||||||
"compile": {
|
|
||||||
"lib/net6.0/EFCore.BulkExtensions.MySql.dll": {
|
|
||||||
"related": ".pdb;.xml"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"runtime": {
|
|
||||||
"lib/net6.0/EFCore.BulkExtensions.MySql.dll": {
|
|
||||||
"related": ".pdb;.xml"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"Elasticsearch.Net/7.17.5": {
|
"Elasticsearch.Net/7.17.5": {
|
||||||
"type": "package",
|
"type": "package",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|
@ -210,42 +173,6 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"EntityFrameworkCore.SqlServer.HierarchyId/3.0.1": {
|
|
||||||
"type": "package",
|
|
||||||
"dependencies": {
|
|
||||||
"EntityFrameworkCore.SqlServer.HierarchyId.Abstractions": "3.0.1",
|
|
||||||
"Microsoft.EntityFrameworkCore.SqlServer": "6.0.1"
|
|
||||||
},
|
|
||||||
"compile": {
|
|
||||||
"lib/net6.0/EntityFrameworkCore.SqlServer.HierarchyId.dll": {
|
|
||||||
"related": ".xml"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"runtime": {
|
|
||||||
"lib/net6.0/EntityFrameworkCore.SqlServer.HierarchyId.dll": {
|
|
||||||
"related": ".xml"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"build": {
|
|
||||||
"build/net6.0/_._": {}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"EntityFrameworkCore.SqlServer.HierarchyId.Abstractions/3.0.1": {
|
|
||||||
"type": "package",
|
|
||||||
"dependencies": {
|
|
||||||
"dotMorten.Microsoft.SqlServer.Types": "1.4.0"
|
|
||||||
},
|
|
||||||
"compile": {
|
|
||||||
"lib/netstandard2.0/EntityFrameworkCore.SqlServer.HierarchyId.Abstractions.dll": {
|
|
||||||
"related": ".xml"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"runtime": {
|
|
||||||
"lib/netstandard2.0/EntityFrameworkCore.SqlServer.HierarchyId.Abstractions.dll": {
|
|
||||||
"related": ".xml"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"EPPlus/6.1.3": {
|
"EPPlus/6.1.3": {
|
||||||
"type": "package",
|
"type": "package",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|
@ -289,35 +216,6 @@
|
||||||
"lib/net7.0/EPPlus.System.Drawing.dll": {}
|
"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": {
|
"Google.Protobuf/3.19.4": {
|
||||||
"type": "package",
|
"type": "package",
|
||||||
"compile": {
|
"compile": {
|
||||||
|
|
@ -406,19 +304,6 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"MedallionTopologicalSort/1.0.0": {
|
|
||||||
"type": "package",
|
|
||||||
"compile": {
|
|
||||||
"lib/netstandard2.0/MedallionTopologicalSort.dll": {
|
|
||||||
"related": ".xml"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"runtime": {
|
|
||||||
"lib/netstandard2.0/MedallionTopologicalSort.dll": {
|
|
||||||
"related": ".xml"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"Microsoft.AspNetCore.Antiforgery/2.2.0": {
|
"Microsoft.AspNetCore.Antiforgery/2.2.0": {
|
||||||
"type": "package",
|
"type": "package",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|
@ -1697,27 +1582,6 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"Microsoft.EntityFrameworkCore.SqlServer.NetTopologySuite/6.0.21": {
|
|
||||||
"type": "package",
|
|
||||||
"dependencies": {
|
|
||||||
"Microsoft.EntityFrameworkCore.SqlServer": "6.0.21",
|
|
||||||
"NetTopologySuite": "2.3.0",
|
|
||||||
"NetTopologySuite.IO.SqlServerBytes": "2.0.0"
|
|
||||||
},
|
|
||||||
"compile": {
|
|
||||||
"lib/net6.0/Microsoft.EntityFrameworkCore.SqlServer.NetTopologySuite.dll": {
|
|
||||||
"related": ".xml"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"runtime": {
|
|
||||||
"lib/net6.0/Microsoft.EntityFrameworkCore.SqlServer.NetTopologySuite.dll": {
|
|
||||||
"related": ".xml"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"build": {
|
|
||||||
"build/net6.0/_._": {}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"Microsoft.EntityFrameworkCore.Tools/7.0.3": {
|
"Microsoft.EntityFrameworkCore.Tools/7.0.3": {
|
||||||
"type": "package",
|
"type": "package",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|
@ -2763,38 +2627,6 @@
|
||||||
"System.Xml.XDocument": "4.3.0"
|
"System.Xml.XDocument": "4.3.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"NetTopologySuite/2.3.0": {
|
|
||||||
"type": "package",
|
|
||||||
"dependencies": {
|
|
||||||
"System.Memory": "4.5.3"
|
|
||||||
},
|
|
||||||
"compile": {
|
|
||||||
"lib/netstandard2.0/NetTopologySuite.dll": {
|
|
||||||
"related": ".xml"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"runtime": {
|
|
||||||
"lib/netstandard2.0/NetTopologySuite.dll": {
|
|
||||||
"related": ".xml"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"NetTopologySuite.IO.SqlServerBytes/2.0.0": {
|
|
||||||
"type": "package",
|
|
||||||
"dependencies": {
|
|
||||||
"NetTopologySuite": "[2.0.0, 3.0.0-A)"
|
|
||||||
},
|
|
||||||
"compile": {
|
|
||||||
"lib/netstandard2.0/NetTopologySuite.IO.SqlServerBytes.dll": {
|
|
||||||
"related": ".xml"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"runtime": {
|
|
||||||
"lib/netstandard2.0/NetTopologySuite.IO.SqlServerBytes.dll": {
|
|
||||||
"related": ".xml"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"Newtonsoft.Json/13.0.3": {
|
"Newtonsoft.Json/13.0.3": {
|
||||||
"type": "package",
|
"type": "package",
|
||||||
"compile": {
|
"compile": {
|
||||||
|
|
@ -3504,12 +3336,6 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"StrongNamer/0.2.5": {
|
|
||||||
"type": "package",
|
|
||||||
"build": {
|
|
||||||
"build/_._": {}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"Swashbuckle.AspNetCore/6.5.0": {
|
"Swashbuckle.AspNetCore/6.5.0": {
|
||||||
"type": "package",
|
"type": "package",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|
@ -5551,38 +5377,6 @@
|
||||||
"lib/netstandard2.1/DnsClient.xml"
|
"lib/netstandard2.1/DnsClient.xml"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"dotMorten.Microsoft.SqlServer.Types/1.4.0": {
|
|
||||||
"sha512": "MYxVbuBguObk8QFNTuBZ+ZEC/m1zbvG774FbFvwiDZjc0RYq/co27THrHN5Dyd52ie0R5bt2uxSZj4tIb3lYFg==",
|
|
||||||
"type": "package",
|
|
||||||
"path": "dotmorten.microsoft.sqlserver.types/1.4.0",
|
|
||||||
"files": [
|
|
||||||
".nupkg.metadata",
|
|
||||||
".signature.p7s",
|
|
||||||
"README.md",
|
|
||||||
"dotmorten.microsoft.sqlserver.types.1.4.0.nupkg.sha512",
|
|
||||||
"dotmorten.microsoft.sqlserver.types.nuspec",
|
|
||||||
"lib/netstandard2.0/Microsoft.SqlServer.Types.dll",
|
|
||||||
"lib/netstandard2.0/Microsoft.SqlServer.Types.pdb",
|
|
||||||
"lib/netstandard2.0/Microsoft.SqlServer.Types.xml"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"EFCore.BulkExtensions.MySql/6.7.16": {
|
|
||||||
"sha512": "XJbeYxAKeRrI/gVXw08Nx9ZJiP2aRDyqJgW7GRTmxIUUVyp8hgVqasLUaBh0LA6PmtQr+eCg8LzyUYvSF4U9hA==",
|
|
||||||
"type": "package",
|
|
||||||
"path": "efcore.bulkextensions.mysql/6.7.16",
|
|
||||||
"files": [
|
|
||||||
".nupkg.metadata",
|
|
||||||
".signature.p7s",
|
|
||||||
"EFCoreBulk.png",
|
|
||||||
"LICENSE.txt",
|
|
||||||
"README.md",
|
|
||||||
"efcore.bulkextensions.mysql.6.7.16.nupkg.sha512",
|
|
||||||
"efcore.bulkextensions.mysql.nuspec",
|
|
||||||
"lib/net6.0/EFCore.BulkExtensions.MySql.dll",
|
|
||||||
"lib/net6.0/EFCore.BulkExtensions.MySql.pdb",
|
|
||||||
"lib/net6.0/EFCore.BulkExtensions.MySql.xml"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"Elasticsearch.Net/7.17.5": {
|
"Elasticsearch.Net/7.17.5": {
|
||||||
"sha512": "orChsQi1Ceho/NyIylNOn6y4vuGcsbCfMZnCueNN0fzqYEGQmQdPfcVmsR5+3fwpXTgxCdjTUVmqOwvHpCSB+Q==",
|
"sha512": "orChsQi1Ceho/NyIylNOn6y4vuGcsbCfMZnCueNN0fzqYEGQmQdPfcVmsR5+3fwpXTgxCdjTUVmqOwvHpCSB+Q==",
|
||||||
"type": "package",
|
"type": "package",
|
||||||
|
|
@ -5605,33 +5399,6 @@
|
||||||
"nuget-icon.png"
|
"nuget-icon.png"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"EntityFrameworkCore.SqlServer.HierarchyId/3.0.1": {
|
|
||||||
"sha512": "NDN8PwDIyuWfOR6nV0muaCEvCDuAFYPEtKOku+/TIzOWMmvPNqqLF0WF0BQpk4cVuvQ2fr5/9F7aZk4DkVTq4g==",
|
|
||||||
"type": "package",
|
|
||||||
"path": "entityframeworkcore.sqlserver.hierarchyid/3.0.1",
|
|
||||||
"files": [
|
|
||||||
".nupkg.metadata",
|
|
||||||
".signature.p7s",
|
|
||||||
"build/net6.0/EntityFrameworkCore.SqlServer.HierarchyId.targets",
|
|
||||||
"entityframeworkcore.sqlserver.hierarchyid.3.0.1.nupkg.sha512",
|
|
||||||
"entityframeworkcore.sqlserver.hierarchyid.nuspec",
|
|
||||||
"lib/net6.0/EntityFrameworkCore.SqlServer.HierarchyId.dll",
|
|
||||||
"lib/net6.0/EntityFrameworkCore.SqlServer.HierarchyId.xml"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"EntityFrameworkCore.SqlServer.HierarchyId.Abstractions/3.0.1": {
|
|
||||||
"sha512": "x0Y3QtTLd1oyQMHTpXmUnuXabAs44kZBlP0suVQjlreF76e55x2D9YDiXRwUekvtI+X+b0NLkYfsnAqf9W/58w==",
|
|
||||||
"type": "package",
|
|
||||||
"path": "entityframeworkcore.sqlserver.hierarchyid.abstractions/3.0.1",
|
|
||||||
"files": [
|
|
||||||
".nupkg.metadata",
|
|
||||||
".signature.p7s",
|
|
||||||
"entityframeworkcore.sqlserver.hierarchyid.abstractions.3.0.1.nupkg.sha512",
|
|
||||||
"entityframeworkcore.sqlserver.hierarchyid.abstractions.nuspec",
|
|
||||||
"lib/netstandard2.0/EntityFrameworkCore.SqlServer.HierarchyId.Abstractions.dll",
|
|
||||||
"lib/netstandard2.0/EntityFrameworkCore.SqlServer.HierarchyId.Abstractions.xml"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"EPPlus/6.1.3": {
|
"EPPlus/6.1.3": {
|
||||||
"sha512": "1NEgW7wMxHWz7k3hN6D7PPkCCKR24LK86EIIEwfKrBy+yyWQM/fsCrngt+DPAjVgGLOThVmXInSFJqD15X7OCQ==",
|
"sha512": "1NEgW7wMxHWz7k3hN6D7PPkCCKR24LK86EIIEwfKrBy+yyWQM/fsCrngt+DPAjVgGLOThVmXInSFJqD15X7OCQ==",
|
||||||
"type": "package",
|
"type": "package",
|
||||||
|
|
@ -5699,56 +5466,6 @@
|
||||||
"readme.md"
|
"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": {
|
"Google.Protobuf/3.19.4": {
|
||||||
"sha512": "fd07/ykL4O4FhqrZIELm5lmiyOHfdPg9+o+hWr6tcfRdS7tHXnImg/2wtogLzlW2eEmr0J7j6ZrZvaWOLiJbxQ==",
|
"sha512": "fd07/ykL4O4FhqrZIELm5lmiyOHfdPg9+o+hWr6tcfRdS7tHXnImg/2wtogLzlW2eEmr0J7j6ZrZvaWOLiJbxQ==",
|
||||||
"type": "package",
|
"type": "package",
|
||||||
|
|
@ -5869,21 +5586,6 @@
|
||||||
"litedb.nuspec"
|
"litedb.nuspec"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"MedallionTopologicalSort/1.0.0": {
|
|
||||||
"sha512": "dcAqM8TcyZQ/T466CvqNMUUn/G0FQE+4R7l62ngXH7hLFP9yA7yoP/ySsLgiXx3pGUQC3J+cUvXmJOOR/eC+oQ==",
|
|
||||||
"type": "package",
|
|
||||||
"path": "medalliontopologicalsort/1.0.0",
|
|
||||||
"files": [
|
|
||||||
".nupkg.metadata",
|
|
||||||
".signature.p7s",
|
|
||||||
"lib/net45/MedallionTopologicalSort.dll",
|
|
||||||
"lib/net45/MedallionTopologicalSort.xml",
|
|
||||||
"lib/netstandard2.0/MedallionTopologicalSort.dll",
|
|
||||||
"lib/netstandard2.0/MedallionTopologicalSort.xml",
|
|
||||||
"medalliontopologicalsort.1.0.0.nupkg.sha512",
|
|
||||||
"medalliontopologicalsort.nuspec"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"Microsoft.AspNetCore.Antiforgery/2.2.0": {
|
"Microsoft.AspNetCore.Antiforgery/2.2.0": {
|
||||||
"sha512": "fVQsSXNZz38Ysx8iKwwqfOLHhLrAeKEMBS5Ia3Lh7BJjOC2vPV28/yk08AovOMsB3SNQPGnE7bv+lsIBTmAkvw==",
|
"sha512": "fVQsSXNZz38Ysx8iKwwqfOLHhLrAeKEMBS5Ia3Lh7BJjOC2vPV28/yk08AovOMsB3SNQPGnE7bv+lsIBTmAkvw==",
|
||||||
"type": "package",
|
"type": "package",
|
||||||
|
|
@ -6980,21 +6682,6 @@
|
||||||
"microsoft.entityframeworkcore.sqlserver.nuspec"
|
"microsoft.entityframeworkcore.sqlserver.nuspec"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"Microsoft.EntityFrameworkCore.SqlServer.NetTopologySuite/6.0.21": {
|
|
||||||
"sha512": "D6c+WWg6GIcpuHKxHVr6hJ5RFVfwPlgK/PQ0vV+z7f8haRY7l3tlK/xhJeYZvXCpPluyijM4KRRPi/qbUFxROA==",
|
|
||||||
"type": "package",
|
|
||||||
"path": "microsoft.entityframeworkcore.sqlserver.nettopologysuite/6.0.21",
|
|
||||||
"files": [
|
|
||||||
".nupkg.metadata",
|
|
||||||
".signature.p7s",
|
|
||||||
"Icon.png",
|
|
||||||
"build/net6.0/Microsoft.EntityFrameworkCore.SqlServer.NetTopologySuite.targets",
|
|
||||||
"lib/net6.0/Microsoft.EntityFrameworkCore.SqlServer.NetTopologySuite.dll",
|
|
||||||
"lib/net6.0/Microsoft.EntityFrameworkCore.SqlServer.NetTopologySuite.xml",
|
|
||||||
"microsoft.entityframeworkcore.sqlserver.nettopologysuite.6.0.21.nupkg.sha512",
|
|
||||||
"microsoft.entityframeworkcore.sqlserver.nettopologysuite.nuspec"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"Microsoft.EntityFrameworkCore.Tools/7.0.3": {
|
"Microsoft.EntityFrameworkCore.Tools/7.0.3": {
|
||||||
"sha512": "yHFlYPZS3Jx7JMCQnGKfJzv95rJWVcmcUn/OW5cbCyWgQk81JJpTZ9Q6kkvwquYjFRfvYHBGuXNIYhAJokOBTQ==",
|
"sha512": "yHFlYPZS3Jx7JMCQnGKfJzv95rJWVcmcUn/OW5cbCyWgQk81JJpTZ9Q6kkvwquYjFRfvYHBGuXNIYhAJokOBTQ==",
|
||||||
"type": "package",
|
"type": "package",
|
||||||
|
|
@ -8625,33 +8312,6 @@
|
||||||
"netstandard.library.nuspec"
|
"netstandard.library.nuspec"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"NetTopologySuite/2.3.0": {
|
|
||||||
"sha512": "Y+YOvA5um+75Wm9NKE+EhUNCvLYWiPhPW5Q5eBNi6kVNbxsX60/nvIJtve5iRcbrAl38W9h2w2yBjU81cjDO5g==",
|
|
||||||
"type": "package",
|
|
||||||
"path": "nettopologysuite/2.3.0",
|
|
||||||
"files": [
|
|
||||||
".nupkg.metadata",
|
|
||||||
".signature.p7s",
|
|
||||||
"icon.png",
|
|
||||||
"lib/netstandard2.0/NetTopologySuite.dll",
|
|
||||||
"lib/netstandard2.0/NetTopologySuite.xml",
|
|
||||||
"nettopologysuite.2.3.0.nupkg.sha512",
|
|
||||||
"nettopologysuite.nuspec"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"NetTopologySuite.IO.SqlServerBytes/2.0.0": {
|
|
||||||
"sha512": "TuyMB0VSlRJx86UrWeQ+SGgOMudvhIL1qJJdWJw78nWsXIzKRP4ooQAhhhCCH7n8q1lvd0/NW3ByaLlHxxNSPQ==",
|
|
||||||
"type": "package",
|
|
||||||
"path": "nettopologysuite.io.sqlserverbytes/2.0.0",
|
|
||||||
"files": [
|
|
||||||
".nupkg.metadata",
|
|
||||||
".signature.p7s",
|
|
||||||
"lib/netstandard2.0/NetTopologySuite.IO.SqlServerBytes.dll",
|
|
||||||
"lib/netstandard2.0/NetTopologySuite.IO.SqlServerBytes.xml",
|
|
||||||
"nettopologysuite.io.sqlserverbytes.2.0.0.nupkg.sha512",
|
|
||||||
"nettopologysuite.io.sqlserverbytes.nuspec"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"Newtonsoft.Json/13.0.3": {
|
"Newtonsoft.Json/13.0.3": {
|
||||||
"sha512": "HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ==",
|
"sha512": "HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ==",
|
||||||
"type": "package",
|
"type": "package",
|
||||||
|
|
@ -9490,29 +9150,6 @@
|
||||||
"snappier.nuspec"
|
"snappier.nuspec"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"StrongNamer/0.2.5": {
|
|
||||||
"sha512": "1IWl8gYnsTC6NXHz63iDpXL8r0y5x0M/Cnq/Ju5uM17gTOQYSeclMkgQsvmGglJEqAwVxayY1sIUR3bb2MAy5Q==",
|
|
||||||
"type": "package",
|
|
||||||
"path": "strongnamer/0.2.5",
|
|
||||||
"files": [
|
|
||||||
".nupkg.metadata",
|
|
||||||
".signature.p7s",
|
|
||||||
"build/SharedKey.snk",
|
|
||||||
"build/StrongNamer.targets",
|
|
||||||
"build/net461/Mono.Cecil.Mdb.dll",
|
|
||||||
"build/net461/Mono.Cecil.Pdb.dll",
|
|
||||||
"build/net461/Mono.Cecil.Rocks.dll",
|
|
||||||
"build/net461/Mono.Cecil.dll",
|
|
||||||
"build/net461/StrongNamer.dll",
|
|
||||||
"build/netcoreapp2.1/Mono.Cecil.Mdb.dll",
|
|
||||||
"build/netcoreapp2.1/Mono.Cecil.Pdb.dll",
|
|
||||||
"build/netcoreapp2.1/Mono.Cecil.Rocks.dll",
|
|
||||||
"build/netcoreapp2.1/Mono.Cecil.dll",
|
|
||||||
"build/netcoreapp2.1/StrongNamer.dll",
|
|
||||||
"strongnamer.0.2.5.nupkg.sha512",
|
|
||||||
"strongnamer.nuspec"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"Swashbuckle.AspNetCore/6.5.0": {
|
"Swashbuckle.AspNetCore/6.5.0": {
|
||||||
"sha512": "FK05XokgjgwlCI6wCT+D4/abtQkL1X1/B9Oas6uIwHFmYrIO9WUD5aLC9IzMs9GnHfUXOtXZ2S43gN1mhs5+aA==",
|
"sha512": "FK05XokgjgwlCI6wCT+D4/abtQkL1X1/B9Oas6uIwHFmYrIO9WUD5aLC9IzMs9GnHfUXOtXZ2S43gN1mhs5+aA==",
|
||||||
"type": "package",
|
"type": "package",
|
||||||
|
|
@ -14073,10 +13710,7 @@
|
||||||
"net7.0": [
|
"net7.0": [
|
||||||
"AWSSDK.S3 >= 3.7.103.35",
|
"AWSSDK.S3 >= 3.7.103.35",
|
||||||
"CoreAdmin >= 2.7.0",
|
"CoreAdmin >= 2.7.0",
|
||||||
"EFCore.BulkExtensions.MySql >= 6.7.16",
|
|
||||||
"EPPlus >= 6.1.3",
|
"EPPlus >= 6.1.3",
|
||||||
"ExcelDataReader >= 3.8.0",
|
|
||||||
"ExcelDataReader.DataSet >= 3.8.0",
|
|
||||||
"Microsoft.AspNetCore.Authentication.JwtBearer >= 7.0.20",
|
"Microsoft.AspNetCore.Authentication.JwtBearer >= 7.0.20",
|
||||||
"Microsoft.AspNetCore.Mvc.NewtonsoftJson >= 7.0.3",
|
"Microsoft.AspNetCore.Mvc.NewtonsoftJson >= 7.0.3",
|
||||||
"Microsoft.AspNetCore.Mvc.Versioning >= 5.0.0",
|
"Microsoft.AspNetCore.Mvc.Versioning >= 5.0.0",
|
||||||
|
|
@ -14162,22 +13796,10 @@
|
||||||
"target": "Package",
|
"target": "Package",
|
||||||
"version": "[2.7.0, )"
|
"version": "[2.7.0, )"
|
||||||
},
|
},
|
||||||
"EFCore.BulkExtensions.MySql": {
|
|
||||||
"target": "Package",
|
|
||||||
"version": "[6.7.16, )"
|
|
||||||
},
|
|
||||||
"EPPlus": {
|
"EPPlus": {
|
||||||
"target": "Package",
|
"target": "Package",
|
||||||
"version": "[6.1.3, )"
|
"version": "[6.1.3, )"
|
||||||
},
|
},
|
||||||
"ExcelDataReader": {
|
|
||||||
"target": "Package",
|
|
||||||
"version": "[3.8.0, )"
|
|
||||||
},
|
|
||||||
"ExcelDataReader.DataSet": {
|
|
||||||
"target": "Package",
|
|
||||||
"version": "[3.8.0, )"
|
|
||||||
},
|
|
||||||
"Microsoft.AspNetCore.Authentication.JwtBearer": {
|
"Microsoft.AspNetCore.Authentication.JwtBearer": {
|
||||||
"target": "Package",
|
"target": "Package",
|
||||||
"version": "[7.0.20, )"
|
"version": "[7.0.20, )"
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"version": 2,
|
"version": 2,
|
||||||
"dgSpecHash": "++tptrWNc3M=",
|
"dgSpecHash": "D0RTCj18huw=",
|
||||||
"success": true,
|
"success": true,
|
||||||
"projectFilePath": "/Users/suphonchaip/Develop/hrms/hrms-api-recruit/BMA.EHR.Recruit.csproj",
|
"projectFilePath": "/Users/suphonchaip/Develop/hrms/hrms-api-recruit/BMA.EHR.Recruit.csproj",
|
||||||
"expectedPackageFiles": [
|
"expectedPackageFiles": [
|
||||||
|
|
@ -13,23 +13,16 @@
|
||||||
"/Users/suphonchaip/.nuget/packages/coreadmin/2.7.0/coreadmin.2.7.0.nupkg.sha512",
|
"/Users/suphonchaip/.nuget/packages/coreadmin/2.7.0/coreadmin.2.7.0.nupkg.sha512",
|
||||||
"/Users/suphonchaip/.nuget/packages/dapper/2.0.123/dapper.2.0.123.nupkg.sha512",
|
"/Users/suphonchaip/.nuget/packages/dapper/2.0.123/dapper.2.0.123.nupkg.sha512",
|
||||||
"/Users/suphonchaip/.nuget/packages/dnsclient/1.6.1/dnsclient.1.6.1.nupkg.sha512",
|
"/Users/suphonchaip/.nuget/packages/dnsclient/1.6.1/dnsclient.1.6.1.nupkg.sha512",
|
||||||
"/Users/suphonchaip/.nuget/packages/dotmorten.microsoft.sqlserver.types/1.4.0/dotmorten.microsoft.sqlserver.types.1.4.0.nupkg.sha512",
|
|
||||||
"/Users/suphonchaip/.nuget/packages/efcore.bulkextensions.mysql/6.7.16/efcore.bulkextensions.mysql.6.7.16.nupkg.sha512",
|
|
||||||
"/Users/suphonchaip/.nuget/packages/elasticsearch.net/7.17.5/elasticsearch.net.7.17.5.nupkg.sha512",
|
"/Users/suphonchaip/.nuget/packages/elasticsearch.net/7.17.5/elasticsearch.net.7.17.5.nupkg.sha512",
|
||||||
"/Users/suphonchaip/.nuget/packages/entityframeworkcore.sqlserver.hierarchyid/3.0.1/entityframeworkcore.sqlserver.hierarchyid.3.0.1.nupkg.sha512",
|
|
||||||
"/Users/suphonchaip/.nuget/packages/entityframeworkcore.sqlserver.hierarchyid.abstractions/3.0.1/entityframeworkcore.sqlserver.hierarchyid.abstractions.3.0.1.nupkg.sha512",
|
|
||||||
"/Users/suphonchaip/.nuget/packages/epplus/6.1.3/epplus.6.1.3.nupkg.sha512",
|
"/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.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/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/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/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",
|
"/Users/suphonchaip/.nuget/packages/k4os.compression.lz4/1.2.6/k4os.compression.lz4.1.2.6.nupkg.sha512",
|
||||||
"/Users/suphonchaip/.nuget/packages/k4os.compression.lz4.streams/1.2.6/k4os.compression.lz4.streams.1.2.6.nupkg.sha512",
|
"/Users/suphonchaip/.nuget/packages/k4os.compression.lz4.streams/1.2.6/k4os.compression.lz4.streams.1.2.6.nupkg.sha512",
|
||||||
"/Users/suphonchaip/.nuget/packages/k4os.hash.xxhash/1.0.6/k4os.hash.xxhash.1.0.6.nupkg.sha512",
|
"/Users/suphonchaip/.nuget/packages/k4os.hash.xxhash/1.0.6/k4os.hash.xxhash.1.0.6.nupkg.sha512",
|
||||||
"/Users/suphonchaip/.nuget/packages/litedb/5.0.11/litedb.5.0.11.nupkg.sha512",
|
"/Users/suphonchaip/.nuget/packages/litedb/5.0.11/litedb.5.0.11.nupkg.sha512",
|
||||||
"/Users/suphonchaip/.nuget/packages/medalliontopologicalsort/1.0.0/medalliontopologicalsort.1.0.0.nupkg.sha512",
|
|
||||||
"/Users/suphonchaip/.nuget/packages/microsoft.aspnetcore.antiforgery/2.2.0/microsoft.aspnetcore.antiforgery.2.2.0.nupkg.sha512",
|
"/Users/suphonchaip/.nuget/packages/microsoft.aspnetcore.antiforgery/2.2.0/microsoft.aspnetcore.antiforgery.2.2.0.nupkg.sha512",
|
||||||
"/Users/suphonchaip/.nuget/packages/microsoft.aspnetcore.authentication.abstractions/2.2.0/microsoft.aspnetcore.authentication.abstractions.2.2.0.nupkg.sha512",
|
"/Users/suphonchaip/.nuget/packages/microsoft.aspnetcore.authentication.abstractions/2.2.0/microsoft.aspnetcore.authentication.abstractions.2.2.0.nupkg.sha512",
|
||||||
"/Users/suphonchaip/.nuget/packages/microsoft.aspnetcore.authentication.core/2.2.0/microsoft.aspnetcore.authentication.core.2.2.0.nupkg.sha512",
|
"/Users/suphonchaip/.nuget/packages/microsoft.aspnetcore.authentication.core/2.2.0/microsoft.aspnetcore.authentication.core.2.2.0.nupkg.sha512",
|
||||||
|
|
@ -100,7 +93,6 @@
|
||||||
"/Users/suphonchaip/.nuget/packages/microsoft.entityframeworkcore.relational/7.0.3/microsoft.entityframeworkcore.relational.7.0.3.nupkg.sha512",
|
"/Users/suphonchaip/.nuget/packages/microsoft.entityframeworkcore.relational/7.0.3/microsoft.entityframeworkcore.relational.7.0.3.nupkg.sha512",
|
||||||
"/Users/suphonchaip/.nuget/packages/microsoft.entityframeworkcore.relational.design/1.1.1/microsoft.entityframeworkcore.relational.design.1.1.1.nupkg.sha512",
|
"/Users/suphonchaip/.nuget/packages/microsoft.entityframeworkcore.relational.design/1.1.1/microsoft.entityframeworkcore.relational.design.1.1.1.nupkg.sha512",
|
||||||
"/Users/suphonchaip/.nuget/packages/microsoft.entityframeworkcore.sqlserver/7.0.3/microsoft.entityframeworkcore.sqlserver.7.0.3.nupkg.sha512",
|
"/Users/suphonchaip/.nuget/packages/microsoft.entityframeworkcore.sqlserver/7.0.3/microsoft.entityframeworkcore.sqlserver.7.0.3.nupkg.sha512",
|
||||||
"/Users/suphonchaip/.nuget/packages/microsoft.entityframeworkcore.sqlserver.nettopologysuite/6.0.21/microsoft.entityframeworkcore.sqlserver.nettopologysuite.6.0.21.nupkg.sha512",
|
|
||||||
"/Users/suphonchaip/.nuget/packages/microsoft.entityframeworkcore.tools/7.0.3/microsoft.entityframeworkcore.tools.7.0.3.nupkg.sha512",
|
"/Users/suphonchaip/.nuget/packages/microsoft.entityframeworkcore.tools/7.0.3/microsoft.entityframeworkcore.tools.7.0.3.nupkg.sha512",
|
||||||
"/Users/suphonchaip/.nuget/packages/microsoft.extensions.apidescription.server/6.0.5/microsoft.extensions.apidescription.server.6.0.5.nupkg.sha512",
|
"/Users/suphonchaip/.nuget/packages/microsoft.extensions.apidescription.server/6.0.5/microsoft.extensions.apidescription.server.6.0.5.nupkg.sha512",
|
||||||
"/Users/suphonchaip/.nuget/packages/microsoft.extensions.caching.abstractions/7.0.0/microsoft.extensions.caching.abstractions.7.0.0.nupkg.sha512",
|
"/Users/suphonchaip/.nuget/packages/microsoft.extensions.caching.abstractions/7.0.0/microsoft.extensions.caching.abstractions.7.0.0.nupkg.sha512",
|
||||||
|
|
@ -159,8 +151,6 @@
|
||||||
"/Users/suphonchaip/.nuget/packages/mysqlconnector/2.2.5/mysqlconnector.2.2.5.nupkg.sha512",
|
"/Users/suphonchaip/.nuget/packages/mysqlconnector/2.2.5/mysqlconnector.2.2.5.nupkg.sha512",
|
||||||
"/Users/suphonchaip/.nuget/packages/nest/7.17.5/nest.7.17.5.nupkg.sha512",
|
"/Users/suphonchaip/.nuget/packages/nest/7.17.5/nest.7.17.5.nupkg.sha512",
|
||||||
"/Users/suphonchaip/.nuget/packages/netstandard.library/1.6.1/netstandard.library.1.6.1.nupkg.sha512",
|
"/Users/suphonchaip/.nuget/packages/netstandard.library/1.6.1/netstandard.library.1.6.1.nupkg.sha512",
|
||||||
"/Users/suphonchaip/.nuget/packages/nettopologysuite/2.3.0/nettopologysuite.2.3.0.nupkg.sha512",
|
|
||||||
"/Users/suphonchaip/.nuget/packages/nettopologysuite.io.sqlserverbytes/2.0.0/nettopologysuite.io.sqlserverbytes.2.0.0.nupkg.sha512",
|
|
||||||
"/Users/suphonchaip/.nuget/packages/newtonsoft.json/13.0.3/newtonsoft.json.13.0.3.nupkg.sha512",
|
"/Users/suphonchaip/.nuget/packages/newtonsoft.json/13.0.3/newtonsoft.json.13.0.3.nupkg.sha512",
|
||||||
"/Users/suphonchaip/.nuget/packages/newtonsoft.json.bson/1.0.2/newtonsoft.json.bson.1.0.2.nupkg.sha512",
|
"/Users/suphonchaip/.nuget/packages/newtonsoft.json.bson/1.0.2/newtonsoft.json.bson.1.0.2.nupkg.sha512",
|
||||||
"/Users/suphonchaip/.nuget/packages/nonfactors.grid.core.mvc6/7.1.0/nonfactors.grid.core.mvc6.7.1.0.nupkg.sha512",
|
"/Users/suphonchaip/.nuget/packages/nonfactors.grid.core.mvc6/7.1.0/nonfactors.grid.core.mvc6.7.1.0.nupkg.sha512",
|
||||||
|
|
@ -207,7 +197,6 @@
|
||||||
"/Users/suphonchaip/.nuget/packages/serilog.sinks.periodicbatching/3.1.0/serilog.sinks.periodicbatching.3.1.0.nupkg.sha512",
|
"/Users/suphonchaip/.nuget/packages/serilog.sinks.periodicbatching/3.1.0/serilog.sinks.periodicbatching.3.1.0.nupkg.sha512",
|
||||||
"/Users/suphonchaip/.nuget/packages/sharpcompress/0.30.1/sharpcompress.0.30.1.nupkg.sha512",
|
"/Users/suphonchaip/.nuget/packages/sharpcompress/0.30.1/sharpcompress.0.30.1.nupkg.sha512",
|
||||||
"/Users/suphonchaip/.nuget/packages/snappier/1.0.0/snappier.1.0.0.nupkg.sha512",
|
"/Users/suphonchaip/.nuget/packages/snappier/1.0.0/snappier.1.0.0.nupkg.sha512",
|
||||||
"/Users/suphonchaip/.nuget/packages/strongnamer/0.2.5/strongnamer.0.2.5.nupkg.sha512",
|
|
||||||
"/Users/suphonchaip/.nuget/packages/swashbuckle.aspnetcore/6.5.0/swashbuckle.aspnetcore.6.5.0.nupkg.sha512",
|
"/Users/suphonchaip/.nuget/packages/swashbuckle.aspnetcore/6.5.0/swashbuckle.aspnetcore.6.5.0.nupkg.sha512",
|
||||||
"/Users/suphonchaip/.nuget/packages/swashbuckle.aspnetcore.annotations/6.5.0/swashbuckle.aspnetcore.annotations.6.5.0.nupkg.sha512",
|
"/Users/suphonchaip/.nuget/packages/swashbuckle.aspnetcore.annotations/6.5.0/swashbuckle.aspnetcore.annotations.6.5.0.nupkg.sha512",
|
||||||
"/Users/suphonchaip/.nuget/packages/swashbuckle.aspnetcore.swagger/6.5.0/swashbuckle.aspnetcore.swagger.6.5.0.nupkg.sha512",
|
"/Users/suphonchaip/.nuget/packages/swashbuckle.aspnetcore.swagger/6.5.0/swashbuckle.aspnetcore.swagger.6.5.0.nupkg.sha512",
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue