Exemplo n.º 1
0
        /// <summary>
        ///     Diese Methode wurde nach den genauen schriftlichen Vorgaben des BARs implementiert.
        ///     Diese Vorgaben sind im Anwendungshandbuch enthalten und finden sich auch unter dem folgenden Link:
        /// </summary>
        public async Task <CacheRetentionCategory> GetRetentionCategory(ElasticArchiveRecord archiveRecord, string rolePublicClient,
                                                                        IOrderDataAccess orderDataAccess)
        {
            var downloadAccessTokens = archiveRecord.PrimaryDataDownloadAccessTokens;

            if (downloadAccessTokens.Contains(AccessRoles.RoleOe2) || downloadAccessTokens.Exists(t => t.StartsWith("FG_")))
            {
                return(CacheRetentionCategory.UsageCopyPublic);
            }

            if (downloadAccessTokens.Contains("DDS") && archiveRecord.ProtectionEndDate?.Date.Date < DateTime.Now.Date)
            {
                return(CacheRetentionCategory.UsageCopyPublic);
            }

            if (rolePublicClient == AccessRoles.RoleBAR)
            {
                return(CacheRetentionCategory.UsageCopyBarOrAS);
            }

            if (int.TryParse(archiveRecord.ArchiveRecordId, out var veId) && await orderDataAccess.HasEinsichtsbewilligung(veId))
            {
                return(CacheRetentionCategory.UsageCopyEB);
            }

            if (rolePublicClient == AccessRoles.RoleAS)
            {
                return(CacheRetentionCategory.UsageCopyBarOrAS);
            }

            return(CacheRetentionCategory.UsageCopyAB);
        }