public static ProjectViewModel Convert(Project project)
        {
            var projectViewModel = new ProjectViewModel();

            projectViewModel.Id          = project.Id;
            projectViewModel.Title       = project.Title;
            projectViewModel.Category    = project.Category;
            projectViewModel.Description = project.Description;
            projectViewModel.AccessList  = project.AccessIdentifiers.Select(
                (ai) => BuildAccessIdentityViewModel(ai)
                );

            projectViewModel.AssetsList = project.Assets.Where(a => a.IsArchived == false).Select(asset =>
            {
                var assetViewModel = new ProjectAssetViewModel();

                switch (asset.GetType().Name)
                {
                case "Note":
                    var assetNote = asset as Note;
                    assetViewModel.DisplayTitle = assetNote.Title;
                    break;

                case "Credential":
                    var assetCredential         = asset as Credential;
                    assetViewModel.DisplayTitle = assetCredential.Title;
                    assetViewModel.Login        = assetCredential.Login;
                    break;

                default:
                    return(null);
                }

                assetViewModel.AssetId    = asset.Id;
                assetViewModel.Created    = asset.Created != null ? asset.Created.ToString() : "Never";
                assetViewModel.CreatedBy  = asset.CreatedBy != null ? asset.CreatedBy.ToString() : string.Empty;
                assetViewModel.ModifiedBy = asset.ModifiedBy != null ? asset.ModifiedBy?.DisplayName?.ToString() : string.Empty;
                assetViewModel.IsArchived = asset.IsArchived;
                assetViewModel.Notes      = asset.Notes;

                if (asset.Modified != null && asset.Modified == DateTime.MinValue)
                {
                    assetViewModel.Modified = "Never";
                }
                else
                {
                    assetViewModel.Modified = asset.Modified != null ? asset.Modified.ToString() : "Never";
                }

                if (assetViewModel.DisplayTitle == null)
                {
                    assetViewModel.DisplayTitle = string.Empty;
                }

                return(assetViewModel);
            });

            return(projectViewModel);
        }
        public static ProjectAssetViewModel ConvertAsset(Asset asset)
        {
            var assetViewModel = new ProjectAssetViewModel();

            switch (asset.GetType().Name)
            {
            case "Note":
                var assetNote = asset as Note;
                assetViewModel.DisplayTitle = assetNote.Title;
                break;

            case "Credential":
                var assetCredential = asset as Credential;
                assetViewModel.DisplayTitle = assetCredential.Title;
                assetViewModel.Login        = assetCredential.Login;
                break;

            default:
                return(null);
            }

            assetViewModel.AssetId = asset.Id;
            assetViewModel.Created = asset.Created != null?asset.Created.ToString() : "Never";

            assetViewModel.CreatedBy = asset.CreatedBy != null?asset.CreatedBy.ToString() : string.Empty;

            assetViewModel.ModifiedBy = asset.ModifiedBy != null?asset.ModifiedBy?.DisplayName?.ToString() : string.Empty;

            assetViewModel.IsArchived = asset.IsArchived;
            assetViewModel.Notes      = asset.Notes;

            if (asset.Modified != null && asset.Modified == DateTime.MinValue)
            {
                assetViewModel.Modified = "Never";
            }
            else
            {
                assetViewModel.Modified = asset.Modified != null?asset.Modified.ToString() : "Never";
            }

            if (assetViewModel.DisplayTitle == null)
            {
                assetViewModel.DisplayTitle = string.Empty;
            }

            return(assetViewModel);
        }