diff --git a/src/ClientServer/Controllers/Core/Init.cs b/src/ClientServer/Controllers/Core/Init.cs
index e13624169b5b486eeddc2d9c9f91e870be50c67c..a352027c30848cec7bff1c1e4d51267fabaa43bd 100644
--- a/src/ClientServer/Controllers/Core/Init.cs
+++ b/src/ClientServer/Controllers/Core/Init.cs
@@ -312,666 +312,666 @@ namespace ClientServer.Controllers.Core
         }
 
 
-        [HttpGet("migrate/markdown")]
-        public void MigrateMarkdownFiles()
-        {
-            var basePath = Files.GetUploadFilePath(UploadDirType.MarkdownAssets);
-
-            var exDescriptions = _context.ExerciseDescriptions
-                    .Include(p => p.Assets)
-                    .Where(p => p.Assets.Count > 0)
-                    .ToList()
-                ;
-
-            int count = 0;
-            foreach (var exerciseDescription in exDescriptions)
-            {
-                foreach (var descriptionAsset in exerciseDescription.Assets)
-                {
-                    //create the real file
-
-                    try
-                    {
-                        using (var transaction = _context.Database.BeginTransaction())
-                        {
-                            try
-                            {
-                                var fileRef = new FileReferenceMarkdownAsset()
-                                {
-                                    OriginalName = descriptionAsset.DisplayName,
-                                    CreatedAt = (DateTime) _context.Entry(descriptionAsset)
-                                        .Property(YapexDbContext.CreatedAt)
-                                        .CurrentValue,
-                                    LastUpdatedAt = (DateTime) _context.Entry(descriptionAsset)
-                                        .Property(YapexDbContext.LastUpdatedAt).CurrentValue,
-                                    MimeType = descriptionAsset.MimeType,
-                                    SizeInBytes = descriptionAsset.Content.Length,
-                                    Hash = "",
-                                };
-
-                                var conn = new ExerciseDescriptionWithFileAsAssetReference()
-                                {
-                                    ExerciseDescription = exerciseDescription,
-                                    FileReferenceMarkdownAsset = fileRef
-                                };
-
-                                _context.ExerciseDescriptionWithFileAsAssetReferences.Add(conn);
-                                _context.SaveChanges();
-
-                                if (fileRef.Id <= 0)
-                                {
-                                    throw new Exception("fileRef must be tracked in db context");
-                                }
-
-                                try
-                                {
-                                    var info = new FileInfo(Path.Combine(basePath, fileRef.Id.ToString()));
-
-                                    if (info.Exists)
-                                    {
-                                        throw new Exception("file already exists");
-                                    }
-
-                                    using (var stream = new FileStream(info.FullName, FileMode.Create))
-                                    {
-                                        stream.Write(descriptionAsset.Content, 0, descriptionAsset.Content.Length);
-
-                                        using (var md5 = MD5.Create())
-                                        {
-                                            var result = md5.ComputeHash(descriptionAsset.Content);
-                                            fileRef.Hash = String.Join(String.Empty,
-                                                result.Select(p => p.ToString("x2")));
-                                        }
-                                    }
-                                }
-                                catch (Exception e)
-                                {
-                                    Console.WriteLine(
-                                        $"[ERROR] error creating file name: {descriptionAsset.DisplayName}");
-                                    Console.WriteLine(e.Message);
-                                    throw;
-                                }
-
-
-                                _context.SaveChanges();
-                                transaction.Commit();
-                            }
-                            catch (Exception e)
-                            {
-                                transaction.Rollback();
-                                Console.WriteLine(e);
-                                throw;
-                            }
-                        }
-
-                        count++;
-                    }
-                    catch (Exception e)
-                    {
-                        Console.WriteLine(e);
-                        throw;
-                    }
-                }
-            }
-
-
-            Response.WriteAsync("OK -" + count);
-        }
-
-
-        [HttpGet("migrate/ex/markdown")]
-        public void MigrateMarkdownExerciseDescriptionContent()
-        {
-            var allDescriptions = _context.ExerciseDescriptions
-                .Include(p => p.AssetReferences)
-                .ThenInclude(p => p.FileReferenceMarkdownAsset)
-                .Include(p => p.Assets)
-                .ToList();
-
-
-            int count = 0;
-            int count2 = 0;
-
-            using (var transaction = _context.Database.BeginTransaction())
-            {
-                try
-                {
-                    foreach (var exerciseDescription in allDescriptions)
-                    {
-                        if (exerciseDescription.Content.Contains(Constants.MarkdownAssetFileUrlPrefix))
-                        {
-
-                            foreach (var asset in exerciseDescription.Assets)
-                            {
-                                //find asset ref
-
-                                var assetRef = exerciseDescription.AssetReferences.FirstOrDefault(p =>
-                                    p.FileReferenceMarkdownAsset.OriginalName == asset.DisplayName &&
-                                    p.FileReferenceMarkdownAsset.SizeInBytes == asset.Content.Length);
-
-                                if (assetRef == null)
-                                {
-                                    throw new Exception($"could not find asset ref for asset id {asset.Id} for ex desc {exerciseDescription.Id}");
-                                }
-
-                                exerciseDescription.Content = exerciseDescription.Content.Replace(asset.AssetUrl,
-                                    Constants.MarkdownAssetFileUrlPrefix + assetRef.FileReferenceMarkdownAssetId);
-                                count2++;
-                            }
-                    
-                            count++;
-
-                        }
-                    }
-
-                    _context.SaveChanges();
-                    transaction.Commit();
-                }
-                catch (Exception e)
-                {
-                    transaction.Rollback();
-                    Console.WriteLine(e);
-                    throw;
-                }
-            }
-            
-            
-            Response.WriteAsync($"OK - {count} - ${count2}");
-        }
-
-
-        [HttpGet("migrate/tests")]
-        public void MigrateTestFiles()
-        {
-            var basePath = Files.GetUploadFilePath(UploadDirType.TestAssets);
-
-            var testsWithAssets = _context.Tests
-                    .Include(p => p.TestAssets)
-                    .Where(p => p.TestAssets.Count > 0)
-                    .ToList()
-                ;
-
-            int count = 0;
-            foreach (var testWithAsset in testsWithAssets)
-            {
-                foreach (var testAsset in testWithAsset.TestAssets)
-                {
-                    //create the real file
-
-                    try
-                    {
-                        using (var transaction = _context.Database.BeginTransaction())
-                        {
-                            try
-                            {
-                                var fileRef = new FileReferenceTestAsset()
-                                {
-                                    OriginalName = testAsset.DisplayName,
-                                    CreatedAt = (DateTime) _context.Entry(testAsset)
-                                        .Property(YapexDbContext.CreatedAt)
-                                        .CurrentValue,
-                                    LastUpdatedAt = (DateTime) _context.Entry(testAsset)
-                                        .Property(YapexDbContext.LastUpdatedAt).CurrentValue,
-                                    MimeType = testAsset.MimeType,
-                                    SizeInBytes = testAsset.Content.Length,
-                                    Hash = "",
-                                };
-
-                                var conn = new TestWithFileAsAssetReference()
-                                {
-                                    Test = testWithAsset,
-                                    FileReferenceTestAsset = fileRef
-                                };
-
-                                _context.TestWithFileAsAssetReferences.Add(conn);
-                                _context.SaveChanges();
-
-                                if (fileRef.Id <= 0)
-                                {
-                                    throw new Exception("fileRef must be tracked in db context");
-                                }
-
-                                try
-                                {
-                                    var info = new FileInfo(Path.Combine(basePath, fileRef.Id.ToString()));
-
-                                    if (info.Exists)
-                                    {
-                                        throw new Exception($"file already exists: {info.FullName}");
-                                    }
-
-                                    using (var stream = new FileStream(info.FullName, FileMode.Create))
-                                    {
-                                        stream.Write(testAsset.Content, 0, testAsset.Content.Length);
-
-                                        using (var md5 = MD5.Create())
-                                        {
-                                            var result = md5.ComputeHash(testAsset.Content);
-                                            fileRef.Hash = String.Join(String.Empty,
-                                                result.Select(p => p.ToString("x2")));
-                                        }
-                                    }
-                                }
-                                catch (Exception e)
-                                {
-                                    Console.WriteLine(
-                                        $"[ERROR] error creating file name: {testAsset.DisplayName}");
-                                    Console.WriteLine(e.Message);
-                                    throw;
-                                }
-
-
-                                _context.SaveChanges();
-                                transaction.Commit();
-                            }
-                            catch (Exception e)
-                            {
-                                transaction.Rollback();
-                                Console.WriteLine(e);
-                                throw;
-                            }
-                        }
-
-                        count++;
-                    }
-                    catch (Exception e)
-                    {
-                        Console.WriteLine(e);
-                        throw;
-                    }
-                }
-            }
-
-
-            Response.WriteAsync("OK -" + count);
-        }
-
-
-        [HttpGet("migrate/custom/tests")]
-        public void MigrateCustomTestAssets()
-        {
-            var basePath = Files.GetUploadFilePath(UploadDirType.UserAssets);
-
-            var testsWithAssets = _context.CustomTest
-                    .Include(p => p.TestAssets)
-                    .Where(p => p.TestAssets.Count > 0)
-                    .ToList()
-                ;
-
-            int count = 0;
-
-            foreach (var customTest in testsWithAssets)
-            {
-                foreach (var customTestAsset in customTest.TestAssets)
-                {
-                    //create the real file
-
-                    try
-                    {
-                        using (var transaction = _context.Database.BeginTransaction())
-                        {
-                            try
-                            {
-                                var fileRef = new FileReferenceUserFileAsset()
-                                {
-                                    OriginalName = customTestAsset.DisplayName,
-                                    CreatedAt = (DateTime) _context.Entry(customTestAsset)
-                                        .Property(YapexDbContext.CreatedAt)
-                                        .CurrentValue,
-                                    LastUpdatedAt = (DateTime) _context.Entry(customTestAsset)
-                                        .Property(YapexDbContext.LastUpdatedAt).CurrentValue,
-                                    MimeType = customTestAsset.MimeType,
-                                    SizeInBytes = customTestAsset.Content.Length,
-                                    Hash = "",
-                                };
-
-                                var conn = new CustomTestWithFileAsAssetReference()
-                                {
-                                    CustomTest = customTest,
-                                    FileReferenceUserFileAsset = fileRef
-                                };
-
-                                _context.CustomTestWithFileAsAssetReferences.Add(conn);
-                                _context.SaveChanges();
-
-                                if (fileRef.Id <= 0)
-                                {
-                                    throw new Exception("fileRef must be tracked in db context");
-                                }
-
-                                try
-                                {
-                                    var info = new FileInfo(Path.Combine(basePath, fileRef.Id.ToString()));
-
-                                    if (info.Exists)
-                                    {
-                                        throw new Exception($"file already exists: {info.FullName}");
-                                    }
-
-                                    using (var stream = new FileStream(info.FullName, FileMode.Create))
-                                    {
-                                        stream.Write(customTestAsset.Content, 0, customTestAsset.Content.Length);
-
-                                        using (var md5 = MD5.Create())
-                                        {
-                                            var result = md5.ComputeHash(customTestAsset.Content);
-                                            fileRef.Hash = String.Join(String.Empty,
-                                                result.Select(p => p.ToString("x2")));
-                                        }
-                                    }
-                                }
-                                catch (Exception e)
-                                {
-                                    Console.WriteLine(
-                                        $"[ERROR] error creating file name: {customTestAsset.DisplayName}");
-                                    Console.WriteLine(e.Message);
-                                    throw;
-                                }
-
-
-                                _context.SaveChanges();
-                                transaction.Commit();
-                            }
-                            catch (Exception e)
-                            {
-                                transaction.Rollback();
-                                Console.WriteLine(e);
-                                throw;
-                            }
-                        }
-
-                        count++;
-                    }
-                    catch (Exception e)
-                    {
-                        Console.WriteLine(e);
-                        throw;
-                    }
-                }
-                
-            }
-            
-            Response.WriteAsync("OK -" + count);
-            
-        }
-        
-        
-        [HttpGet("migrate/custom/project/description")]
-        public void MigrateCustomProjectDescriptionAssets()
-        {
-            var basePath = Files.GetUploadFilePath(UploadDirType.UserAssets);
-
-            var customProjectDescriptions = _context.CustomProjectDescriptions
-                    .Include(p => p.Assets)
-                    .Where(p => p.Assets.Count > 0)
-                    .ToList()
-                ;
-
-            int count = 0;
-
-            foreach (var customProjectDescription in customProjectDescriptions)
-            {
-                foreach (var customAsset in customProjectDescription.Assets)
-                {
-                    //create the real file
-
-                    try
-                    {
-                        using (var transaction = _context.Database.BeginTransaction())
-                        {
-                            try
-                            {
-                                var fileRef = new FileReferenceUserFileAsset()
-                                {
-                                    OriginalName = customAsset.DisplayName,
-                                    CreatedAt = (DateTime) _context.Entry(customAsset)
-                                        .Property(YapexDbContext.CreatedAt)
-                                        .CurrentValue,
-                                    LastUpdatedAt = (DateTime) _context.Entry(customAsset)
-                                        .Property(YapexDbContext.LastUpdatedAt).CurrentValue,
-                                    MimeType = customAsset.MimeType,
-                                    SizeInBytes = customAsset.Content.Length,
-                                    Hash = "",
-                                };
-
-                                var conn = new CustomProjectDescriptionWithFileAsAssetReference()
-                                {
-                                    CustomProjectDescription = customProjectDescription,
-                                    FileReferenceUserFileAsset = fileRef
-                                };
-
-                                _context.CustomProjectDescriptionWithFileAsAssetReferences.Add(conn);
-                                _context.SaveChanges();
-
-                                if (fileRef.Id <= 0)
-                                {
-                                    throw new Exception("fileRef must be tracked in db context");
-                                }
-
-                                try
-                                {
-                                    var info = new FileInfo(Path.Combine(basePath, fileRef.Id.ToString()));
-
-                                    if (info.Exists)
-                                    {
-                                        throw new Exception($"file already exists: {info.FullName}");
-                                    }
-
-                                    using (var stream = new FileStream(info.FullName, FileMode.Create))
-                                    {
-                                        stream.Write(customAsset.Content, 0, customAsset.Content.Length);
-
-                                        using (var md5 = MD5.Create())
-                                        {
-                                            var result = md5.ComputeHash(customAsset.Content);
-                                            fileRef.Hash = String.Join(String.Empty,
-                                                result.Select(p => p.ToString("x2")));
-                                        }
-                                    }
-                                }
-                                catch (Exception e)
-                                {
-                                    Console.WriteLine(
-                                        $"[ERROR] error creating file name: {customAsset.DisplayName}");
-                                    Console.WriteLine(e.Message);
-                                    throw;
-                                }
-
-
-                                _context.SaveChanges();
-                                transaction.Commit();
-                            }
-                            catch (Exception e)
-                            {
-                                transaction.Rollback();
-                                Console.WriteLine(e);
-                                throw;
-                            }
-                        }
-
-                        count++;
-                    }
-                    catch (Exception e)
-                    {
-                        Console.WriteLine(e);
-                        throw;
-                    }
-                }
-                
-            }
-            
-            Response.WriteAsync("OK -" + count);
-            
-        }
-        
-        [HttpGet("migrate/custom/project/markdown")]
-        public void MigrateMarkdownCustomProjectDescriptionContent()
-        {
-            
-            var allDescriptions = _context.CustomProjectDescriptions
-                .Include(p => p.AssetReferences)
-                .ThenInclude(p => p.FileReferenceUserFileAsset)
-                .Include(p => p.Assets)
-                .ToList();
-
-
-            int count = 0;
-            int count2 = 0;
-
-            using (var transaction = _context.Database.BeginTransaction())
-            {
-                try
-                {
-                    foreach (var customProjectDescription in allDescriptions)
-                    {
-                        if (customProjectDescription.Content.Contains(Constants.MarkdownAssetFileUrlPrefix))
-                        {
-
-                            foreach (var asset in customProjectDescription.Assets)
-                            {
-                                //find asset ref
-
-                                var assetRef = customProjectDescription.AssetReferences.FirstOrDefault(p =>
-                                    p.FileReferenceUserFileAsset.OriginalName == asset.DisplayName &&
-                                    p.FileReferenceUserFileAsset.SizeInBytes == asset.Content.Length);
-
-                                if (assetRef == null)
-                                {
-                                    throw new Exception($"could not find asset ref for asset id {asset.Id} for ex desc {customProjectDescription.Id}");
-                                }
-
-                                customProjectDescription.Content = customProjectDescription.Content.Replace(asset.AssetUrl,
-                                    Constants.MarkdownAssetFileUrlPrefix + assetRef.FileReferenceUserFileAssetId);
-                                count2++;
-                            }
-                    
-                            count++;
-
-                        }
-                    }
-
-                    _context.SaveChanges();
-                    transaction.Commit();
-                }
-                catch (Exception e)
-                {
-                    transaction.Rollback();
-                    Console.WriteLine(e);
-                    throw;
-                }
-            }
-            
-            
-            Response.WriteAsync($"OK - {count} - ${count2}");
-        }
-        
-        [HttpGet("migrate/custom/project/tests")]
-        public void MigrateCustomProjectTestAssets()
-        {
-            var basePath = Files.GetUploadFilePath(UploadDirType.UserAssets);
-
-            var testsWithAssets = _context.CustomProjectTests
-                    .Include(p => p.TestAssets)
-                    .Where(p => p.TestAssets.Count > 0)
-                    .ToList()
-                ;
-
-            int count = 0;
-
-            foreach (var customProjectTest in testsWithAssets)
-            {
-                foreach (var customProjectTestAsset in customProjectTest.TestAssets)
-                {
-                    //create the real file
-
-                    try
-                    {
-                        using (var transaction = _context.Database.BeginTransaction())
-                        {
-                            try
-                            {
-                                var fileRef = new FileReferenceUserFileAsset()
-                                {
-                                    OriginalName = customProjectTestAsset.DisplayName,
-                                    CreatedAt = (DateTime) _context.Entry(customProjectTestAsset)
-                                        .Property(YapexDbContext.CreatedAt)
-                                        .CurrentValue,
-                                    LastUpdatedAt = (DateTime) _context.Entry(customProjectTestAsset)
-                                        .Property(YapexDbContext.LastUpdatedAt).CurrentValue,
-                                    MimeType = customProjectTestAsset.MimeType,
-                                    SizeInBytes = customProjectTestAsset.Content.Length,
-                                    Hash = "",
-                                };
-
-                                var conn = new CustomProjectTestWithFileAsAssetReference()
-                                {
-                                    CustomProjectTest = customProjectTest,
-                                    FileReferenceUserFileAsset = fileRef
-                                };
-
-                                _context.CustomProjectTestWithFileAsAssetReferences.Add(conn);
-                                _context.SaveChanges();
-
-                                if (fileRef.Id <= 0)
-                                {
-                                    throw new Exception("fileRef must be tracked in db context");
-                                }
-
-                                try
-                                {
-                                    var info = new FileInfo(Path.Combine(basePath, fileRef.Id.ToString()));
-
-                                    if (info.Exists)
-                                    {
-                                        throw new Exception($"file already exists: {info.FullName}");
-                                    }
-
-                                    using (var stream = new FileStream(info.FullName, FileMode.Create))
-                                    {
-                                        stream.Write(customProjectTestAsset.Content, 0, customProjectTestAsset.Content.Length);
-
-                                        using (var md5 = MD5.Create())
-                                        {
-                                            var result = md5.ComputeHash(customProjectTestAsset.Content);
-                                            fileRef.Hash = String.Join(String.Empty,
-                                                result.Select(p => p.ToString("x2")));
-                                        }
-                                    }
-                                }
-                                catch (Exception e)
-                                {
-                                    Console.WriteLine(
-                                        $"[ERROR] error creating file name: {customProjectTestAsset.DisplayName}");
-                                    Console.WriteLine(e.Message);
-                                    throw;
-                                }
-
-
-                                _context.SaveChanges();
-                                transaction.Commit();
-                            }
-                            catch (Exception e)
-                            {
-                                transaction.Rollback();
-                                Console.WriteLine(e);
-                                throw;
-                            }
-                        }
-
-                        count++;
-                    }
-                    catch (Exception e)
-                    {
-                        Console.WriteLine(e);
-                        throw;
-                    }
-                }
-                
-            }
-            
-            Response.WriteAsync("OK -" + count);
-            
-        }
+//        [HttpGet("migrate/markdown")]
+//        public void MigrateMarkdownFiles()
+//        {
+//            var basePath = Files.GetUploadFilePath(UploadDirType.MarkdownAssets);
+//
+//            var exDescriptions = _context.ExerciseDescriptions
+//                    .Include(p => p.Assets)
+//                    .Where(p => p.Assets.Count > 0)
+//                    .ToList()
+//                ;
+//
+//            int count = 0;
+//            foreach (var exerciseDescription in exDescriptions)
+//            {
+//                foreach (var descriptionAsset in exerciseDescription.Assets)
+//                {
+//                    //create the real file
+//
+//                    try
+//                    {
+//                        using (var transaction = _context.Database.BeginTransaction())
+//                        {
+//                            try
+//                            {
+//                                var fileRef = new FileReferenceMarkdownAsset()
+//                                {
+//                                    OriginalName = descriptionAsset.DisplayName,
+//                                    CreatedAt = (DateTime) _context.Entry(descriptionAsset)
+//                                        .Property(YapexDbContext.CreatedAt)
+//                                        .CurrentValue,
+//                                    LastUpdatedAt = (DateTime) _context.Entry(descriptionAsset)
+//                                        .Property(YapexDbContext.LastUpdatedAt).CurrentValue,
+//                                    MimeType = descriptionAsset.MimeType,
+//                                    SizeInBytes = descriptionAsset.Content.Length,
+//                                    Hash = "",
+//                                };
+//
+//                                var conn = new ExerciseDescriptionWithFileAsAssetReference()
+//                                {
+//                                    ExerciseDescription = exerciseDescription,
+//                                    FileReferenceMarkdownAsset = fileRef
+//                                };
+//
+//                                _context.ExerciseDescriptionWithFileAsAssetReferences.Add(conn);
+//                                _context.SaveChanges();
+//
+//                                if (fileRef.Id <= 0)
+//                                {
+//                                    throw new Exception("fileRef must be tracked in db context");
+//                                }
+//
+//                                try
+//                                {
+//                                    var info = new FileInfo(Path.Combine(basePath, fileRef.Id.ToString()));
+//
+//                                    if (info.Exists)
+//                                    {
+//                                        throw new Exception("file already exists");
+//                                    }
+//
+//                                    using (var stream = new FileStream(info.FullName, FileMode.Create))
+//                                    {
+//                                        stream.Write(descriptionAsset.Content, 0, descriptionAsset.Content.Length);
+//
+//                                        using (var md5 = MD5.Create())
+//                                        {
+//                                            var result = md5.ComputeHash(descriptionAsset.Content);
+//                                            fileRef.Hash = String.Join(String.Empty,
+//                                                result.Select(p => p.ToString("x2")));
+//                                        }
+//                                    }
+//                                }
+//                                catch (Exception e)
+//                                {
+//                                    Console.WriteLine(
+//                                        $"[ERROR] error creating file name: {descriptionAsset.DisplayName}");
+//                                    Console.WriteLine(e.Message);
+//                                    throw;
+//                                }
+//
+//
+//                                _context.SaveChanges();
+//                                transaction.Commit();
+//                            }
+//                            catch (Exception e)
+//                            {
+//                                transaction.Rollback();
+//                                Console.WriteLine(e);
+//                                throw;
+//                            }
+//                        }
+//
+//                        count++;
+//                    }
+//                    catch (Exception e)
+//                    {
+//                        Console.WriteLine(e);
+//                        throw;
+//                    }
+//                }
+//            }
+//
+//
+//            Response.WriteAsync("OK -" + count);
+//        }
+//
+//
+//        [HttpGet("migrate/ex/markdown")]
+//        public void MigrateMarkdownExerciseDescriptionContent()
+//        {
+//            var allDescriptions = _context.ExerciseDescriptions
+//                .Include(p => p.AssetReferences)
+//                .ThenInclude(p => p.FileReferenceMarkdownAsset)
+//                .Include(p => p.Assets)
+//                .ToList();
+//
+//
+//            int count = 0;
+//            int count2 = 0;
+//
+//            using (var transaction = _context.Database.BeginTransaction())
+//            {
+//                try
+//                {
+//                    foreach (var exerciseDescription in allDescriptions)
+//                    {
+//                        if (exerciseDescription.Content.Contains(Constants.MarkdownAssetFileUrlPrefix))
+//                        {
+//
+//                            foreach (var asset in exerciseDescription.Assets)
+//                            {
+//                                //find asset ref
+//
+//                                var assetRef = exerciseDescription.AssetReferences.FirstOrDefault(p =>
+//                                    p.FileReferenceMarkdownAsset.OriginalName == asset.DisplayName &&
+//                                    p.FileReferenceMarkdownAsset.SizeInBytes == asset.Content.Length);
+//
+//                                if (assetRef == null)
+//                                {
+//                                    throw new Exception($"could not find asset ref for asset id {asset.Id} for ex desc {exerciseDescription.Id}");
+//                                }
+//
+//                                exerciseDescription.Content = exerciseDescription.Content.Replace(asset.AssetUrl,
+//                                    Constants.MarkdownAssetFileUrlPrefix + assetRef.FileReferenceMarkdownAssetId);
+//                                count2++;
+//                            }
+//                    
+//                            count++;
+//
+//                        }
+//                    }
+//
+//                    _context.SaveChanges();
+//                    transaction.Commit();
+//                }
+//                catch (Exception e)
+//                {
+//                    transaction.Rollback();
+//                    Console.WriteLine(e);
+//                    throw;
+//                }
+//            }
+//            
+//            
+//            Response.WriteAsync($"OK - {count} - ${count2}");
+//        }
+//
+//
+//        [HttpGet("migrate/tests")]
+//        public void MigrateTestFiles()
+//        {
+//            var basePath = Files.GetUploadFilePath(UploadDirType.TestAssets);
+//
+//            var testsWithAssets = _context.Tests
+//                    .Include(p => p.TestAssets)
+//                    .Where(p => p.TestAssets.Count > 0)
+//                    .ToList()
+//                ;
+//
+//            int count = 0;
+//            foreach (var testWithAsset in testsWithAssets)
+//            {
+//                foreach (var testAsset in testWithAsset.TestAssets)
+//                {
+//                    //create the real file
+//
+//                    try
+//                    {
+//                        using (var transaction = _context.Database.BeginTransaction())
+//                        {
+//                            try
+//                            {
+//                                var fileRef = new FileReferenceTestAsset()
+//                                {
+//                                    OriginalName = testAsset.DisplayName,
+//                                    CreatedAt = (DateTime) _context.Entry(testAsset)
+//                                        .Property(YapexDbContext.CreatedAt)
+//                                        .CurrentValue,
+//                                    LastUpdatedAt = (DateTime) _context.Entry(testAsset)
+//                                        .Property(YapexDbContext.LastUpdatedAt).CurrentValue,
+//                                    MimeType = testAsset.MimeType,
+//                                    SizeInBytes = testAsset.Content.Length,
+//                                    Hash = "",
+//                                };
+//
+//                                var conn = new TestWithFileAsAssetReference()
+//                                {
+//                                    Test = testWithAsset,
+//                                    FileReferenceTestAsset = fileRef
+//                                };
+//
+//                                _context.TestWithFileAsAssetReferences.Add(conn);
+//                                _context.SaveChanges();
+//
+//                                if (fileRef.Id <= 0)
+//                                {
+//                                    throw new Exception("fileRef must be tracked in db context");
+//                                }
+//
+//                                try
+//                                {
+//                                    var info = new FileInfo(Path.Combine(basePath, fileRef.Id.ToString()));
+//
+//                                    if (info.Exists)
+//                                    {
+//                                        throw new Exception($"file already exists: {info.FullName}");
+//                                    }
+//
+//                                    using (var stream = new FileStream(info.FullName, FileMode.Create))
+//                                    {
+//                                        stream.Write(testAsset.Content, 0, testAsset.Content.Length);
+//
+//                                        using (var md5 = MD5.Create())
+//                                        {
+//                                            var result = md5.ComputeHash(testAsset.Content);
+//                                            fileRef.Hash = String.Join(String.Empty,
+//                                                result.Select(p => p.ToString("x2")));
+//                                        }
+//                                    }
+//                                }
+//                                catch (Exception e)
+//                                {
+//                                    Console.WriteLine(
+//                                        $"[ERROR] error creating file name: {testAsset.DisplayName}");
+//                                    Console.WriteLine(e.Message);
+//                                    throw;
+//                                }
+//
+//
+//                                _context.SaveChanges();
+//                                transaction.Commit();
+//                            }
+//                            catch (Exception e)
+//                            {
+//                                transaction.Rollback();
+//                                Console.WriteLine(e);
+//                                throw;
+//                            }
+//                        }
+//
+//                        count++;
+//                    }
+//                    catch (Exception e)
+//                    {
+//                        Console.WriteLine(e);
+//                        throw;
+//                    }
+//                }
+//            }
+//
+//
+//            Response.WriteAsync("OK -" + count);
+//        }
+//
+//
+//        [HttpGet("migrate/custom/tests")]
+//        public void MigrateCustomTestAssets()
+//        {
+//            var basePath = Files.GetUploadFilePath(UploadDirType.UserAssets);
+//
+//            var testsWithAssets = _context.CustomTest
+//                    .Include(p => p.TestAssets)
+//                    .Where(p => p.TestAssets.Count > 0)
+//                    .ToList()
+//                ;
+//
+//            int count = 0;
+//
+//            foreach (var customTest in testsWithAssets)
+//            {
+//                foreach (var customTestAsset in customTest.TestAssets)
+//                {
+//                    //create the real file
+//
+//                    try
+//                    {
+//                        using (var transaction = _context.Database.BeginTransaction())
+//                        {
+//                            try
+//                            {
+//                                var fileRef = new FileReferenceUserFileAsset()
+//                                {
+//                                    OriginalName = customTestAsset.DisplayName,
+//                                    CreatedAt = (DateTime) _context.Entry(customTestAsset)
+//                                        .Property(YapexDbContext.CreatedAt)
+//                                        .CurrentValue,
+//                                    LastUpdatedAt = (DateTime) _context.Entry(customTestAsset)
+//                                        .Property(YapexDbContext.LastUpdatedAt).CurrentValue,
+//                                    MimeType = customTestAsset.MimeType,
+//                                    SizeInBytes = customTestAsset.Content.Length,
+//                                    Hash = "",
+//                                };
+//
+//                                var conn = new CustomTestWithFileAsAssetReference()
+//                                {
+//                                    CustomTest = customTest,
+//                                    FileReferenceUserFileAsset = fileRef
+//                                };
+//
+//                                _context.CustomTestWithFileAsAssetReferences.Add(conn);
+//                                _context.SaveChanges();
+//
+//                                if (fileRef.Id <= 0)
+//                                {
+//                                    throw new Exception("fileRef must be tracked in db context");
+//                                }
+//
+//                                try
+//                                {
+//                                    var info = new FileInfo(Path.Combine(basePath, fileRef.Id.ToString()));
+//
+//                                    if (info.Exists)
+//                                    {
+//                                        throw new Exception($"file already exists: {info.FullName}");
+//                                    }
+//
+//                                    using (var stream = new FileStream(info.FullName, FileMode.Create))
+//                                    {
+//                                        stream.Write(customTestAsset.Content, 0, customTestAsset.Content.Length);
+//
+//                                        using (var md5 = MD5.Create())
+//                                        {
+//                                            var result = md5.ComputeHash(customTestAsset.Content);
+//                                            fileRef.Hash = String.Join(String.Empty,
+//                                                result.Select(p => p.ToString("x2")));
+//                                        }
+//                                    }
+//                                }
+//                                catch (Exception e)
+//                                {
+//                                    Console.WriteLine(
+//                                        $"[ERROR] error creating file name: {customTestAsset.DisplayName}");
+//                                    Console.WriteLine(e.Message);
+//                                    throw;
+//                                }
+//
+//
+//                                _context.SaveChanges();
+//                                transaction.Commit();
+//                            }
+//                            catch (Exception e)
+//                            {
+//                                transaction.Rollback();
+//                                Console.WriteLine(e);
+//                                throw;
+//                            }
+//                        }
+//
+//                        count++;
+//                    }
+//                    catch (Exception e)
+//                    {
+//                        Console.WriteLine(e);
+//                        throw;
+//                    }
+//                }
+//                
+//            }
+//            
+//            Response.WriteAsync("OK -" + count);
+//            
+//        }
+//        
+//        
+//        [HttpGet("migrate/custom/project/description")]
+//        public void MigrateCustomProjectDescriptionAssets()
+//        {
+//            var basePath = Files.GetUploadFilePath(UploadDirType.UserAssets);
+//
+//            var customProjectDescriptions = _context.CustomProjectDescriptions
+//                    .Include(p => p.Assets)
+//                    .Where(p => p.Assets.Count > 0)
+//                    .ToList()
+//                ;
+//
+//            int count = 0;
+//
+//            foreach (var customProjectDescription in customProjectDescriptions)
+//            {
+//                foreach (var customAsset in customProjectDescription.Assets)
+//                {
+//                    //create the real file
+//
+//                    try
+//                    {
+//                        using (var transaction = _context.Database.BeginTransaction())
+//                        {
+//                            try
+//                            {
+//                                var fileRef = new FileReferenceUserFileAsset()
+//                                {
+//                                    OriginalName = customAsset.DisplayName,
+//                                    CreatedAt = (DateTime) _context.Entry(customAsset)
+//                                        .Property(YapexDbContext.CreatedAt)
+//                                        .CurrentValue,
+//                                    LastUpdatedAt = (DateTime) _context.Entry(customAsset)
+//                                        .Property(YapexDbContext.LastUpdatedAt).CurrentValue,
+//                                    MimeType = customAsset.MimeType,
+//                                    SizeInBytes = customAsset.Content.Length,
+//                                    Hash = "",
+//                                };
+//
+//                                var conn = new CustomProjectDescriptionWithFileAsAssetReference()
+//                                {
+//                                    CustomProjectDescription = customProjectDescription,
+//                                    FileReferenceUserFileAsset = fileRef
+//                                };
+//
+//                                _context.CustomProjectDescriptionWithFileAsAssetReferences.Add(conn);
+//                                _context.SaveChanges();
+//
+//                                if (fileRef.Id <= 0)
+//                                {
+//                                    throw new Exception("fileRef must be tracked in db context");
+//                                }
+//
+//                                try
+//                                {
+//                                    var info = new FileInfo(Path.Combine(basePath, fileRef.Id.ToString()));
+//
+//                                    if (info.Exists)
+//                                    {
+//                                        throw new Exception($"file already exists: {info.FullName}");
+//                                    }
+//
+//                                    using (var stream = new FileStream(info.FullName, FileMode.Create))
+//                                    {
+//                                        stream.Write(customAsset.Content, 0, customAsset.Content.Length);
+//
+//                                        using (var md5 = MD5.Create())
+//                                        {
+//                                            var result = md5.ComputeHash(customAsset.Content);
+//                                            fileRef.Hash = String.Join(String.Empty,
+//                                                result.Select(p => p.ToString("x2")));
+//                                        }
+//                                    }
+//                                }
+//                                catch (Exception e)
+//                                {
+//                                    Console.WriteLine(
+//                                        $"[ERROR] error creating file name: {customAsset.DisplayName}");
+//                                    Console.WriteLine(e.Message);
+//                                    throw;
+//                                }
+//
+//
+//                                _context.SaveChanges();
+//                                transaction.Commit();
+//                            }
+//                            catch (Exception e)
+//                            {
+//                                transaction.Rollback();
+//                                Console.WriteLine(e);
+//                                throw;
+//                            }
+//                        }
+//
+//                        count++;
+//                    }
+//                    catch (Exception e)
+//                    {
+//                        Console.WriteLine(e);
+//                        throw;
+//                    }
+//                }
+//                
+//            }
+//            
+//            Response.WriteAsync("OK -" + count);
+//            
+//        }
+//        
+//        [HttpGet("migrate/custom/project/markdown")]
+//        public void MigrateMarkdownCustomProjectDescriptionContent()
+//        {
+//            
+//            var allDescriptions = _context.CustomProjectDescriptions
+//                .Include(p => p.AssetReferences)
+//                .ThenInclude(p => p.FileReferenceUserFileAsset)
+//                .Include(p => p.Assets)
+//                .ToList();
+//
+//
+//            int count = 0;
+//            int count2 = 0;
+//
+//            using (var transaction = _context.Database.BeginTransaction())
+//            {
+//                try
+//                {
+//                    foreach (var customProjectDescription in allDescriptions)
+//                    {
+//                        if (customProjectDescription.Content.Contains(Constants.MarkdownAssetFileUrlPrefix))
+//                        {
+//
+//                            foreach (var asset in customProjectDescription.Assets)
+//                            {
+//                                //find asset ref
+//
+//                                var assetRef = customProjectDescription.AssetReferences.FirstOrDefault(p =>
+//                                    p.FileReferenceUserFileAsset.OriginalName == asset.DisplayName &&
+//                                    p.FileReferenceUserFileAsset.SizeInBytes == asset.Content.Length);
+//
+//                                if (assetRef == null)
+//                                {
+//                                    throw new Exception($"could not find asset ref for asset id {asset.Id} for ex desc {customProjectDescription.Id}");
+//                                }
+//
+//                                customProjectDescription.Content = customProjectDescription.Content.Replace(asset.AssetUrl,
+//                                    Constants.MarkdownAssetFileUrlPrefix + assetRef.FileReferenceUserFileAssetId);
+//                                count2++;
+//                            }
+//                    
+//                            count++;
+//
+//                        }
+//                    }
+//
+//                    _context.SaveChanges();
+//                    transaction.Commit();
+//                }
+//                catch (Exception e)
+//                {
+//                    transaction.Rollback();
+//                    Console.WriteLine(e);
+//                    throw;
+//                }
+//            }
+//            
+//            
+//            Response.WriteAsync($"OK - {count} - ${count2}");
+//        }
+//        
+//        [HttpGet("migrate/custom/project/tests")]
+//        public void MigrateCustomProjectTestAssets()
+//        {
+//            var basePath = Files.GetUploadFilePath(UploadDirType.UserAssets);
+//
+//            var testsWithAssets = _context.CustomProjectTests
+//                    .Include(p => p.TestAssets)
+//                    .Where(p => p.TestAssets.Count > 0)
+//                    .ToList()
+//                ;
+//
+//            int count = 0;
+//
+//            foreach (var customProjectTest in testsWithAssets)
+//            {
+//                foreach (var customProjectTestAsset in customProjectTest.TestAssets)
+//                {
+//                    //create the real file
+//
+//                    try
+//                    {
+//                        using (var transaction = _context.Database.BeginTransaction())
+//                        {
+//                            try
+//                            {
+//                                var fileRef = new FileReferenceUserFileAsset()
+//                                {
+//                                    OriginalName = customProjectTestAsset.DisplayName,
+//                                    CreatedAt = (DateTime) _context.Entry(customProjectTestAsset)
+//                                        .Property(YapexDbContext.CreatedAt)
+//                                        .CurrentValue,
+//                                    LastUpdatedAt = (DateTime) _context.Entry(customProjectTestAsset)
+//                                        .Property(YapexDbContext.LastUpdatedAt).CurrentValue,
+//                                    MimeType = customProjectTestAsset.MimeType,
+//                                    SizeInBytes = customProjectTestAsset.Content.Length,
+//                                    Hash = "",
+//                                };
+//
+//                                var conn = new CustomProjectTestWithFileAsAssetReference()
+//                                {
+//                                    CustomProjectTest = customProjectTest,
+//                                    FileReferenceUserFileAsset = fileRef
+//                                };
+//
+//                                _context.CustomProjectTestWithFileAsAssetReferences.Add(conn);
+//                                _context.SaveChanges();
+//
+//                                if (fileRef.Id <= 0)
+//                                {
+//                                    throw new Exception("fileRef must be tracked in db context");
+//                                }
+//
+//                                try
+//                                {
+//                                    var info = new FileInfo(Path.Combine(basePath, fileRef.Id.ToString()));
+//
+//                                    if (info.Exists)
+//                                    {
+//                                        throw new Exception($"file already exists: {info.FullName}");
+//                                    }
+//
+//                                    using (var stream = new FileStream(info.FullName, FileMode.Create))
+//                                    {
+//                                        stream.Write(customProjectTestAsset.Content, 0, customProjectTestAsset.Content.Length);
+//
+//                                        using (var md5 = MD5.Create())
+//                                        {
+//                                            var result = md5.ComputeHash(customProjectTestAsset.Content);
+//                                            fileRef.Hash = String.Join(String.Empty,
+//                                                result.Select(p => p.ToString("x2")));
+//                                        }
+//                                    }
+//                                }
+//                                catch (Exception e)
+//                                {
+//                                    Console.WriteLine(
+//                                        $"[ERROR] error creating file name: {customProjectTestAsset.DisplayName}");
+//                                    Console.WriteLine(e.Message);
+//                                    throw;
+//                                }
+//
+//
+//                                _context.SaveChanges();
+//                                transaction.Commit();
+//                            }
+//                            catch (Exception e)
+//                            {
+//                                transaction.Rollback();
+//                                Console.WriteLine(e);
+//                                throw;
+//                            }
+//                        }
+//
+//                        count++;
+//                    }
+//                    catch (Exception e)
+//                    {
+//                        Console.WriteLine(e);
+//                        throw;
+//                    }
+//                }
+//                
+//            }
+//            
+//            Response.WriteAsync("OK -" + count);
+//            
+//        }
         
     }
 }