From d6a3bdc8bae096a45671be64fed8eeb6a25cccd6 Mon Sep 17 00:00:00 2001 From: Bright Date: Thu, 3 Jul 2025 16:16:32 +0700 Subject: [PATCH] =?UTF-8?q?=E0=B8=AA=E0=B8=A3=E0=B9=89=E0=B8=B2=E0=B8=87?= =?UTF-8?q?=E0=B8=A3=E0=B8=B2=E0=B8=A2=E0=B8=81=E0=B8=B2=E0=B8=A3=E0=B8=A3?= =?UTF-8?q?=E0=B8=B1=E0=B8=9A=E0=B9=82=E0=B8=AD=E0=B8=99=20=E0=B8=96?= =?UTF-8?q?=E0=B9=89=E0=B8=B2=E0=B9=80=E0=B8=9B=E0=B9=87=E0=B8=99=E0=B8=82?= =?UTF-8?q?=E0=B8=A3=E0=B8=81.=E0=B9=80=E0=B8=94=E0=B8=B4=E0=B8=A1?= =?UTF-8?q?=E0=B9=83=E0=B8=8A=E0=B9=89=E0=B8=A3=E0=B8=B9=E0=B8=9B=E0=B8=A0?= =?UTF-8?q?=E0=B8=B2=E0=B8=9E=E0=B8=88=E0=B8=B2=E0=B8=81=E0=B8=97=E0=B8=B0?= =?UTF-8?q?=E0=B9=80=E0=B8=9A=E0=B8=B5=E0=B8=A2=E0=B8=99=E0=B8=9B=E0=B8=A3?= =?UTF-8?q?=E0=B8=B0=E0=B8=A7=E0=B8=B1=E0=B8=95=E0=B8=B4=20#1168?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Repositories/MinIOService.cs | 34 +++++++++++++ .../Controllers/PlacementReceiveController.cs | 49 ++++++++++--------- .../Requests/OrgRequest.cs | 1 + 3 files changed, 62 insertions(+), 22 deletions(-) diff --git a/BMA.EHR.Application/Repositories/MinIOService.cs b/BMA.EHR.Application/Repositories/MinIOService.cs index ea470b27..bf74270f 100644 --- a/BMA.EHR.Application/Repositories/MinIOService.cs +++ b/BMA.EHR.Application/Repositories/MinIOService.cs @@ -155,6 +155,40 @@ namespace BMA.EHR.Application.Repositories } } + public async Task GetImageToFormFileAsync(string refId) + { + try + { + using var memoryStream = new MemoryStream(); + var request = new GetObjectRequest + { + BucketName = _bucketName, + Key = refId + }; + + using var response = await _s3Client.GetObjectAsync(request); + using var responseStream = response.ResponseStream; + + await responseStream.CopyToAsync(memoryStream); + + var finalBytes = memoryStream.ToArray(); + + var finalStream = new MemoryStream(finalBytes); + var fileName = Path.GetFileName(refId); + var contentType = response.Headers.ContentType ?? "image/jpeg"; + + return new FormFile(finalStream, 0, finalStream.Length, "file", fileName) + { + Headers = new HeaderDictionary(), + ContentType = contentType + }; + } + catch + { + throw; + } + } + public async Task DeleteFileAsync(Guid fileId) { try diff --git a/BMA.EHR.Placement.Service/Controllers/PlacementReceiveController.cs b/BMA.EHR.Placement.Service/Controllers/PlacementReceiveController.cs index d64917a8..6eba03ee 100644 --- a/BMA.EHR.Placement.Service/Controllers/PlacementReceiveController.cs +++ b/BMA.EHR.Placement.Service/Controllers/PlacementReceiveController.cs @@ -326,33 +326,22 @@ namespace BMA.EHR.Placement.Service.Controllers p.posLevelOldId, p.posLevelNameOld, - //Avatar = p.Avatar == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.Avatar.Id, - //PlacementReceiveDocs = p.PlacementReceiveDocs.Where(d => d.Document != null).Select(d => new { d.Document.Id, d.Document.FileName }), - Docs = p.Avatar ?? null, + Avatar = p.Avatar == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.Avatar.Id, + PlacementReceiveDocs = p.PlacementReceiveDocs.Where(d => d.Document != null).Select(d => new { d.Document.Id, d.Document.FileName }), }) .FirstOrDefaultAsync(); if (data == null) return Error(GlobalMessages.DataNotFound, 404); - //var placementReceiveDocs = new List(); - //foreach (var doc in data.PlacementReceiveDocs) - //{ - // var _doc = new - // { - // doc.FileName, - // PathName = await _documentService.ImagesPath(doc.Id) - // }; - // placementReceiveDocs.Add(_doc); - //} - var _Docs = new List(); - if (data.Docs != null) + var placementReceiveDocs = new List(); + foreach (var doc in data.PlacementReceiveDocs) { var _doc = new { - FileName = data.Docs?.FileName, - PathName = await _documentService.ImagesPath(data.Docs?.Id) + doc.FileName, + PathName = await _documentService.ImagesPath(doc.Id) }; - _Docs.Add(_doc); + placementReceiveDocs.Add(_doc); } var _data = new { @@ -438,9 +427,8 @@ namespace BMA.EHR.Placement.Service.Controllers data.posLevelOldId, data.posLevelNameOld, - //Avatar = data.Avatar == Guid.Parse("00000000-0000-0000-0000-000000000000") ? null : await _documentService.ImagesPath(data.Avatar), - //Docs = placementReceiveDocs, - Docs = _Docs, + Avatar = data.Avatar == Guid.Parse("00000000-0000-0000-0000-000000000000") ? null : await _documentService.ImagesPath(data.Avatar), + Docs = placementReceiveDocs, }; return Success(_data); @@ -522,6 +510,7 @@ namespace BMA.EHR.Placement.Service.Controllers return Error("ข้อมูลรหัสบัตรประจำตัวประชาชนไม่ถูกต้อง", 500); } + var avatarUrl = string.Empty; var apiUrl = $"{_configuration["API"]}/org/profile/citizenid/position/{req.citizenId}"; using (var client = new HttpClient()) { @@ -532,7 +521,7 @@ namespace BMA.EHR.Placement.Service.Controllers var _result = await _res.Content.ReadAsStringAsync(); var org = JsonConvert.DeserializeObject(_result); - + if (org != null && org.result != null) { placementReceive.profileId = org.result.profileId; @@ -579,6 +568,8 @@ namespace BMA.EHR.Placement.Service.Controllers placementReceive.OrganizationPositionOld = org.result.position + "\n" + (placementReceive.PositionExecutiveOld == null ? "" : (placementReceive.positionExecutiveField == null ? placementReceive.PositionExecutiveOld + "\n" : placementReceive.PositionExecutiveOld + "(" + placementReceive.positionExecutiveField + ")" + "\n")) + placementReceive.OrganizationOld; + + avatarUrl = org.result.avatarUrl ?? null; } } await _context.PlacementReceives.AddAsync(placementReceive); @@ -596,6 +587,20 @@ namespace BMA.EHR.Placement.Service.Controllers placementReceive.Avatar = _doc; } } + else + { + if (avatarUrl != null && avatarUrl != "") + { + IFormFile imageFile = await _documentService.GetImageToFormFileAsync(avatarUrl); + var doc = await _documentService.UploadFileAsync(imageFile, imageFile.FileName); + var _doc = await _context.Documents.AsQueryable() + .FirstOrDefaultAsync(x => x.Id == doc.Id); + if (_doc != null) + { + placementReceive.Avatar = _doc; + } + } + } await _context.SaveChangesAsync(); return Success(); diff --git a/BMA.EHR.Placement.Service/Requests/OrgRequest.cs b/BMA.EHR.Placement.Service/Requests/OrgRequest.cs index 2505b19d..817c583f 100644 --- a/BMA.EHR.Placement.Service/Requests/OrgRequest.cs +++ b/BMA.EHR.Placement.Service/Requests/OrgRequest.cs @@ -51,6 +51,7 @@ namespace BMA.EHR.Placement.Service.Requests public double? salary { get; set; } public string? education { get; set; } public double? Amount { get; set; } + public string? avatarUrl { get; set; } } } \ No newline at end of file