Skip to content
Snippets Groups Projects
Select Git revision
  • Topic/1294-contactChangeFunctionality
  • master default protected
  • dev protected
  • Issue/3003-stsInstitute
  • gitkeep
  • Issue/2449-GuidPidSlugToProjectSettings
  • Issue/2309-docs
  • Fix/xxxx-updateDependencies
  • Issue/2364-testingKpiParser
  • Issue/2287-guestRole
  • Test/xxxx-pipelineTriggers
  • Issue/2102-gitLabResTypeRCV
  • Issue/2278-gitlabToS
  • Issue/2101-gitLabResTypeUi
  • Issue/1788-extractionCronjob
  • Issue/2183-kpiGeneratorResource
  • Issue/2222-resourceDateCreated
  • Issue/2221-projectDateCreated
  • Issue/1321-pidEnquiryOverhaul
  • Issue/1999-gitlabResourcesLib
  • Issue/1951-quotaImplementation
  • v2.22.0
  • v2.20.0
  • v2.19.1
  • v2.19.0
  • v2.18.0
  • v2.17.0
  • v2.16.2
  • v2.16.1
  • v2.16.0
  • v2.15.0
  • v2.14.0
  • v2.13.0
  • v2.12.1
  • v2.12.0
  • v2.11.1
  • v2.11.0
  • v2.10.1
  • v2.10.0
  • v2.9.1
  • v2.9.0
41 results

ActivatedFeaturesModel.cs

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    ActivatedFeaturesModel.cs 4.34 KiB
    using Coscine.Database.DataModel;
    using Coscine.Database.Util;
    using Microsoft.EntityFrameworkCore;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Linq.Expressions;
    
    namespace Coscine.Database.Models
    {
        public class ActivatedFeaturesModel : DatabaseModel<ActivatedFeature>
        {
            public override Expression<Func<ActivatedFeature, Guid>> GetIdFromObject()
            {
                return databaseObject => databaseObject.Id;
            }
    
            public override DbSet<ActivatedFeature> GetITableFromDatabase(CoscineDB db)
            {
                return db.ActivatedFeatures;
            }
    
            public override void SetObjectId(ActivatedFeature databaseObject, Guid id)
            {
                databaseObject.Id = id;
            }
    
            public bool IsFeatureActive(Guid projectId, string sharepointId)
            {
                return GetAllWhere((activatedFeatures) => activatedFeatures.ProjectId == projectId
                            && activatedFeatures.Feature.SharepointId == sharepointId).Count() >= 1;
            }
    
            public bool IsFeatureActive(Guid projectId, Guid featureId)
            {
                return GetAllWhere((activatedFeatures) => activatedFeatures.ProjectId == projectId
                            && activatedFeatures.FeatureId == featureId).Count() >= 1;
            }
    
            public void ActivateFeature(Guid projectId, Guid featureId)
            {
                if (!IsFeatureActive(projectId, featureId))
                {
                    Insert(new ActivatedFeature
                        {
                            ProjectId = projectId,
                            FeatureId = featureId
                        });
                }
            }
    
            public void DeactivateFeature(Guid projectId, Guid featureId)
            {
                if (IsFeatureActive(projectId, featureId))
                {
                    foreach(var feature in GetAllWhere((activatedFeatures) => activatedFeatures.FeatureId == featureId
                            && activatedFeatures.ProjectId == projectId)) {
                        Delete(feature);
                    }
                    
                }
            }
    
            public void ActivateAllFeatures(Project project)
            {
                ActivateAllFeatures(project.Id);
            }
    
            public void ActivateAllFeatures(Guid projectId)
            {
                foreach (var feature in GetInactiveFeatures(projectId))
                {
                    ActivateFeature(projectId, feature.Id);
                }
            }
            public void DeactivateAllFeatures(Project project)
            {
                DeactivateAllFeatures(project.Id);
            }
    
            public void DeactivateAllFeatures(Guid projectId)
            {
                foreach (var feature in GetActiveFeatures(projectId))
                {
                    DeactivateFeature(projectId, feature.Id);
                }
            }
    
            public IEnumerable<Feature> GetInactiveFeatures(Project project)
            {
                return GetInactiveFeatures(project.Id);
            }
    
            public IEnumerable<Feature> GetInactiveFeatures(Guid projectId)
            {
                return DatabaseConnection.ConnectToDatabase((db) =>
                {
                    return (
                        from features in db.Features
                        where !(
                            from activatedFeatures in db.ActivatedFeatures
                            join feature in db.Features on activatedFeatures.FeatureId equals feature.Id
                            join project in db.Projects on activatedFeatures.ProjectId equals project.Id
                            where project.Id == projectId
                            select feature
                        ).Contains(features)
                        select features).Distinct().ToList();
                });
            }
    
            public IEnumerable<Feature> GetActiveFeatures(Project project)
            {
                return GetActiveFeatures(project.Id);
            }
    
            public IEnumerable<Feature> GetActiveFeatures(Guid projectId)
            {
                return DatabaseConnection.ConnectToDatabase((db) =>
                {
                    return (
                        from activatedFeatures in db.ActivatedFeatures
                        join feature in db.Features on activatedFeatures.FeatureId equals feature.Id
                        join project in db.Projects on activatedFeatures.ProjectId equals project.Id
                        where project.Id == projectId
                        select feature).Distinct().ToList();
                });
            }
        }
    }