Skip to content

Commit

Permalink
Merge pull request #156 from CSCfi/CSCTTV-4013-copublication-handling…
Browse files Browse the repository at this point in the history
…-fixes

CSCTTV-4013 co-publication handling fixes
  • Loading branch information
sarkikos authored Oct 23, 2024
2 parents f70b0c1 + 32f068b commit 9eb926c
Show file tree
Hide file tree
Showing 9 changed files with 110 additions and 10 deletions.
24 changes: 22 additions & 2 deletions aspnetcore/src/Repositories/Maps/PublicationProfile.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ public PublicationProfile()
.ForMember(dst => dst.ApcPaymentYear, opt =>opt.MapFrom(src => (DateTime?)(src.ApcPaymentYear.HasValue ? new DateTime(src.ApcPaymentYear.Value,1,1,0,0,0,DateTimeKind.Utc) : null)))
.ForMember(dst => dst.AuthorsText, opt => opt.MapFrom(src => src.AuthorsText))
.ForMember(dst => dst.DatabaseContributions, opt => opt.MapFrom(src => src.FactContributions))
.ForMember(dst => dst.orgPublicationDTOs, opt => opt.MapFrom(src => src.InverseDimPublicationNavigation))
.ForMember(dst => dst.OrgPublicationDatabaseContributionDTOs, opt => opt.MapFrom(src => src.InverseDimPublicationNavigation))
.ForMember(dst => dst.Format, opt => opt.MapFrom(src => src.PublicationTypeCode2Navigation))
.ForMember(dst => dst.ParentPublicationType, opt => opt.MapFrom(src => src.ParentPublicationTypeCodeNavigation))
.ForMember(dst => dst.DatabasePeerReviewed, opt => opt.MapFrom(src => src.PeerReviewed))
Expand Down Expand Up @@ -56,8 +56,11 @@ public PublicationProfile()
.ForMember(dst => dst.Doi, opt => opt.MapFrom(src => src.Doi))
.ForMember(dst => dst.DoiHandle, opt => opt.MapFrom(src => src.DoiHandle))
.ForMember(dst => dst.FieldsOfScience, opt => opt.MapFrom(src => src.FactDimReferencedataFieldOfSciences.Select(f => f.DimReferencedata)))
.ForMember(dst => dst.OrgPublicationFieldsOfScienceDTOs, opt => opt.MapFrom(src => src.InverseDimPublicationNavigation))
.ForMember(dst => dst.FieldsOfArt, opt => opt.MapFrom(src => src.DimReferencedataNavigation))
.ForMember(dst => dst.OrgPublicationFieldsOfArtDTOs, opt => opt.MapFrom(src => src.InverseDimPublicationNavigation))
.ForMember(dst => dst.Keywords, opt => opt.MapFrom(src => src.DimKeywords))
.ForMember(dst => dst.OrgPublicationKeywordDTOs, opt => opt.MapFrom(src => src.InverseDimPublicationNavigation))
.ForMember(dst => dst.InternationalPublication, opt => opt.MapFrom(src => src.InternationalPublication != 9 ? src.InternationalPublication == 1 : (bool?)null)) // 0 = kotim. 1 ulkom. 9 = ei tietoa.
.ForMember(dst => dst.Country, opt => opt.MapFrom(src => src.PublicationCountryCodeNavigation))
.ForMember(dst => dst.Language, opt => opt.MapFrom(src => src.LanguageCodeNavigation))
Expand All @@ -70,6 +73,7 @@ public PublicationProfile()
.ForMember(dst => dst.Preprint, opt => opt.MapFrom(src => src.DimLocallyReportedPubInfos.Where(i => i.SelfArchivedType == PreprintType)))
.ForMember(dst => dst.SelfArchived, opt => opt.MapFrom(src => src.DimLocallyReportedPubInfos.Where(i => i.SelfArchivedType == SelfArchivedType)))
.ForMember(dst => dst.ArtPublicationTypeCategory, opt => opt.MapFrom(src => src.DimReferencedata))
.ForMember(dst => dst.OrgPublicationArtPublicatonTypeCategoryDTOs, opt => opt.MapFrom(src => src.InverseDimPublicationNavigation))
.ForMember(dst => dst.Abstract, opt => opt.MapFrom(src => src.Abstract))
.ForMember(dst => dst.Created, opt => opt.MapFrom(src => src.Created))
.ForMember(dst => dst.Modified, opt => opt.MapFrom(src => src.Modified))
Expand Down Expand Up @@ -137,10 +141,26 @@ public PublicationProfile()
.ForMember(dst => dst.ArtPublicationRole, opt => opt.MapFrom(src => src.DimReferencedataActorRole))
.ForMember(dst => dst.ContributionType, opt => opt.MapFrom(src => src.ContributionType));

CreateProjection<DatabaseContext.Entities.DimPublication, OrgPublicationDTO>()
CreateProjection<DatabaseContext.Entities.DimPublication, OrgPublicationDatabaseContributionDTO>()
.ForMember(dst => dst.Id, opt => opt.MapFrom(src => src.Id))
.ForMember(dst => dst.DatabaseContributions, opt => opt.MapFrom(src => src.FactContributions));

CreateProjection<DatabaseContext.Entities.DimPublication, OrgPublicationKeywordDTO>()
.ForMember(dst => dst.Id, opt => opt.MapFrom(src => src.Id))
.ForMember(dst => dst.Keywords, opt => opt.MapFrom(src => src.DimKeywords));

CreateProjection<DatabaseContext.Entities.DimPublication, OrgPublicationArtPublicatonTypeCategoryDTO>()
.ForMember(dst => dst.Id, opt => opt.MapFrom(src => src.Id))
.ForMember(dst => dst.ArtPublicationTypeCategories, opt => opt.MapFrom(src => src.DimReferencedata));

CreateProjection<DatabaseContext.Entities.DimPublication, OrgPublicationFieldsOfScienceDTO>()
.ForMember(dst => dst.Id, opt => opt.MapFrom(src => src.Id))
.ForMember(dst => dst.FieldsOfScience, opt => opt.MapFrom(src => src.FactDimReferencedataFieldOfSciences.Select(f => f.DimReferencedata)));

CreateProjection<DatabaseContext.Entities.DimPublication, OrgPublicationFieldsOfArtDTO>()
.ForMember(dst => dst.Id, opt => opt.MapFrom(src => src.Id))
.ForMember(dst => dst.FieldsOfArt, opt => opt.MapFrom(src => src.DimReferencedataNavigation));

CreateProjection<DimName, Name>()
.AddTransform<string?>(s => string.IsNullOrWhiteSpace(s) ? null : s)
.ForMember(dst => dst.NameId, opt => opt.MapFrom(src => src.Id))
Expand Down
36 changes: 32 additions & 4 deletions aspnetcore/src/Repositories/PublicationIndexRepository.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
using CSC.PublicApi.DatabaseContext;
using CSC.PublicApi.Service.Models;
using CSC.PublicApi.Service.Models.Publication;
using Elasticsearch.Net;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Caching.Memory;
using Publication = CSC.PublicApi.Service.Models.Publication.Publication;
Expand Down Expand Up @@ -82,14 +81,43 @@ public override object PerformInMemoryOperation(object entity)
{
Publication publication = (Publication)entity;

if (publication.orgPublicationDTOs != null && publication.orgPublicationDTOs.Count > 0)
// Add data from OrgPublication DTOs, which hold data collected from publications related to a co-publication (yhteisjulkaisu/osajulkaisu)
if (publication.OrgPublicationDatabaseContributionDTOs != null && publication.OrgPublicationDatabaseContributionDTOs.Count > 0)
{
foreach (OrgPublicationDTO op in publication.orgPublicationDTOs.AsEnumerable().ToList())
foreach (OrgPublicationDatabaseContributionDTO op in publication.OrgPublicationDatabaseContributionDTOs.AsEnumerable().ToList())
{
publication.DatabaseContributions.AddRange(op.DatabaseContributions);
}
}

if (publication.OrgPublicationKeywordDTOs != null && publication.OrgPublicationKeywordDTOs.Count > 0)
{
foreach (OrgPublicationKeywordDTO kw in publication.OrgPublicationKeywordDTOs.AsEnumerable().ToList())
{
publication.Keywords.AddRange(kw.Keywords);
}
}
if (publication.OrgPublicationArtPublicatonTypeCategoryDTOs != null && publication.OrgPublicationArtPublicatonTypeCategoryDTOs.Count > 0)
{
foreach (OrgPublicationArtPublicatonTypeCategoryDTO ap in publication.OrgPublicationArtPublicatonTypeCategoryDTOs.AsEnumerable().ToList())
{
publication.ArtPublicationTypeCategory.AddRange(ap.ArtPublicationTypeCategories);
}
}
if (publication.OrgPublicationFieldsOfScienceDTOs != null && publication.OrgPublicationFieldsOfScienceDTOs.Count > 0)
{
foreach (OrgPublicationFieldsOfScienceDTO fs in publication.OrgPublicationFieldsOfScienceDTOs.AsEnumerable().ToList())
{
publication.FieldsOfScience.AddRange(fs.FieldsOfScience);
}
}
if (publication.OrgPublicationFieldsOfArtDTOs != null && publication.OrgPublicationFieldsOfArtDTOs.Count > 0)
{
foreach (OrgPublicationFieldsOfArtDTO fa in publication.OrgPublicationFieldsOfArtDTOs.AsEnumerable().ToList())
{
publication.FieldsOfArt.AddRange(fa.FieldsOfArt);
}
}

HandleIssnAndIsbn(publication);
HandleEmptyCollections(publication);
HandleOrganizations(publication);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
namespace CSC.PublicApi.Service.Models.Publication;

// DTO used when collecting ArtPublicationTypeCategories from OrgPublications (yhteisjulkaisu/osajulkaisu).
public class OrgPublicationArtPublicatonTypeCategoryDTO
{
public string? Id { get; set; }

public List<ReferenceData>? ArtPublicationTypeCategories { get; set; }
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
namespace CSC.PublicApi.Service.Models.Publication;

// DTO used when collecting DatabaseContributions from OrgPublications (yhteisjulkaisu/osajulkaisu).
public class OrgPublicationDTO
public class OrgPublicationDatabaseContributionDTO
{
public string? Id { get; set; }

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
namespace CSC.PublicApi.Service.Models.Publication;

// DTO used when collecting fields of art from OrgPublications (yhteisjulkaisu/osajulkaisu).
public class OrgPublicationFieldsOfArtDTO
{
public string? Id { get; set; }

public List<ReferenceData>? FieldsOfArt { get; set; }
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
namespace CSC.PublicApi.Service.Models.Publication;

// DTO used when collecting fields of science from OrgPublications (yhteisjulkaisu/osajulkaisu).
public class OrgPublicationFieldsOfScienceDTO
{
public string? Id { get; set; }

public List<ReferenceData>? FieldsOfScience { get; set; }
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
namespace CSC.PublicApi.Service.Models.Publication;

// DTO used when collecting Keywords from OrgPublications (yhteisjulkaisu/osajulkaisu).
public class OrgPublicationKeywordDTO
{
public string? Id { get; set; }

public List<Keyword>? Keywords { get; set; }
}
14 changes: 13 additions & 1 deletion aspnetcore/src/Service.Models/Publication/Publication.cs
Original file line number Diff line number Diff line change
Expand Up @@ -295,7 +295,19 @@ public class Publication
public List<FactContribution>? DatabaseContributions { get; set; }

[Ignore]
public List<OrgPublicationDTO>? orgPublicationDTOs { get; set; }
public List<OrgPublicationDatabaseContributionDTO>? OrgPublicationDatabaseContributionDTOs { get; set; }

[Ignore]
public List<OrgPublicationKeywordDTO>? OrgPublicationKeywordDTOs { get; set; }

[Ignore]
public List<OrgPublicationArtPublicatonTypeCategoryDTO>? OrgPublicationArtPublicatonTypeCategoryDTOs { get; set; }

[Ignore]
public List<OrgPublicationFieldsOfScienceDTO>? OrgPublicationFieldsOfScienceDTOs { get; set; }

[Ignore]
public List<OrgPublicationFieldsOfArtDTO>? OrgPublicationFieldsOfArtDTOs { get; set; }

[Ignore]
public bool? DatabasePeerReviewed { get; set; }
Expand Down
8 changes: 6 additions & 2 deletions aspnetcore/test/Indexer.Tests/Maps/PublicationProfileTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ public void ProjectTo_DimPublication_ShouldBeMappedToPublication_IsOrgPublicatio
model_coPublication.IsCoPublication = true;
model_coPublication.IsOrgPublication = false;
model_coPublication.OrgPublicationIDs = new List<string> { "org publication id" };
model_coPublication.orgPublicationDTOs = new List<OrgPublicationDTO> {
model_coPublication.OrgPublicationDTOs = new List<OrgPublicationDTO> {
new OrgPublicationDTO {
Id = "org publication id",
DatabaseContributions = new () {
Expand Down Expand Up @@ -651,7 +651,11 @@ private Publication GetModel()
OrgPublicationIDs = new List<string> {},
Created = new DateTime(2023, 3, 10, 10, 43, 00),
Modified = new DateTime(2023, 3, 10, 10, 44, 00),
orgPublicationDTOs = new()
OrgPublicationDatabaseContributionDTOs = new(),
OrgPublicationArtPublicatonTypeCategoryDTOs = new(),
OrgPublicationFieldsOfArtDTOs = new(),
OrgPublicationFieldsOfScienceDTOs = new(),
OrgPublicationKeywordDTOs = new()
};
}
}

0 comments on commit 9eb926c

Please sign in to comment.