diff --git a/0_Framework/Application/FaceEmbedding/IFaceEmbeddingService.cs b/0_Framework/Application/FaceEmbedding/IFaceEmbeddingService.cs index b5aab83b..78dbf735 100644 --- a/0_Framework/Application/FaceEmbedding/IFaceEmbeddingService.cs +++ b/0_Framework/Application/FaceEmbedding/IFaceEmbeddingService.cs @@ -11,6 +11,7 @@ public interface IFaceEmbeddingService Task RefineEmbeddingAsync(long employeeId, long workshopId, float[] embedding, float confidence, Dictionary metadata = null); Task DeleteEmbeddingAsync(long employeeId, long workshopId); Task> GetEmbeddingAsync(long employeeId, long workshopId); + Task UpdateEmbeddingFullNameAsync(long employeeId, long workshopId, string newFullName); } public class FaceEmbeddingResponse diff --git a/0_Framework/InfraStructure/FaceEmbeddingService.cs b/0_Framework/InfraStructure/FaceEmbeddingService.cs index 0b709ed5..148adc80 100644 --- a/0_Framework/InfraStructure/FaceEmbeddingService.cs +++ b/0_Framework/InfraStructure/FaceEmbeddingService.cs @@ -18,329 +18,387 @@ namespace _0_Framework.Infrastructure; /// public class FaceEmbeddingService : IFaceEmbeddingService { - private readonly IHttpClientFactory _httpClientFactory; - private readonly ILogger _logger; - private readonly IFaceEmbeddingNotificationService _notificationService; - private readonly string _apiBaseUrl; + private readonly IHttpClientFactory _httpClientFactory; + private readonly ILogger _logger; + private readonly IFaceEmbeddingNotificationService _notificationService; + private readonly string _apiBaseUrl; - public FaceEmbeddingService(IHttpClientFactory httpClientFactory, ILogger logger, - IFaceEmbeddingNotificationService notificationService = null) - { - _httpClientFactory = httpClientFactory; - _logger = logger; - _notificationService = notificationService; - _apiBaseUrl = "http://localhost:8000"; - } + public FaceEmbeddingService(IHttpClientFactory httpClientFactory, ILogger logger, + IFaceEmbeddingNotificationService notificationService = null) + { + _httpClientFactory = httpClientFactory; + _logger = logger; + _notificationService = notificationService; + _apiBaseUrl = "http://localhost:8000"; + } - public async Task GenerateEmbeddingsAsync(long employeeId, long workshopId, - string employeeFullName, string picture1Path, string picture2Path) - { - try - { - var httpClient = _httpClientFactory.CreateClient(); - httpClient.BaseAddress = new Uri(_apiBaseUrl); - httpClient.Timeout = TimeSpan.FromSeconds(30); + public async Task GenerateEmbeddingsAsync(long employeeId, long workshopId, + string employeeFullName, string picture1Path, string picture2Path) + { + try + { + var httpClient = _httpClientFactory.CreateClient(); + httpClient.BaseAddress = new Uri(_apiBaseUrl); + httpClient.Timeout = TimeSpan.FromSeconds(30); - using var content = new MultipartFormDataContent(); + using var content = new MultipartFormDataContent(); - // Add form fields - content.Add(new StringContent(employeeId.ToString()), "employee_id"); - content.Add(new StringContent(workshopId.ToString()), "workshop_id"); - content.Add(new StringContent(employeeFullName ?? ""), "employee_full_name"); + // Add form fields + content.Add(new StringContent(employeeId.ToString()), "employee_id"); + content.Add(new StringContent(workshopId.ToString()), "workshop_id"); + content.Add(new StringContent(employeeFullName ?? ""), "employee_full_name"); - // Add picture files - if (File.Exists(picture1Path)) - { - var picture1Bytes = await File.ReadAllBytesAsync(picture1Path); - var picture1Content = new ByteArrayContent(picture1Bytes); - picture1Content.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg"); - content.Add(picture1Content, "picture1", "1.jpg"); - } - else - { - _logger.LogWarning("Picture1 not found at path: {Path}", picture1Path); - return new OperationResult { IsSuccedded = false, Message = "تصویر اول یافت نشد" }; - } + // Add picture files + if (File.Exists(picture1Path)) + { + var picture1Bytes = await File.ReadAllBytesAsync(picture1Path); + var picture1Content = new ByteArrayContent(picture1Bytes); + picture1Content.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg"); + content.Add(picture1Content, "picture1", "1.jpg"); + } + else + { + _logger.LogWarning("Picture1 not found at path: {Path}", picture1Path); + return new OperationResult { IsSuccedded = false, Message = "تصویر اول یافت نشد" }; + } - if (File.Exists(picture2Path)) - { - var picture2Bytes = await File.ReadAllBytesAsync(picture2Path); - var picture2Content = new ByteArrayContent(picture2Bytes); - picture2Content.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg"); - content.Add(picture2Content, "picture2", "2.jpg"); - } - else - { - _logger.LogWarning("Picture2 not found at path: {Path}", picture2Path); - return new OperationResult { IsSuccedded = false, Message = "تصویر دوم یافت نشد" }; - } + if (File.Exists(picture2Path)) + { + var picture2Bytes = await File.ReadAllBytesAsync(picture2Path); + var picture2Content = new ByteArrayContent(picture2Bytes); + picture2Content.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg"); + content.Add(picture2Content, "picture2", "2.jpg"); + } + else + { + _logger.LogWarning("Picture2 not found at path: {Path}", picture2Path); + return new OperationResult { IsSuccedded = false, Message = "تصویر دوم یافت نشد" }; + } - // Send request to Python API - var response = await httpClient.PostAsync("embeddings", content); + // Send request to Python API + var response = await httpClient.PostAsync("embeddings", content); - if (response.IsSuccessStatusCode) - { - var responseContent = await response.Content.ReadAsStringAsync(); - _logger.LogInformation("Embeddings generated successfully for Employee {EmployeeId}, Workshop {WorkshopId}", - employeeId, workshopId); + if (response.IsSuccessStatusCode) + { + var responseContent = await response.Content.ReadAsStringAsync(); + _logger.LogInformation( + "Embeddings generated successfully for Employee {EmployeeId}, Workshop {WorkshopId}", + employeeId, workshopId); - // ارسال اطلاع‌رسانی به سایر سیستم‌ها - if (_notificationService != null) - { - await _notificationService.NotifyEmbeddingCreatedAsync(workshopId, employeeId, employeeFullName); - } + // ارسال اطلاع‌رسانی به سایر سیستم‌ها + if (_notificationService != null) + { + await _notificationService.NotifyEmbeddingCreatedAsync(workshopId, employeeId, employeeFullName); + } - return new OperationResult - { - IsSuccedded = true, - Message = "Embedding با موفقیت ایجاد شد" - }; - } - else - { - var errorContent = await response.Content.ReadAsStringAsync(); - _logger.LogError("Failed to generate embeddings. Status: {StatusCode}, Error: {Error}", - response.StatusCode, errorContent); + return new OperationResult + { + IsSuccedded = true, + Message = "Embedding با موفقیت ایجاد شد" + }; + } + else + { + var errorContent = await response.Content.ReadAsStringAsync(); + _logger.LogError("Failed to generate embeddings. Status: {StatusCode}, Error: {Error}", + response.StatusCode, errorContent); - return new OperationResult - { - IsSuccedded = false, - Message = $"خطا در تولید Embedding: {response.StatusCode}" - }; - } - } - catch (HttpRequestException ex) - { - _logger.LogError(ex, "HTTP error while calling embeddings API for Employee {EmployeeId}", employeeId); - return new OperationResult - { - IsSuccedded = false, - Message = "خطا در ارتباط با سرور Embedding" - }; - } - catch (Exception ex) - { - _logger.LogError(ex, "Error while calling embeddings API for Employee {EmployeeId}", employeeId); - return new OperationResult - { - IsSuccedded = false, - Message = "خطای غیرمنتظره در تولید Embedding" - }; - } - } + return new OperationResult + { + IsSuccedded = false, + Message = $"خطا در تولید Embedding: {response.StatusCode}" + }; + } + } + catch (HttpRequestException ex) + { + _logger.LogError(ex, "HTTP error while calling embeddings API for Employee {EmployeeId}", employeeId); + return new OperationResult + { + IsSuccedded = false, + Message = "خطا در ارتباط با سرور Embedding" + }; + } + catch (Exception ex) + { + _logger.LogError(ex, "Error while calling embeddings API for Employee {EmployeeId}", employeeId); + return new OperationResult + { + IsSuccedded = false, + Message = "خطای غیرمنتظره در تولید Embedding" + }; + } + } - public async Task GenerateEmbeddingsFromStreamAsync(long employeeId, long workshopId, - string employeeFullName, Stream picture1Stream, Stream picture2Stream) - { - try - { - var httpClient = _httpClientFactory.CreateClient(); - httpClient.BaseAddress = new Uri(_apiBaseUrl); - httpClient.Timeout = TimeSpan.FromSeconds(30); + public async Task GenerateEmbeddingsFromStreamAsync(long employeeId, long workshopId, + string employeeFullName, Stream picture1Stream, Stream picture2Stream) + { + try + { + var httpClient = _httpClientFactory.CreateClient(); + httpClient.BaseAddress = new Uri(_apiBaseUrl); + httpClient.Timeout = TimeSpan.FromSeconds(30); - using var content = new MultipartFormDataContent(); + using var content = new MultipartFormDataContent(); - // Add form fields - content.Add(new StringContent(employeeId.ToString()), "employee_id"); - content.Add(new StringContent(workshopId.ToString()), "workshop_id"); - content.Add(new StringContent(employeeFullName ?? ""), "employee_full_name"); + // Add form fields + content.Add(new StringContent(employeeId.ToString()), "employee_id"); + content.Add(new StringContent(workshopId.ToString()), "workshop_id"); + content.Add(new StringContent(employeeFullName ?? ""), "employee_full_name"); - // Add picture streams - var picture1Content = new StreamContent(picture1Stream); - picture1Content.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg"); - content.Add(picture1Content, "picture1", "1.jpg"); + // Add picture streams + var picture1Content = new StreamContent(picture1Stream); + picture1Content.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg"); + content.Add(picture1Content, "picture1", "1.jpg"); - var picture2Content = new StreamContent(picture2Stream); - picture2Content.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg"); - content.Add(picture2Content, "picture2", "2.jpg"); + var picture2Content = new StreamContent(picture2Stream); + picture2Content.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg"); + content.Add(picture2Content, "picture2", "2.jpg"); - // Send request to Python API - var response = await httpClient.PostAsync("embeddings", content); + // Send request to Python API + var response = await httpClient.PostAsync("embeddings", content); - if (response.IsSuccessStatusCode) - { - _logger.LogInformation("Embeddings generated successfully from streams for Employee {EmployeeId}", employeeId); - - // ارسال اطلاع‌رسانی به سایر سیستم‌ها - if (_notificationService != null) - { - await _notificationService.NotifyEmbeddingCreatedAsync(workshopId, employeeId, employeeFullName); - } - - return new OperationResult { IsSuccedded = true, Message = "Embedding با موفقیت ایجاد شد" }; - } - else - { - var errorContent = await response.Content.ReadAsStringAsync(); - _logger.LogError("Failed to generate embeddings from streams. Status: {StatusCode}, Error: {Error}", - response.StatusCode, errorContent); + if (response.IsSuccessStatusCode) + { + _logger.LogInformation("Embeddings generated successfully from streams for Employee {EmployeeId}", + employeeId); - return new OperationResult - { - IsSuccedded = false, - Message = $"خطا در تولید Embedding: {response.StatusCode}" - }; - } - } - catch (Exception ex) - { - _logger.LogError(ex, "Error while generating embeddings from streams for Employee {EmployeeId}", employeeId); - return new OperationResult - { - IsSuccedded = false, - Message = "خطا در تولید Embedding" - }; - } - } + // ارسال اطلاع‌رسانی به سایر سیستم‌ها + if (_notificationService != null) + { + await _notificationService.NotifyEmbeddingCreatedAsync(workshopId, employeeId, employeeFullName); + } - public async Task RefineEmbeddingAsync(long employeeId, long workshopId, float[] embedding, - float confidence, Dictionary metadata = null) - { - try - { - var httpClient = _httpClientFactory.CreateClient(); - httpClient.BaseAddress = new Uri(_apiBaseUrl); - httpClient.Timeout = TimeSpan.FromSeconds(30); + return new OperationResult { IsSuccedded = true, Message = "Embedding با موفقیت ایجاد شد" }; + } + else + { + var errorContent = await response.Content.ReadAsStringAsync(); + _logger.LogError("Failed to generate embeddings from streams. Status: {StatusCode}, Error: {Error}", + response.StatusCode, errorContent); - var requestBody = new - { - employeeId, - workshopId, - embedding, - confidence, - metadata = metadata ?? new Dictionary() - }; + return new OperationResult + { + IsSuccedded = false, + Message = $"خطا در تولید Embedding: {response.StatusCode}" + }; + } + } + catch (Exception ex) + { + _logger.LogError(ex, "Error while generating embeddings from streams for Employee {EmployeeId}", + employeeId); + return new OperationResult + { + IsSuccedded = false, + Message = "خطا در تولید Embedding" + }; + } + } - var response = await httpClient.PostAsJsonAsync("embeddings/refine", requestBody); + public async Task RefineEmbeddingAsync(long employeeId, long workshopId, float[] embedding, + float confidence, Dictionary metadata = null) + { + try + { + var httpClient = _httpClientFactory.CreateClient(); + httpClient.BaseAddress = new Uri(_apiBaseUrl); + httpClient.Timeout = TimeSpan.FromSeconds(30); - if (response.IsSuccessStatusCode) - { - _logger.LogInformation("Embedding refined successfully for Employee {EmployeeId}", employeeId); - - // ارسال اطلاع‌رسانی به سایر سیستم‌ها - if (_notificationService != null) - { - await _notificationService.NotifyEmbeddingRefinedAsync(workshopId, employeeId); - } - - return new OperationResult { IsSuccedded = true, Message = "Embedding بهبود یافت" }; - } - else - { - var errorContent = await response.Content.ReadAsStringAsync(); - _logger.LogError("Failed to refine embedding. Status: {StatusCode}, Error: {Error}", - response.StatusCode, errorContent); + var requestBody = new + { + employeeId, + workshopId, + embedding, + confidence, + metadata = metadata ?? new Dictionary() + }; - return new OperationResult - { - IsSuccedded = false, - Message = $"خطا در بهبود Embedding: {response.StatusCode}" - }; - } - } - catch (Exception ex) - { - _logger.LogError(ex, "Error while refining embedding for Employee {EmployeeId}", employeeId); - return new OperationResult - { - IsSuccedded = false, - Message = "خطا در بهبود Embedding" - }; - } - } + var response = await httpClient.PostAsJsonAsync("embeddings/refine", requestBody); - public async Task DeleteEmbeddingAsync(long employeeId, long workshopId) - { - try - { - var httpClient = _httpClientFactory.CreateClient(); - httpClient.BaseAddress = new Uri(_apiBaseUrl); - httpClient.Timeout = TimeSpan.FromSeconds(30); + if (response.IsSuccessStatusCode) + { + _logger.LogInformation("Embedding refined successfully for Employee {EmployeeId}", employeeId); - var response = await httpClient.DeleteAsync($"embeddings/{workshopId}/{employeeId}"); + // ارسال اطلاع‌رسانی به سایر سیستم‌ها + if (_notificationService != null) + { + await _notificationService.NotifyEmbeddingRefinedAsync(workshopId, employeeId); + } - if (response.IsSuccessStatusCode) - { - _logger.LogInformation("Embedding deleted successfully for Employee {EmployeeId}", employeeId); - - // ارسال اطلاع‌رسانی به سایر سیستم‌ها - if (_notificationService != null) - { - await _notificationService.NotifyEmbeddingDeletedAsync(workshopId, employeeId); - } - - return new OperationResult { IsSuccedded = true, Message = "Embedding حذف شد" }; - } - else - { - var errorContent = await response.Content.ReadAsStringAsync(); - _logger.LogError("Failed to delete embedding. Status: {StatusCode}, Error: {Error}", - response.StatusCode, errorContent); + return new OperationResult { IsSuccedded = true, Message = "Embedding بهبود یافت" }; + } + else + { + var errorContent = await response.Content.ReadAsStringAsync(); + _logger.LogError("Failed to refine embedding. Status: {StatusCode}, Error: {Error}", + response.StatusCode, errorContent); - return new OperationResult - { - IsSuccedded = false, - Message = $"خطا در حذف Embedding: {response.StatusCode}" - }; - } - } - catch (Exception ex) - { - _logger.LogError(ex, "Error while deleting embedding for Employee {EmployeeId}", employeeId); - return new OperationResult - { - IsSuccedded = false, - Message = "خطا در حذف Embedding" - }; - } - } + return new OperationResult + { + IsSuccedded = false, + Message = $"خطا در بهبود Embedding: {response.StatusCode}" + }; + } + } + catch (Exception ex) + { + _logger.LogError(ex, "Error while refining embedding for Employee {EmployeeId}", employeeId); + return new OperationResult + { + IsSuccedded = false, + Message = "خطا در بهبود Embedding" + }; + } + } - public async Task> GetEmbeddingAsync(long employeeId, long workshopId) - { - try - { - var httpClient = _httpClientFactory.CreateClient(); - httpClient.BaseAddress = new Uri(_apiBaseUrl); - httpClient.Timeout = TimeSpan.FromSeconds(30); + public async Task DeleteEmbeddingAsync(long employeeId, long workshopId) + { + try + { + var httpClient = _httpClientFactory.CreateClient(); + httpClient.BaseAddress = new Uri(_apiBaseUrl); + httpClient.Timeout = TimeSpan.FromSeconds(30); - var response = await httpClient.GetAsync($"embeddings/{workshopId}/{employeeId}"); + var response = await httpClient.DeleteAsync($"embeddings/{workshopId}/{employeeId}"); - if (response.IsSuccessStatusCode) - { - var content = await response.Content.ReadAsStringAsync(); - var embeddingData = JsonSerializer.Deserialize(content, - new JsonSerializerOptions { PropertyNameCaseInsensitive = true }); + if (response.IsSuccessStatusCode) + { + _logger.LogInformation("Embedding deleted successfully for Employee {EmployeeId}", employeeId); - _logger.LogInformation("Embedding retrieved successfully for Employee {EmployeeId}", employeeId); + // ارسال اطلاع‌رسانی به سایر سیستم‌ها + if (_notificationService != null) + { + await _notificationService.NotifyEmbeddingDeletedAsync(workshopId, employeeId); + } - return new OperationResult - { - IsSuccedded = true, - Message = "Embedding دریافت شد", - Data = embeddingData - }; - } - else - { - var errorContent = await response.Content.ReadAsStringAsync(); - _logger.LogError("Failed to get embedding. Status: {StatusCode}, Error: {Error}", - response.StatusCode, errorContent); - - return new OperationResult - { - IsSuccedded = false, - Message = $"خطا در دریافت Embedding: {response.StatusCode}" - }; - } - } - catch (Exception ex) - { - _logger.LogError(ex, "Error while getting embedding for Employee {EmployeeId}", employeeId); - return new OperationResult - { - IsSuccedded = false, - Message = "خطا در دریافت Embedding" - }; - } - } -} + return new OperationResult { IsSuccedded = true, Message = "Embedding حذف شد" }; + } + else + { + var errorContent = await response.Content.ReadAsStringAsync(); + _logger.LogError("Failed to delete embedding. Status: {StatusCode}, Error: {Error}", + response.StatusCode, errorContent); + + return new OperationResult + { + IsSuccedded = false, + Message = $"خطا در حذف Embedding: {response.StatusCode}" + }; + } + } + catch (Exception ex) + { + _logger.LogError(ex, "Error while deleting embedding for Employee {EmployeeId}", employeeId); + return new OperationResult + { + IsSuccedded = false, + Message = "خطا در حذف Embedding" + }; + } + } + + public async Task> GetEmbeddingAsync(long employeeId, long workshopId) + { + try + { + var httpClient = _httpClientFactory.CreateClient(); + httpClient.BaseAddress = new Uri(_apiBaseUrl); + httpClient.Timeout = TimeSpan.FromSeconds(30); + + var response = await httpClient.GetAsync($"embeddings/{workshopId}/{employeeId}"); + + if (response.IsSuccessStatusCode) + { + var content = await response.Content.ReadAsStringAsync(); + var embeddingData = JsonSerializer.Deserialize(content, + new JsonSerializerOptions { PropertyNameCaseInsensitive = true }); + + _logger.LogInformation("Embedding retrieved successfully for Employee {EmployeeId}", employeeId); + + return new OperationResult + { + IsSuccedded = true, + Message = "Embedding دریافت شد", + Data = embeddingData + }; + } + else + { + var errorContent = await response.Content.ReadAsStringAsync(); + _logger.LogError("Failed to get embedding. Status: {StatusCode}, Error: {Error}", + response.StatusCode, errorContent); + + return new OperationResult + { + IsSuccedded = false, + Message = $"خطا در دریافت Embedding: {response.StatusCode}" + }; + } + } + catch (Exception ex) + { + _logger.LogError(ex, "Error while getting embedding for Employee {EmployeeId}", employeeId); + return new OperationResult + { + IsSuccedded = false, + Message = "خطا در دریافت Embedding" + }; + } + } + + public async Task UpdateEmbeddingFullNameAsync(long employeeId, long workshopId, + string newFullName) + { + try + { + var httpClient = _httpClientFactory.CreateClient(); + httpClient.BaseAddress = new Uri(_apiBaseUrl); + httpClient.Timeout = TimeSpan.FromSeconds(30); + + var requestBody = new + { + employee_id = employeeId, + workshop_id = workshopId, + employee_full_name = newFullName + }; + + var response = await httpClient.PutAsJsonAsync("embeddings/update-name", requestBody); + + if (response.IsSuccessStatusCode) + { + _logger.LogInformation("Employee Name Changed For {EmployeeId} In workshop ={WorkshopId}", employeeId, + workshopId); + + // ارسال اطلاع‌رسانی به سایر سیستم‌ها + if (_notificationService != null) + { + //await _notificationService.NotifyEmbeddingRefinedAsync(workshopId, employeeId); + } + + return new OperationResult { IsSuccedded = true, Message = "عملیات با موفقیت انجام شد" }; + } + else + { + var errorContent = await response.Content.ReadAsStringAsync(); + _logger.LogError("Failed to refine embedding. Status: {StatusCode}, Error: {Error}", + response.StatusCode, errorContent); + + return new OperationResult + { + IsSuccedded = false, + Message = $"خطا در بهبود Embedding: {response.StatusCode}" + }; + } + } + catch (Exception ex) + { + _logger.LogError(ex, "Error while Changing EmployeeFullName for Employee {EmployeeId}", employeeId); + return new OperationResult + { + IsSuccedded = false, + Message = "خطا در بهبود Embedding" + }; + } + } +} \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/RollCallEmployee/IRollCallEmployeeApplication.cs b/CompanyManagment.App.Contracts/RollCallEmployee/IRollCallEmployeeApplication.cs index b736b0bc..8691b2f1 100644 --- a/CompanyManagment.App.Contracts/RollCallEmployee/IRollCallEmployeeApplication.cs +++ b/CompanyManagment.App.Contracts/RollCallEmployee/IRollCallEmployeeApplication.cs @@ -1,6 +1,7 @@ using _0_Framework.Application; using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; namespace CompanyManagment.App.Contracts.RollCallEmployee; diff --git a/CompanyManagment.Application/RollCallEmployeeApplication.cs b/CompanyManagment.Application/RollCallEmployeeApplication.cs index 9f4630cd..134807e2 100644 --- a/CompanyManagment.Application/RollCallEmployeeApplication.cs +++ b/CompanyManagment.Application/RollCallEmployeeApplication.cs @@ -11,6 +11,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; using System.Transactions; +using _0_Framework.Application.FaceEmbedding; using static Microsoft.EntityFrameworkCore.DbLoggerCategory.Database; namespace CompanyManagment.Application; @@ -23,7 +24,9 @@ public class RollCallEmployeeApplication : IRollCallEmployeeApplication private readonly ILeftWorkRepository _leftWorkRepository; private readonly IRollCallEmployeeStatusRepository _rollCallEmployeeStatusRepository; private readonly IWebHostEnvironment _webHostEnvironment; - public RollCallEmployeeApplication(IRollCallEmployeeRepository rollCallEmployeeRepository, IEmployeeRepository employeeRepository, IRollCallEmployeeStatusApplication rollCallEmployeeStatusApplication, ILeftWorkRepository leftWorkRepository, IRollCallEmployeeStatusRepository rollCallEmployeeStatusRepository, IWebHostEnvironment webHostEnvironment) + private readonly IFaceEmbeddingService _faceEmbeddingService; + + public RollCallEmployeeApplication(IRollCallEmployeeRepository rollCallEmployeeRepository, IEmployeeRepository employeeRepository, IRollCallEmployeeStatusApplication rollCallEmployeeStatusApplication, ILeftWorkRepository leftWorkRepository, IRollCallEmployeeStatusRepository rollCallEmployeeStatusRepository, IWebHostEnvironment webHostEnvironment, IFaceEmbeddingService faceEmbeddingService) { _rollCallEmployeeRepository = rollCallEmployeeRepository; _employeeRepository = employeeRepository; @@ -31,6 +34,7 @@ public class RollCallEmployeeApplication : IRollCallEmployeeApplication _leftWorkRepository = leftWorkRepository; _rollCallEmployeeStatusRepository = rollCallEmployeeStatusRepository; _webHostEnvironment = webHostEnvironment; + _faceEmbeddingService = faceEmbeddingService; } public OperationResult Create(CreateRollCallEmployee command) @@ -213,9 +217,18 @@ public class RollCallEmployeeApplication : IRollCallEmployeeApplication if (entity.IsActiveString != "true") return result.Failed("امکان تغییر نام برای کارمند غیر فعال وجود ندارد"); - + var transaction = _rollCallEmployeeRepository.BeginTransactionAsync().GetAwaiter().GetResult(); + entity.ChangeName(fName, lName); _rollCallEmployeeRepository.SaveChanges(); + + var embeddingRes =_faceEmbeddingService + .UpdateEmbeddingFullNameAsync(entity.EmployeeId, entity.WorkshopId, fullName) + .GetAwaiter().GetResult(); + if (!embeddingRes.IsSuccedded) + return result.Failed("خطا در به روز رسانی نام در سیستم تشخیص چهره: " + embeddingRes.Message); + + transaction.Commit(); return result.Succcedded(); } #endregion diff --git a/ServiceHost/ServiceHost.csproj b/ServiceHost/ServiceHost.csproj index d6666050..744e0213 100644 --- a/ServiceHost/ServiceHost.csproj +++ b/ServiceHost/ServiceHost.csproj @@ -3,7 +3,8 @@ net10.0 enable - + true + $(NoWarn);1591