From 22fbce8d1cbc4dcf19a8598be27abcce7ec0cecf Mon Sep 17 00:00:00 2001
From: Petar Hristov <hristov@itc.rwth-aachen.de>
Date: Fri, 10 Jan 2025 11:23:48 +0000
Subject: [PATCH] Update: Responsible project organization extension and update
 Coscine.ApiClient to version 1.9.4

---
 src/KpiGenerator/KpiGenerator.csproj          |  2 +-
 .../MappingProfiles/MappingProfiles.cs        | 11 ++++----
 .../Models/ProjectOrganization.cs             | 25 +++++++++++++++++++
 src/KpiGenerator/Models/UserReport.cs         |  2 --
 4 files changed, 31 insertions(+), 9 deletions(-)
 create mode 100644 src/KpiGenerator/Models/ProjectOrganization.cs

diff --git a/src/KpiGenerator/KpiGenerator.csproj b/src/KpiGenerator/KpiGenerator.csproj
index 31c784e..f530f38 100644
--- a/src/KpiGenerator/KpiGenerator.csproj
+++ b/src/KpiGenerator/KpiGenerator.csproj
@@ -21,7 +21,7 @@
 		<PackageReference Include="AutoMapper" Version="12.0.1" />
 		<PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="12.0.1" />
 		<PackageReference Include="CommandLineParser" Version="2.9.1" />
-		<PackageReference Include="Coscine.ApiClient" Version="1.9.3" />
+		<PackageReference Include="Coscine.ApiClient" Version="1.9.4" />
 		<PackageReference Include="dotNetRdf.Core" Version="3.1.1" />
 		<PackageReference Include="GitLabApiClient" Version="1.8.1-beta.5" />
 		<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="8.0.0" />
diff --git a/src/KpiGenerator/MappingProfiles/MappingProfiles.cs b/src/KpiGenerator/MappingProfiles/MappingProfiles.cs
index ca15d23..e09ef85 100644
--- a/src/KpiGenerator/MappingProfiles/MappingProfiles.cs
+++ b/src/KpiGenerator/MappingProfiles/MappingProfiles.cs
@@ -36,7 +36,6 @@ public class MappingProfiles : Profile
 
         CreateMap<UserDto, UserReport>()
             .ForMember(ur => ur.Disciplines, opt => opt.MapFrom(dto => dto.Disciplines))
-            .ForMember(ur => ur.Institutes, opt => opt.MapFrom(dto => dto.Institutes))
             .ForMember(ur => ur.LatestActivity, opt => opt.MapFrom(dto => dto.LatestActivity))
             .ForMember(ur => ur.LoginProviders, opt => opt.MapFrom(dto => dto.Identities))
             .ForMember(ur => ur.Organizations, opt => opt.MapFrom(dto => dto.Organizations))
@@ -50,11 +49,6 @@ public class MappingProfiles : Profile
             .ForMember(lp => lp.Id, opt => opt.MapFrom(dto => dto.Id))
             .ForMember(lp => lp.DisplayName, opt => opt.MapFrom(dto => dto.DisplayName));
 
-        CreateMap<UserInstituteDto, Organization>()
-            .ForMember(o => o.ReadOnly, opt => opt.MapFrom(dto => dto.ReadOnly))
-            .ForMember(o => o.Name, opt => opt.MapFrom(dto => dto.DisplayName))
-            .ForMember(o => o.RorUrl, opt => opt.MapFrom(dto => dto.Uri));
-
         CreateMap<UserOrganizationDto, Organization>()
             .ForMember(o => o.ReadOnly, opt => opt.MapFrom(dto => dto.ReadOnly))
             .ForMember(o => o.Name, opt => opt.MapFrom(dto => dto.DisplayName))
@@ -63,6 +57,11 @@ public class MappingProfiles : Profile
         CreateMap<OrganizationDto, Organization>()
             .ForMember(o => o.Name, opt => opt.MapFrom(dto => dto.DisplayName))
             .ForMember(o => o.RorUrl, opt => opt.MapFrom(dto => dto.Uri));
+        
+        CreateMap<ProjectOrganizationDto, ProjectOrganization>()
+            .ForMember(po => po.Name, opt => opt.MapFrom(dto => dto.DisplayName))
+            .ForMember(po => po.RorUrl, opt => opt.MapFrom(dto => dto.Uri))
+            .ForMember(po => po.Responsible, opt => opt.MapFrom(dto => dto.Responsible));
 
         CreateMap<VisibilityDto, ProjectVisibility>()
             .ForMember(pv => pv.Id, opt => opt.MapFrom(dto => dto.Id))
diff --git a/src/KpiGenerator/Models/ProjectOrganization.cs b/src/KpiGenerator/Models/ProjectOrganization.cs
new file mode 100644
index 0000000..741e0d5
--- /dev/null
+++ b/src/KpiGenerator/Models/ProjectOrganization.cs
@@ -0,0 +1,25 @@
+using System.Text.Json.Serialization;
+
+namespace Coscine.KpiGenerator.Models;
+
+public record ProjectOrganization
+{
+    /// <summary>
+    /// Organizaiton name from GitLab project's description
+    /// </summary>
+    /// <example>RWTH Aachen University</example>
+    [JsonPropertyName("Name")]
+    public string Name { get; init; } = null!;
+
+    /// <summary>
+    /// Organizaiton ROR URL from GitLab project's title
+    /// </summary>
+    /// <example>https://ror.org/04xfq0f34</example>
+    [JsonPropertyName("RorUrl")]
+    public string RorUrl { get; init; } = null!;
+
+    /// <summary>
+    /// Determines if the organization is Responsible for a given project.
+    /// </summary>
+    public bool Responsible { get; set; }
+}
\ No newline at end of file
diff --git a/src/KpiGenerator/Models/UserReport.cs b/src/KpiGenerator/Models/UserReport.cs
index e21ff76..08fd01c 100644
--- a/src/KpiGenerator/Models/UserReport.cs
+++ b/src/KpiGenerator/Models/UserReport.cs
@@ -6,8 +6,6 @@ public record UserReport
 
     public IReadOnlyList<Organization> Organizations { get; init; } = null!;
 
-    public IReadOnlyList<Organization> Institutes { get; init; } = null!;
-
     public IReadOnlyList<Discipline> Disciplines { get; init; } = null!;
 
     public IReadOnlyList<LoginProvider> LoginProviders { get; init; } = null!;
-- 
GitLab