Skip to content

Commit 980ea7c

Browse files
committed
Modify publication handling, include only the parent of co-publication.
1 parent 05fd19c commit 980ea7c

File tree

4 files changed

+43
-19
lines changed

4 files changed

+43
-19
lines changed

aspnetcore/src/api.Tests/Services_Tests/TtvSqlServiceTest.cs

+21-12
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
1-
using Xunit;
2-
using api.Services;
3-
using api.Models.Common;
4-
using api.Models.Ttv;
1+
using Xunit;
2+
using api.Services;
3+
using api.Models.Common;
4+
using api.Models.Ttv;
55
using api.Models.ProfileEditor.Items;
66
using System;
77
using System.Collections.Generic;
88

9-
namespace api.Tests
10-
{
11-
[Collection("Get SQL query from TtvSqlService")]
9+
namespace api.Tests
10+
{
11+
[Collection("Get SQL query from TtvSqlService")]
1212
public class TtvSqlServiceTests
1313
{
1414
public FactFieldValue GetFactFieldValueForTest()
@@ -489,10 +489,19 @@ public void Test_getSqlQuery_Select_FactContribution_01()
489489
TtvSqlService ttvSqlService = new();
490490
string expectedSqlString =
491491
$@"SELECT DISTINCT
492-
dim_research_activity_id AS 'DimResearchActivityId',
493-
dim_research_dataset_id AS 'DimResearchDatasetId',
494-
dim_publication_id AS 'DimPublicationId'
495-
FROM fact_contribution WHERE dim_name_id = 1234 AND (dim_research_activity_id!=-1 OR dim_research_dataset_id!=-1 OR dim_publication_id!=-1)";
492+
fc.dim_research_activity_id AS 'DimResearchActivityId',
493+
fc.dim_research_dataset_id AS 'DimResearchDatasetId',
494+
fc.dim_publication_id AS 'DimPublicationId',
495+
COALESCE(dp.dim_publication_id, -1) AS 'CoPublication_Parent_DimPublicationId'
496+
FROM
497+
fact_contribution AS fc
498+
JOIN
499+
dim_publication AS dp ON fc.dim_publication_id=dp.id
500+
WHERE
501+
fc.dim_name_id = 1234 AND
502+
(
503+
fc.dim_research_activity_id!=-1 OR fc.dim_research_dataset_id!=-1 OR fc.dim_publication_id!=-1
504+
)";
496505
// Act
497506
string actualSqlString = ttvSqlService.GetSqlQuery_Select_FactContribution(1234);
498507
// Assert
@@ -898,5 +907,5 @@ public void GetSqlQuery_Select_GetHiddenInUserprofile()
898907
// Assert
899908
Assert.Equal(expectedSqlString, actualSqlString);
900909
}
901-
}
910+
}
902911
}

aspnetcore/src/api/Models/Common/FactContributionTableMinimalDTO.cs

+1
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,6 @@ public partial class FactContributionTableMinimalDTO
55
public int DimResearchActivityId { get; set; }
66
public int DimResearchDatasetId { get; set; }
77
public int DimPublicationId { get; set; }
8+
public int CoPublication_Parent_DimPublicationId { get; set; }
89
}
910
}

aspnetcore/src/api/Services/TtvSqlService.cs

+13-4
Original file line numberDiff line numberDiff line change
@@ -704,10 +704,19 @@ FROM dim_education
704704
public string GetSqlQuery_Select_FactContribution(int dimNameId)
705705
{
706706
return $@"SELECT DISTINCT
707-
dim_research_activity_id AS 'DimResearchActivityId',
708-
dim_research_dataset_id AS 'DimResearchDatasetId',
709-
dim_publication_id AS 'DimPublicationId'
710-
FROM fact_contribution WHERE dim_name_id = {dimNameId} AND (dim_research_activity_id!=-1 OR dim_research_dataset_id!=-1 OR dim_publication_id!=-1)";
707+
fc.dim_research_activity_id AS 'DimResearchActivityId',
708+
fc.dim_research_dataset_id AS 'DimResearchDatasetId',
709+
fc.dim_publication_id AS 'DimPublicationId',
710+
COALESCE(dp.dim_publication_id, -1) AS 'CoPublication_Parent_DimPublicationId'
711+
FROM
712+
fact_contribution AS fc
713+
JOIN
714+
dim_publication AS dp ON fc.dim_publication_id=dp.id
715+
WHERE
716+
fc.dim_name_id = {dimNameId} AND
717+
(
718+
fc.dim_research_activity_id!=-1 OR fc.dim_research_dataset_id!=-1 OR fc.dim_publication_id!=-1
719+
)";
711720
}
712721

713722
// Return SQL SELECT statement for br_participates_in_funding_group

aspnetcore/src/api/Services/UserProfileService.cs

+8-3
Original file line numberDiff line numberDiff line change
@@ -836,16 +836,21 @@ public async Task AddTtvDataToUserProfile(DimKnownPerson dimKnownPerson, DimUser
836836
foreach (FactContributionTableMinimalDTO fc in factContributions)
837837
{
838838
// publication
839-
if (fc.DimPublicationId != -1 && !existingPublicationIds.Contains(fc.DimPublicationId))
839+
//
840+
// Co-publications have multiple rows in table fact_contribution. Here only the "main" publication should be included.
841+
// If FactContributionTableMinimalDTO.CoPublication_Parent_DimPublicationId has value (other than -1), that must be used.
842+
// Otherwise FactContributionTableMinimalDTO.DimPublicationId must be used.
843+
int publicationId = fc.CoPublication_Parent_DimPublicationId > 0 ? fc.CoPublication_Parent_DimPublicationId : fc.DimPublicationId;
844+
if (publicationId != -1 && !existingPublicationIds.Contains(publicationId))
840845
{
841846
FactFieldValue factFieldValuePublication = this.GetEmptyFactFieldValue();
842847
factFieldValuePublication.DimUserProfileId = dimUserProfile.Id;
843848
factFieldValuePublication.DimFieldDisplaySettingsId = dimFieldDisplaySetting_publication.Id;
844-
factFieldValuePublication.DimPublicationId = fc.DimPublicationId;
849+
factFieldValuePublication.DimPublicationId = publicationId;
845850
factFieldValuePublication.DimRegisteredDataSourceId = dimName.DimRegisteredDataSourceId;
846851
_ttvContext.FactFieldValues.Add(factFieldValuePublication);
847852
// Prevent duplicate key error with publications
848-
existingPublicationIds.Add(fc.DimPublicationId);
853+
existingPublicationIds.Add(publicationId);
849854
}
850855

851856
// research activity

0 commit comments

Comments
 (0)